永发信息网

单片机电子钟添加一个键盘调整程序

答案:2  悬赏:40  手机版
解决时间 2021-03-03 14:39
  • 提问者网友:黑米和小志
  • 2021-03-02 22:05
具体的就是
按下key0小时闪烁,按下key1调整
再按下key0分钟闪烁,按下key1调整
再按下key0开始计时

这是我的时钟程序

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DU=P2^6;
sbit WE=P2^7;
uint hour=23, min=59, sec=55,i; //初始化数据
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66, //不带点的0~9
0x6D,0x7D,0x07,0x7F,0x6F,0x00};
uchar code table_1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed, //带点的0~9
0xfd,0x87,0xff,0xef,0x00};
void display(uint hour,uint min,uint sec); //显示函数声明

void delayms()
{
unsigned c;
for(c=0;c<200;c++)
P0=0xff;
}

void InitTimer0(void)
{
TMOD = 0x09;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
//=========================================
//主程序
//=========================================
void main()
{
InitTimer0();
while(1)
{
display(hour,min,sec);
}
}
//==================================
//定时器中断服务程序
//==================================
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0D8;
TL0 = 0x0F0;
i++;
if(i>=100)
{
i=0;
sec++; //秒加1
if(sec>=60)
{
sec=0;
min++; //分钟加1
if(min>=60)
{
min=0;
hour++; //小时加1
if(hour>=24)
hour=0;
}
}
}
//add your code here!
}
//=========================
// 数码管显示函数
//=========================
void display(uint hour,uint min,uint sec)
{
DU=1;
P0=table[hour/10];
DU=0;
P0=0xff;
WE=1;
P0=0xfe;//11111110
WE=0;
delayms();

DU=1;
P0=table_1[hour%10];
DU=0;
P0=0xff;
WE=1;
P0=0xfd;//11111101
WE=0;
delayms();
DU=1;
P0=table[min/10];
DU=0;
P0=0xff;
WE=1;
P0=0xfb;
WE=0;
delayms();

DU=1;
P0=table_1[min%10];
DU=0;
P0=0xff;
WE=1;
P0=0xf7;
WE=0;
delayms();

DU=1;
P0=table[sec/10];
DU=0;
P0=0xff;
WE=1;
P0=0xef;
WE=0;
delayms();
DU=1;
P0=table[sec%10];
DU=0;
P0=0xff;
WE=1;
P0=0xdf;
WE=0;
delayms();
}
解决问题了再加50分
最佳答案
  • 五星知识达人网友:傲气稳了全场
  • 2021-03-02 23:07
呵呵,这位朋友,你的程序是从书上学的。
但你没有学会分时复用。
所以,你的程序想加按键,那就是一件很复杂的事情。
这不能怪你。
你应该学会去做这个程序。而不是别人帮你做。
首先,把显示程序改成SWITCH程序。
每次换一个内容显示。
DU=1;
P0=table[hour/10];
DU=0;
P0=0xff;
WE=1;
P0=0xfe;//11111110
WE=0;
delayms();

改成:
switch(disorder)
{
case 0: //-显示小时高位
DU=1;
P0=table[hour/10];
DU=0;
P0=0xff;
WE=1;
P0=0xfe;//11111110
WE=0;
disorder++;
break;
case 1: //-显示小时低位
break;
case 2: //-显示分钟高位
break;
--------
}
delayms(); //-把延时程序放到最后。
keyscan(); //-在这里加上你的按键程序。这样子就可以实现按键扫描了。

至于你要求的显示闪烁。其实很简单就可以实现。你在时间程序里面做个标志管理。按键做个模式。在调整模式时,把对应的显示位,每隔一段时间不显示就可以实现闪烁了。
你到单片机学习网上找点资料看看。自已学会了,才是真的。
全部回答
  • 1楼网友:老鼠爱大米
  • 2021-03-03 00:32
搜: 做而论道 595输出驱动数码管闪烁 百度一下。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯