标题: 跑表程序设计 [打印本页]

作者: 51SCM    时间: 2017-2-26 11:23
标题: 跑表程序设计
/*数码管前三位显示一个跑表,三个独立键盘实现按下第一个时计时停止,
按下第二个时计时开始,按下第三个是计数值清零从头开始。*/

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
sbit w1=P2^0;
sbit w2=P2^1;
sbit w3=P2^2;

uchar num,t0,bai,shi,ge,flag;
uint shu;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};

void delay(uint z);
void init();
void display(uchar bai,uchar shi,uchar ge);
void keyscan();

void main()
{
        init();
        while(1)
        {
                keyscan();
                if(flag==0)
                        display(bai,shi,ge);       
                else               
                        display(0,0,0);               
        }
}

void init()
{
        shu=0;
        t0=0;
        flag=0;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t0++;
        if(t0==3)
        {
                t0=0;
                shu++;
                bai=shu/100;
                shi=shu%100/10;
                ge=shu%10;
                if(shu==1000)
                        shu=0;
        }
}

void display(uchar bai,uchar shi,uchar ge)
{
         P0=0xff;
         w1=0;
         P0=table[bai];
         w1=1;
         delay(1);

         P0=0xff;
         w2=0;
         P0=table[shi];
         w2=1;
         delay(1);

         P0=0xff;
         w3=0;
         P0=table[ge];
         w3=1;
         delay(1);

}

void keyscan()
{
         if(key1==0)
         {
                 while(!key1);
                TR0=0;
         }                          
       
         if(key2==0)
         {
                 while(!key2);
                flag=0;
                  TR0=1;
         }
         
         if(key3==0)       
         {
                while(!key3);
                shu=0;
                flag=1;
                TR0=0;
         }
         
}




作者: admin    时间: 2017-2-27 00:41
楼主能分享一下该程序的电路原理图吗?
作者: 51SCM    时间: 2017-3-2 09:55
admin 发表于 2017-2-27 00:41
楼主能分享一下该程序的电路原理图吗?

这是基于开发板KR-51所写的程序。。
作者: 51SCM    时间: 2017-3-2 09:57
原理图如下

捕获.PNG (77.15 KB, 下载次数: 44)

捕获.PNG

独立按键.PNG (9.65 KB, 下载次数: 51)

独立按键.PNG

数码管显示电路.PNG (28.78 KB, 下载次数: 58)

数码管显示电路.PNG





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1