标题:
单片机数码管显示程序
[打印本页]
作者:
lx80072
时间:
2019-7-3 22:25
标题:
单片机数码管显示程序
设计一个带有控制功能脉冲计数器系统,被计数脉冲由T1(P3.5)输入,所记录的脉冲数以十进制形式在数码管显示(至少应可记录256个脉冲);1个点动开关控制是否允许计数(按1次允许,再按1次禁止。再按又允许。。。。),1个点动开关作为外部脉冲输入,不启动计数时,数码管显示6位学号(在6个数码管显示),启动计数后数码管显示计数个数(在最右侧三个数码管上显示)。
系统增加脉冲发生器功能,由T0产生周期为2s的方波,由P3.0口输出到LED0,用发光二极管显示方波信号;
单片机程序如下:
#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进制)
};
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计数,T0定时,如果这里改了,那么后边的TH1,TH0等等都得改一下,相信大家应该都会!
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;
}
}
复制代码
作者:
admin
时间:
2019-7-3 23:20
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1