#include <reg51.h>
#include <intrins.h>
int num=0;
void timer1init();
void delay(char k)
{
while(k--);
}
void display(int i)
{
static int wei;
char code a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
switch(wei)
{
case 0: P2=0x7F;P0=a[i/100]; break;
case 1: P2=0xBF;P0=a[i/10%10];break;
case 2: P2=0xDF;P0=a[i%10]; break;
}
wei++ ;
if(wei==3)
wei=0;
delay(2);
}
void timer0init()
{
EA=1;
ET0=1;
TR0=1;
// REN=1;
TMOD |=0x01;
TH0=0xed;
TL0=0xff;
}
void UARTInit()
{
EA=1;
ES=1;
SM0=0;
REN=1;
TR1=1;
TMOD |=0x01;
TH1=0xfd;
TL1=0xfd;
}
void main()
{
timer0init();
UARTInit();
while(1)
{
}
}
void int1() interrupt 1
{
TH0=0xed;
TL0=0xff;
display(num);
}
void UART() interrupt 4
{
if(RI)
{
num=SBUF;
RI=0;
}
}
STC89C51单片机串口通讯 ,发送数据数码管不显示,是因为串口初始化程序错误,设置串口方式1,要写成一行,别分开写,那样写是错的。
写成SCON=0x50;
TMOD方式也错了,串口用定时器T1的方式2。应该是
TMOD|=0x20;
你这个程序,T0和串口初始化写成了两个子程序,最好不要这么写程序,直接在主程序中合并写一起,更简单,别养成这种写程序的习惯,实在不值得提倡。
多谢大佬,我感觉您是真的强