数码管为共阴极数码管,数码管前两位显示一个秒表,从00到59之间以1s速度运行,当按下一个独立键盘

数码管为共阴极数码管,数码管前两位显示一个秒表,从00到59之间以1s速度运行,当按下一个独立键盘时,跑表停止,松开手后跑表继续运行,按键接在P3.6口(用定时器0设计)

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit com1=P3^7;  //位定义共阴极接口
sbit com2=P3^6;
sbit com3=P3^5;
sbit com4=P3^4;
sbit luck1=P2^0;  //位定义 按键接口
sbit luck2=P2^1;
sbit luck3=P2^2;
sbit luck4=P2^3;
void delay(uint z);
void luck();
uchar num,num1,shi,ge;
uint n,h,k;
uchar code table[]=
{
0xD7,0x14,0xCD,0x5D,  //  0 1 2 3
0x1E,0x5B,0xDB,0x15,  //  4 5 6 7
0xDF,0x5F};   //  8 9  自己编写的 数码管段选显示数字
void delay(uint z)   
{
uint i,j; //延时  z ms
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar shi,uchar ge)      //显示子函数
{
com3=0;  
P0=table[shi];    //定义十位
delay(5);    //延时 5 ms

    com4=0;  
P0=table[ge];    //定义个位
delay(5);    //延时 5 ms
}
void main () //主函数
{
num=0;
num1=0;
luck1=1;
luck2=1;
luck3=1;
luck4=1;


TMOD=0x01;    //设置定时器0为工作方式1
TH0=(65536-45872)/256;    //赋初值
TL0=(65536-45872)%256;
EA=1;    //开总中断
ET0=1;    //开定时器0中断
TR0=1;

while(1)
{
display(shi,ge);
if(luck1==0||luck2==0||luck3==0||luck4==0)
{
luck();
}
}
}
void T0_time() interrupt 1   //中断函数 不需要声明
{
TH0=(65536-45872)/256;    //重新装值   50ms
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;   //把num1清零 再算一次
num++;
if(num==100)
 {
num=0;
 }
shi=num/10;   //把一个2位数分离后分别送数码管显示 十位和各位
ge=num%10;
}
}
void luck()
{
if(luck1==0)
{
delay(10);
if(luck1==0)
      {
    TR0=~TR0;   // 有改动
  }
}

if(luck2==0)
{
delay(10);
if(luck2==0)
      {
    TR0=TR0;   // 有改动
  }
}

if(luck3==0)
{
delay(10);
if(luck3==0)
      {
    num=0;
while(1);
while(!luck3);   //  有改动
  }
}

if(luck4==0)
{
delay(10);
if(luck4==0)
      {
   TH0=(65536-45872)/256;    //重新装值   50ms
        TL0=(65536-45872)%256;
    num++;
while(!luck4);   //  有改动
  }
}
}
                 可能有点问题 我自己写的 还请多多指教

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-05
给个提示:

1、先列个位显示表,把0-9这几个数字显示码依次列入一个数组。
2、定时器0中断设置和响应到网上搜搜,很多。
3、键盘响应加一个状态变量表示。在定时器中断中判断此变量以示秒表是否运行。
4、每次中断自动加1,分别用/号和%分别得到数显码的索引。送数到显示。追问

可不可以再具体点,具体的编程可以给吗,谢谢?

第2个回答  2019-04-15
1、先列个位显示表,把0-9这几个数字显示码依次列入一个数组。