微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助独立按键P14控制停止和启动。P15秒加一怎么在数码管时钟添加。四位共阴极数码管显示分秒

求助独立按键P14控制停止和启动。P15秒加一怎么在数码管时钟添加。四位共阴极数码管显示分秒

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
#define uchar unsigned char
#define uint unsingned int
#define LED P0
sbit k1=P1^4;
sbit k2=P1^5;
void keytest();
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9共阴数码管数字码
uchar tbb[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点字码
uchar miao,t,shi,ge,fen,bai,qian;                 //定义秒,分 。   每位数码管划分为个 十 百 千。
//----------------子函数初始化--------------------
void init();
void timer0();
void display();
void delay(uchar);
//-----------------主函数-------------------
void main()
{
while(1)
{
  init();
  timer0();
  display();
   }
}
//-----------------定时器0初始化-------------------
void init()
{
miao=t=0;
TMOD=0x01;
TH0=(65536-15536)/256;
TL0=(65536-15536)%256;
EA=1;
ET0=1;
}
//-----------------计时函数-------------------
void timer0()
{
TR0=1;    //启动定时器0
if(TF0==1)    //查询定时器0的中断标志位TF0
{
   TF0=0;
    t++;
   if(t==20)           //20次循环为1s
   {
    t=0;
  miao++;                                //秒每次加一
  if(miao==60)                         //秒为60时清零后。分加一
  {miao=0;
  fen++;
  if(fen==60)                        //分为60时清零
  fen=0;
   }
   }
}
}
//-----------------扫描显示函数-------------------
void display()
{
shi=miao/10;                //十位
ge=miao%10;                                   //各位
bai=fen%10;                             //百位
qian=fen/10;                         //千位
P1=0x01;          //选中个位并显示
LED=tab[ge];
delay(5);
P1=0x02;          //选中十位并显示
LED=tab[shi];
delay(5);
P1=0X04;
LED=tbb[bai];    //选中百位并显示
delay(5);
P1=0X08;
LED=tab[qian];    //选中千位并显示
delay(5);
}
//-----------------快速延时函数-------------------
void delay(uchar x)
{
   int i,j;
   for(i=x;i>0;i--)
    for(j=2;j>0;j--);
}

可以用中断,也可以用循环。
P14有两个功能:启动、停止,应该是互斥的才对吧。做一个标志位。用来表示是哪一种。
P15秒加1,检测是否P15按下,或在中断中,让秒++。
当秒>60时,秒=1;

程序加了。没反应

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top