?? chuanhangsuma.c
字號(hào):
/*1.用串行口實(shí)現(xiàn)多片數(shù)碼管的靜態(tài)顯示,并用4個(gè)數(shù)碼管完成4位十進(jìn)制計(jì)數(shù)器功能
2.利用串并轉(zhuǎn)換接口74LS164對(duì)數(shù)碼管進(jìn)行擴(kuò)展,電路中接了4個(gè)數(shù)碼管,通過P1口的
低4信來控制數(shù)碼管的更新顯示
*/
#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;//計(jì)數(shù)初值寫入
TL0=0XAF;
ET0=1; //開中斷
EA=1; //開總中斷
TF0=0; //定時(shí)器0中斷標(biāo)志位清0
TR0=1; //定時(shí)器0開始定時(shí)
p10=1;
change_flag=0;
ncounter=0;
while(1)
{ if(change_flag==1)
{ update_LED(); //調(diào)用顯示
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;
/*計(jì)數(shù)時(shí)間到1S計(jì)數(shù)值加1*/
}
ncounter++;
}
uart_init()
{ SCON=0x52; //設(shè)置串行口控制寄存器
TMOD=0x21; //12M時(shí)鐘波特率為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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -