程序源码:
#include<reg51.h>
unsigned char TR0H,TR0L;
unsigned char LED[]= {0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char LEDBuff[8]={0};
unsigned int shuju;
void configeUART(unsigned int Buad)
{
SCON=0x50; //串口工作模式1;使能串口中断
TMOD=TMOD & 0x0f;
TMOD=TMOD | 0x20; //设定定时器模式为2
TH1=256-11952000/12/16/2/Buad; //计算装载值
TL1=TH1; //若PCON中最高位设定为1,则TH1=256-晶振/12/16/Buad;
ET1=0; //系统模式ET1=0;此处的作用警示不得再使用定时器1
ES=1; //使能串口中断
TR1=1; //启动定时器1
}
void confige
timer0(unsigned char ms) //设定T0计数值
{
unsigned long tmp;
tmp=65536-12000000*ms/12/1000;
TR0H=(unsigned char )(tmp>>8);
TR0L=(unsigned char )tmp;
TMOD &= 0xf0;
TMOD |= 0x01;
TH0=TR0H;
TL0=TR0L;
ET0=1;
TR0=1;
}
void LEDchuli()
{
LEDBuff[0]=LED[((unsigned char )(shuju>>4)&0x0f)];
LEDBuff[1]=LED[shuju&0x0f];
}
void LEDScan()
{
static unsigned char i = 1 ;
P0=0x00;
if (i>2)
i=1;
switch(i)
{
case 1
0=LEDBuff[0]
2=0x00;i++;break;
case 2
0=LEDBuff[1]
2=0x01;i++;break;
default: break;
}
}
void main()
{
EA=1;
configeTimer0(4);
configeUART(9600);
while(1)
{LEDchuli();}
}
void interrupttimer0() interrupt 1
{
TH0=TR0H;
TL0=TR0L;
LEDScan();
}
void interruptUART() interrupt 4
{
if (RI)
{
RI=0; //软件清零
shuju=SBUF;
SBUF=shuju;
}
if (TI)
{
} TI=0;
}
出现问题1:通过串口助手写如数据时,返回给串口的数据不对。
出现问题2:写入数据时,数码管低位显示正确,高位一直为7,请教哪里出问题,求解决。
本帖子中包含更多资源
您需要
登录 才可以下载或查看,没有帐号?
注册
x
一周热门 更多>