51单片机十秒简易计时器 5
按下一次按键,数码管一秒加一,加到九后从零开始继续加。只有LED_2亮起;再次按下按键时,数码管停止走时。只有LED_1亮起。附加任务1:停止计时的情况下,数码管间隔一秒...
按下一次按键,数码管一秒加一,加到九后从零开始继续加。只有LED_2亮起;
再次按下按键时,数码管停止走时。只有LED_1亮起。
附加任务1:停止计时的情况下,数码管间隔一秒闪烁。
附加任务2:开始计时的情况下,计时到10不直接归零并停止,而是由十递减到零在停止。
系统硬件部分主要由单片机最小系统(1套)、数码管(1个)、按键(1个)、LED(2个)组成 展开
再次按下按键时,数码管停止走时。只有LED_1亮起。
附加任务1:停止计时的情况下,数码管间隔一秒闪烁。
附加任务2:开始计时的情况下,计时到10不直接归零并停止,而是由十递减到零在停止。
系统硬件部分主要由单片机最小系统(1套)、数码管(1个)、按键(1个)、LED(2个)组成 展开
展开全部
因为楼主说,(不要太大面积修改)。
所以,就没有敢进行大面积的修改。
只简单的改改,未必能好用,仅供参考:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit key1=P2^7;
sbit key2=P2^6;
sbit weiH=P3^0;
sbit weiM=P3^1;
sbit weiL=P3^2;
uint num=0,ge=0,shi=0,fen=0,k;
//num用来计数,ge为各位显示,shi为十位显示,fen为分钟显示
void delayms(uint xms) //i=xms即延时约xms毫秒
{
uint i,j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}
uchar key1scan()
{
if(key1==0) {
delayms(10);
if(key1==0) {
while(!key1) showtime();//等待释放期间,也进行显示
return 1;
}
}
return 0;//添上了返回值
}
uchar key2scan()
{
if(key2==0) {
delayms(10);
if(key2==0) {
while(!key2) showtime();
return 1;
}
}
return 0;//添上了返回值
}
void showtime() //时间显示
{
//这里去掉了while(1) ,避免了死循环
P1=0xff; weiL=1; P1=table[ge]; delayms(5); weiL=0;//显示秒的个位
P1=0xff; weiM=1; P1=table[shi]; delayms(5); weiM=0;//显示秒的十位
P1=0xff; weiH=1; P1=table[fen]; delayms(5); weiH=0;//显示分钟,
}
所以,就没有敢进行大面积的修改。
只简单的改改,未必能好用,仅供参考:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit key1=P2^7;
sbit key2=P2^6;
sbit weiH=P3^0;
sbit weiM=P3^1;
sbit weiL=P3^2;
uint num=0,ge=0,shi=0,fen=0,k;
//num用来计数,ge为各位显示,shi为十位显示,fen为分钟显示
void delayms(uint xms) //i=xms即延时约xms毫秒
{
uint i,j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}
uchar key1scan()
{
if(key1==0) {
delayms(10);
if(key1==0) {
while(!key1) showtime();//等待释放期间,也进行显示
return 1;
}
}
return 0;//添上了返回值
}
uchar key2scan()
{
if(key2==0) {
delayms(10);
if(key2==0) {
while(!key2) showtime();
return 1;
}
}
return 0;//添上了返回值
}
void showtime() //时间显示
{
//这里去掉了while(1) ,避免了死循环
P1=0xff; weiL=1; P1=table[ge]; delayms(5); weiL=0;//显示秒的个位
P1=0xff; weiM=1; P1=table[shi]; delayms(5); weiM=0;//显示秒的十位
P1=0xff; weiH=1; P1=table[fen]; delayms(5); weiH=0;//显示分钟,
}
北京赛康精益信息技术有限责任公司
2023-08-27 广告
2023-08-27 广告
作为北京赛康精益信息技术有限责任公司的工作人员,我无法具体推荐某一家发令电子计时系统品牌,因为选择合适的发令电子计时系统需要根据具体的应用场景和技术需求进行评估。市场上有很多品牌的发令电子计时系统,性能和质量也各不相同。您可以参考相关的产品...
点击进入详情页
本回答由北京赛康精益信息技术有限责任公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询