📄 chuanhangsuma.c
字号:
/*1.用串行口实现多片数码管的静态显示,并用4个数码管完成4位十进制计数器功能
2.利用串并转换接口74LS164对数码管进行扩展,电路中接了4个数码管,通过P1口的
低4信来控制数码管的更新显示
*/
#include<reg51.h>
uart_init();
sbit p10=0x90;
sbit p11=0x91;
sbit p12=0x92;
sbit p13=0x93;
bit change_flag;
void update_LED();
xdata int ncounter=0;
xdata int nindex=0;
xdata int ndatatodisplay=0;
char table[10]={0xc0,0xed,0xb0,0xa8,0x8d,0x8a,0x82,0xec,0x80,0x88};
//主程序
main()
{ uart_init();
TH0=0X3C;//计数初值写入
TL0=0XAF;
ET0=1; //开中断
EA=1; //开总中断
TF0=0; //定时器0中断标志位清0
TR0=1; //定时器0开始定时
p10=1;
change_flag=0;
ncounter=0;
while(1)
{ if(change_flag==1)
{ update_LED(); //调用显示
if(ndatatodisplay>9999) ndatatodisplay=0;
//printf()
}
}
}
void timer0_overflow() interrupt 1 using 0
{ TH0=0X3C;
TL0=0XAF;
if(ncounter==20)
{ ncounter=0;
change_flag=1;
/*计数时间到1S计数值加1*/
}
ncounter++;
}
uart_init()
{ SCON=0x52; //设置串行口控制寄存器
TMOD=0x21; //12M时钟波特率为2400
TCON=0x69;
TH1 =0xf3;
}
void update_LED()
{ int ntemp;
ntemp-ndatatodisplay;
p13=0;
nindex=ntemp%10;
SBUF=table[nindex];
p13=1;
while(!TI);
TI=0;
ntemp/=10;
p12=0;
nindex=ntemp%10;
SBUF=table[nindex];
p12=1;
while(!TI);
TI=0;
ntemp/=10;
p11=0;
nindex=ntemp%10;
SBUF=table[nindex];
p11=1;
while(!TI);
TI=0;
ntemp/=10;
p10=0;
nindex=ntemp%10;
SBUF=table[nindex];
p10=1;
change_flag=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -