|
樓主只寫(xiě)了串口初始化程序并且還是錯(cuò)誤的,沒(méi)有寫(xiě)串口發(fā)送語(yǔ)句。你這個(gè)按鍵程序會(huì)干擾數(shù)碼管顯示和串口,所以都放在中斷里了。并把全部錯(cuò)誤改正了,串口1秒發(fā)送1次數(shù)據(jù)。有詳細(xì)注釋。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//sbit key1=P3^0;//P3.0、P3.1是串口引腳,不宜重疊使用
//sbit key2=P3^1;
//sbit key3=P3^2;
//sbit key4=P3^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
uchar numt0,num;
bit flag=0;//開(kāi)/停位變量
void display(uchar numdis)
{
static bit i=0;
// uchar shi,ge;
// shi=numdis/10;
// ge=numdis%10;
P0=0x00;//消隱
dula=1;
dula=0;
if(i==1)
{
P0=0xfe;
wela=1;
wela=0;
P0=table[numdis/10];
dula=1;
dula=0;
i=~i;
}
else
{
P0=0xfd;
wela=1;
wela=0;
P0=table[numdis%10];
dula=1;
dula=0;
i=~i;
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
// TMOD= 0x01;
TMOD|=0x01;//重復(fù)設(shè)置TMOD需要加"|"符
TH0=(65536-4608)/256;//5ms
TL0=(65536-4608)%256;
EA=1;
ET0=1;
TR0=1;
}
void UART_init()
{
// TMOD= 0x20;
TMOD|=0x20;//重復(fù)設(shè)置TMOD需要加"|"符
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
// EA = 1;//重復(fù)設(shè)置,多余
// ES = 1;//只發(fā)不收,多余
}
void main()
{
// UART_init;//這里少()
UART_init();
init();
while(1)
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
numt0=0;
num=0;
flag=0;
while(!key1);
}
}
if (key2==0)
{
delayms(10);
if(key2==0)
{
flag=~flag;
while(!key2);
// TR0=~TR0;
}
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-4608)/256;//5ms
TL0=(65536-4608)%256;
if(flag)
{
numt0++;
if(numt0==200)
{
numt0=0;
num++;
if(num==60)
num=0;
SBUF=num; //每隔秒發(fā)送一次數(shù)據(jù)
while(!TI); //等待發(fā)送中斷請(qǐng)求標(biāo)志位為1(發(fā)送結(jié)束)
TI=0; //發(fā)送中斷請(qǐng)求標(biāo)志位清0,為下次發(fā)送做準(zhǔn)備
}
}
display(num);//動(dòng)態(tài)顯示放在中斷里不受按鍵干擾
}
|
|