永发信息网

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

答案:2  悬赏:40  手机版
解决时间 2021-03-03 14:39
具体的就是
按下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分
最佳答案
呵呵,这位朋友,你的程序是从书上学的。
但你没有学会分时复用。
所以,你的程序想加按键,那就是一件很复杂的事情。
这不能怪你。
你应该学会去做这个程序。而不是别人帮你做。
首先,把显示程序改成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(); //-在这里加上你的按键程序。这样子就可以实现按键扫描了。

至于你要求的显示闪烁。其实很简单就可以实现。你在时间程序里面做个标志管理。按键做个模式。在调整模式时,把对应的显示位,每隔一段时间不显示就可以实现闪烁了。
你到单片机学习网上找点资料看看。自已学会了,才是真的。
全部回答
搜: 做而论道 595输出驱动数码管闪烁 百度一下。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电脑无线网怎么连接
黎明杀机夹子屠夫是哪个电影的人物
oppo r9 plus和小米5那个好
农历什么时间适合装修
为什么男生都喜欢处女
WOW一条线的自动攻击计时是什么插件
随着中国、印度等亚洲发展中国家的迅速崛起,
已知ab=-1a+b=2则b/a+a/b=?
大家知道这个是什么来的吗
公安县荆州中国移动(荆江大道营业厅)在哪里啊
处男第一次怎么消除紧张感
张小泉的剪刀正品是什么钢
三层房子只有二楼墙身砖发出咔嚓的声音房子是
黑龙江省旺达保险代理有限责任公司林甸分公司
下列现象属于光的折射的是(  ) A.通
推荐资讯
传昆超市地址在什么地方,想过去办事
深情向来易枉付是什么意思
材料一一个美国记者眼中的延安:在贫瘠的中国
请问下,谁知道菲律宾intech这个公司,中文名
誉信综合商店地址在哪,我要去那里办事
两部苹果手机 使用iMessage 第一个在短信界面
大学通知书里有手机卡两张,选了移动的,联通
吕祖灵签第9签:鲲化为鹏一任飞,长安路上好
怎么盘拷盘??????
民事纠纷欠钱不还
南北梁这个地址在什么地方,我要处理点事
由肇庆出发的广东省内的海边旅游,最好是两天
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?