/*
这是个四位数10进制数码显示程序,最大可显示9999,因为8位通常最大数只能到255,利用两位最大十进数99,小于3位数255,可以
正常显示.设计想法就利用两对两位数值的递加来实现最大数显9999的值.当然可以参考这个做更多位的.可以做成10进制秒表,不过
我中断停留程序还没学,就这些吧.希望有人能帮忙多提见解.
*/
#include"reg52.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar temp1,temp2,aa,qian,bai,shi,ge;
void delay(uint z);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66 ,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar qian,uchar bai,uchar shi,uchar ge);
void init();
void main()
{
init(); //中断初始化
while(1)
/*步骤四,就是段显值递加程序设计,如下*/
{
if(aa==20) //相当于显数亮停留的时间必须小于一个周期256,否则将数显将一直亮0000,不懂解释的对不对
{
aa=0; //这个为什么要初值,如果不初值那会显数将很快跳过
temp1++;
if(temp1==100)
{
temp1=0;
temp2++;
if(temp2==100)
{
temp2=0;
}
}
qian=temp2%100/10; //取十位位值
bai=temp2%10; //取个位位值
shi=temp1%100/10;
ge=temp1%10;
}
display(qian,bai,shi,ge); //载入位显位置
}
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=30;y>0;y--);
}
void display(uchar qian,uchar bai,uchar shi,uchar ge) //位显位置函数组
/*步骤一,首先我们应该要做的就是让哪四个位显能显示,如下*/
{
duan=1;
P0=table[qian];
duan=0;
P0=0xff;
wei=1;
P0=0xfe;
wei=0;
delay(1);
duan=1;
P0=table[bai];
duan=0;
P0=0xff;
wei=1;
P0=0xfd;
wei=0;
delay(1);
duan=1;
P0=table[shi];
duan=0;
P0=0xff;
wei=1;
P0=0xfb;
wei=0;
delay(1);
duan=1;
P0=table[ge];
duan=0;
P0=0xff;
wei=1;
P0=0xf7;
wei=0;
delay(1);
}
void init() //步骤二,中断请求初始函数组
{
wei=0;
duan=0;
temp1=0;
temp2=0;
TMOD=0x01;
TH0=0xfe;
TL0=0xfe;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //步骤三,中断次数,相当于中断时间
{
TH0=0xfe;
TL0=0xfe;
aa++;
}
学习学习,谢谢啦
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |