您的位置 首页 设计

串口通讯-数据发送到PC加1后接收到单片机在数码管上显现

本程序的完整原理图下载:http:www51heicomfks51pdf***功能:串口通信-数据发送到PC加一后接收到单片机在数码管上显示*时间:2014年

本程序的完好原理图下载:http://www.51hei.com/f/ks51.pdf

/**
*功用:串口通讯数据发送到PC加一后接纳到单片机数码管上显现
*时刻:2014年3月2日10:04:07
*作者:寒竹子
*补白:波特率:19200bps
*总结:串口通讯时需求发送和接纳数据时能够用到串口中止,在中止中进行数据的发送和接纳,
* 数码管显现时必需求放在while (1)中,只要这样才能够正常显现数字!
**/

#include

typedef unsigned int uint;
typedef unsigned char uchar;

//数码管段选和位选声明
sbit WELA = P2^7;
sbit DULA = P2^6;

//数码管编码
uchar code table[] = {
0x3F, //”0″
0x06, //”1″
0x5B, //”2″
0x4F, //”3″
0x66, //”4″
0x6D, //”5″
0x7D, //”6″
0x07, //”7″
0x7F, //”8″
0x6F //”9″
};
uint num = 254;

void UART_init();
void UART_init();
void display(uint num);

int main(void)
{
UART_init();
WELA = 1;
P0 = 0xFF;
WELA = 0;
DULA = 1;
P0 = 0x00;
DULA = 0;

while (1)//等候串口发送和接纳数据中止
{
//在数码管上显现
display(num);//数码管显现是动态显现的,所以必需求放在while (1)循环中,这样才能够动态显现!
P1 = num;
}

return 0;
}

//串口通讯初始化(定时器T1初始化和串口通讯方法的挑选)
void UART_init()
{
//设定T1定时器工作方法2,八位主动重装,用于设定串口通讯波特率
TMOD = 0x20;//T1: GATE C/!T 0 0 M1 M0:10 T0:0000
//设定波特率19200bps 初值 X = 2^8 – 11059200 / 19200 / 12 /32; X = 254.5 0xFE
TH1 = TL1 = 0xFE;
TR1 = 1;//翻开定时器T1
SCON = 0x50;//设定串口通讯方法1,八位异步传输波特率可设定
/*
SM0 = 0;
SM1 = 1;//方法1
REN = 1;//答应接纳
*/
//由于要进行发送和接纳,需求用到串口中止
EA = 1;//开总中止
ES = 1;//开定时器T1中止
}

//延时xms
void delayms(uint xms)
{
uint i, j;

for (i = 0; i < xms; i++)
for (j = 0; j < 110; j++);
}

//数码管显现
void display(uint num)
{
//将num分化
uchar bai, shi, ge;

bai = num / 100 % 10;
shi = num / 10 % 10;
ge = num % 10;

//先段选后位选
DULA = 1;//翻开段选锁存器
P0 = table[ge];//送入个位
DULA = 0;//封闭段选锁存器
P0 = 0xFF;//先封闭一切数码管的显现,防止乱码
WELA = 1;//翻开位选锁存器
P0 = 0xDF;//1101 1111
WELA = 0;//封闭位选锁存器
//延时3毫秒
delayms(3);
P0 = 0x00;//消影

//十位
DULA = 1;
P0 = table[shi];
DULA = 0;
P0 = 0xFF;
WELA = 1;
P0 = 0xEF; //1110 1111
WELA = 0;
delayms(3);
P0 = 0x00;

//百位
DULA = 1;
P0 = table[bai];
DULA = 0;
P0 = 0xFF;//封闭一切数码管,防止段选数据的影响
WELA = 1;
P0 = 0xF7; //1111 0111
WELA = 0;
delayms(3);
P0 = 0x00;//消影
}

//串口通讯中止
void UART_sendAndReceive_int() interrupt 4//串口中止号4
{
//判别发送和接纳的完结
if (TI)//硬件置位,发送数据完结
{
TI = 0;//TI清零,等候发送下一位数据
//答应接纳数据
REN = 1;
}
//接纳
if (RI)//接纳完结
{
RI = 0;//RI清零,等候接纳下一位数据
//取出SBUF中的数据
num = SBUF;
//num++
num++;
//制止接纳数据
REN = 0;
SBUF = num;//发送num
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/253995.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部