標(biāo)題:
單片機(jī)數(shù)碼管顯示程序
[打印本頁(yè)]
作者:
lx80072
時(shí)間:
2019-7-3 22:25
標(biāo)題:
單片機(jī)數(shù)碼管顯示程序
設(shè)計(jì)一個(gè)帶有控制功能脈沖計(jì)數(shù)器系統(tǒng),被計(jì)數(shù)脈沖由T1(P3.5)輸入,所記錄的脈沖數(shù)以十進(jìn)制形式在數(shù)碼管顯示(至少應(yīng)可記錄256個(gè)脈沖);1個(gè)點(diǎn)動(dòng)開關(guān)控制是否允許計(jì)數(shù)(按1次允許,再按1次禁止。再按又允許。。。。),1個(gè)點(diǎn)動(dòng)開關(guān)作為外部脈沖輸入,不啟動(dòng)計(jì)數(shù)時(shí),數(shù)碼管顯示6位學(xué)號(hào)(在6個(gè)數(shù)碼管顯示),啟動(dòng)計(jì)數(shù)后數(shù)碼管顯示計(jì)數(shù)個(gè)數(shù)(在最右側(cè)三個(gè)數(shù)碼管上顯示)。
系統(tǒng)增加脈沖發(fā)生器功能,由T0產(chǎn)生周期為2s的方波,由P3.0口輸出到LED0,用發(fā)光二極管顯示方波信號(hào);
單片機(jī)程序如下:
#include<reg51.h>
#include<intrins.h>
charxuehao[]={0x7d,0x6d,0x3f,0x4f,0x07,0x06}; //這里順序分別是4 5 6 3 7 1(按照需要自己改)
code unsigned char LEDMAP[] = { // 八段管顯示碼
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 //這里是從1~f(16進(jìn)制)
};
sbit p3_0=P3^0;
char t=0;
void delay(char j)
{
chari;
for(i=0;i<125;i++)
for(;j>0;j--);
}
void main()
{
charled,a,b,c,count;
TMOD=0x51; //這里是T1計(jì)數(shù),T0定時(shí),如果這里改了,那么后邊的TH1,TH0等等都得改一下,相信大家應(yīng)該都會(huì)!
EA=1;
ET0=1;
ET1=1;
TR1=0;
TR0=1;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
TH1=TL1=0;
TH0=3c;
TL0=b0;
p3_0=1;
while(1)
{
if(TR1==0)
{
P2=0x20;
for(led=0;led<6;led++)
{
P1=xuehao[led];
delay(30);
P2>>=1;
}
}
else if(TR1==1)
{
count=TL1;
c=count/100;
b=(count%100)/10;
a=count%10;
P2=0x08;
P1= LEDMAP[c];
delay(300);
P2=0x10;
P1= LEDMAP[ b];
delay(300);
P2=0x20;
P1= LEDMAP[a];
delay(300);
}
}
}
void key()interrupt 0
{
TR1=!TR1;
if(TR1==0)
TL1=0;
}
void key2()interrupt 2
{
TR0=!TR0;
if(TR0==0)
p3_0=0;
}
void time()interrupt 1
{
TH0=3c;
TL0=b0;
t++;
if(t==20)
{
p3_0=!p3_0;
t=0;
}
}
復(fù)制代碼
作者:
admin
時(shí)間:
2019-7-3 23:20
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1