问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器,具有00-99分

发布网友 发布时间:2022-05-09 18:45

我来回答

1个回答

热心网友 时间:2023-10-13 08:02

#include"reg51.h"
#include "intrins.h" //_nop_();延时函数用
#define uchar unsigned char
#define uint unsigned int

#define SEG_OUT P2 //段码输出口
#define BIT_OUT P3 //扫描口
#define KEY_IO P0 //键盘接口
sbit dot=P2^7; //LED小数点控制
uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */
uchar data dis_buff[6]={1,2,0,0,0,0}; //待显示单元数据,共6个数据
uchar data keytemp,key; //键值存放
uchar data t10ms=0,ts=0,tmin=0,thour=12,t50ms=0;
uchar data flag=0x00;
bit flag_key=0;

/*************1毫秒延时程序**************/
delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
//
/***********LED显示动态扫描函数**********/
display()
{
char k;
char m=0xfe;
for(k=0;k<6;k++) //6位LED扫描控制
{ BIT_OUT=0xff;
SEG_OUT=tab[dis_buff[k]];
if(k==1|k==3) {dot=0;}
BIT_OUT=m;
if((flag!=0)&(t50ms>=10))
{
switch(flag)
{
case 1:BIT_OUT|=0x03;break;
case 2:BIT_OUT|=0x0c;break;
case 3:BIT_OUT|=0x30;break;
default:break;

}
}
delay1ms(3);
m=(m<<1)|0x01;

}
}
/***************按键扫描函数*************/
void keyscan()
{
uchar i,t=0xef; //1110 1111
KEY_IO=0x0f;
keytemp=(~KEY_IO)&0x0f;
if(keytemp!=0) //0000 0000 ;0000 1000; 0000 0100; 0000 0010; 0000 0001;
{
delay1ms(1);
for(i=0;i<4;i++)
{
KEY_IO=t;
keytemp=(~KEY_IO)&0x0f;
if(keytemp!=0&flag_key==0)
{
flag_key=1;
switch(keytemp)
{
case 0x08:key=0*4+i;break;
case 0x04:key=1*4+i;break;
case 0x02:key=2*4+i;break;
case 0x01:key=3*4+i;break;
default:break;
}
switch(key)
{
case 0:thour++;if(thour==24)thour=0;break;
case 1:tmin++;if(tmin==60)tmin=0;break;
case 2:ts++;if(ts==60)ts=0;break;

default:break;
}
}
t=(t<<1)|0x01;
}
}
else flag_key=0;

}
/**************初始化程序****************/
void initiation()
{
TMOD=0x11;
TH0=-10000/256;
TL0=-10000%256; //10MS定时初值(T0计时用)
TH1=-25000/256;
TL1=-25000%256; //25MS定时初值(T1计时用)
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
}

/****************定时器0中断服务程序*****/
void init_timer0(void) interrupt 1
{
TH0=-10000/256;
TL0=-10000%256; //10MS定时初值(T0计时用)
t10ms++;
if(t10ms==100)
{
t10ms=0;
ts++;

if(ts==60)
{
ts=0;
tmin++;
if(tmin==60)
{
tmin=0;
thour++;
if(thour==24)thour=0;

}
}
}
dis_buff[0]=thour/10;
dis_buff[1]=thour%10;
dis_buff[2]=tmin/10;
dis_buff[3]=tmin%10;
dis_buff[4]=ts/10;
dis_buff[5]=ts%10;
}
/****************主程序******************/
main()
{
initiation();
while(1)
{
display();
keyscan();

}
}
这是一个矩形按键控制6位数码管的一个时钟,里面都包含你所说的要求了,至于你说的哪个计数器可以通过TMOD寄存器来设置的。计数器跟定时器的区别是没有益出中断的功能。希望对你有帮助。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
索尼NEX-6单头套机(E 16-50mm)主要参数 索尼NEX-6单头套机(E 18-200mm LE)主要参数 索尼NEX-6单头套机(E 18-200mm LE)基本参数 索尼NEX-6单头套机(16-80mm)基本参数 追加诉前财产保全的条件是什么 电脑开机硬盘灯循环亮灭电脑开机后硬盘灯一下亮一下灭是怎么回事_百度... ...不能开机了?显示器亮橘色的灯,风扇能转,就是主机上的灯不亮... ...重起时电源灯是常亮, 风扇是转的,但硬盘灯不亮, 屏幕无显示_百度知 ... 硬盘灯常亮电脑无法正常运行电脑开机后硬盘指示灯常亮不闪是什么原因... 电脑硬盘不亮电脑硬盘指示灯不亮 宏基笔记本D257怎么恢复系统?启动系统文件丢失了 胸部下垂怎么调整? 锦浪科技未来走势如何? 女32岁低压62高压85正常吗 高压85 低压45 正常吗?我该怎么办 空腹血压高压85低压30正常吗 求高人。。我血压高压85.低压58 心跳57.。我19岁女 这样的血压正不正常啊 人体正常血压是多少,我的血压是低压50,高压85算不算低血压? 血压 高压85 低压50 高压85低压51算是正常血压吗 低压60,高压85正常吗 血压高压85,低压50正常吗? 晨起运动后高压85低吗? 高压高压85低压65是属于正常吗 血压高压85 低压68正常么 用文言文说两则搞笑的笑话? 测血压高压85正常吗 文言文的相声 摘录一篇课外古文故事,翻译成现代汉语,并写出其中蕴含的道理? 许将传文言文翻译 萧小说萧炎有遇到一只沉睡的虫子吗? 玄幻小说女主叫萧筱男主叫什么忘了反正也姓萧小说共600多章,2个女主一个是青梅竹马的 女主姜晚男主祁萧小说叫什么名字? 梦见蟒蛇缠我到头上并吐出它吃的食物和骨头到我咀里让我吞下好不好? 傲娇属性:小白遇上萧小说txt全集免费下载 白灵山的介绍 碧玉萧小说秦弦是那本 攀枝花百灵山森林公园位置在哪 《风醉红尘(女尊)》东宫萧小说txt全集免费下载 盐边有什么好玩的地方?哪些景点必去? 《金宵大厦》潘朵拉给阿萧的小说里究竟写的什么? 鄯善县百灵山矿山在哪里? 《命运魔方》黑羽萧小说txt全集免费下载 重生季幼卿萧然小说叫什么名字 我昨晚梦见蛇了缠着我的头,就想发卡似的,但再一看,是蛇皮缠着我的头发... 《贪恋你的味道》纹紫萧小说txt全集免费下载 梦见蛇从房顶下来,缠在我头上,缠了一半跑了,是什么意思 《周粥凡事》落木唯萧小说txt全集免费下载 攀枝花市区烧开的水的沸点能达到100度吗? 穿越之满目萧然小说txt全集免费下载