626、基于51单片机的计时器(报警,数码管,时分秒,按键)

完整资料或定制滴滴我(有偿)见文末。

目录

一、设计功能

二、proteus仿真

三、原理图

四、程序源码

五、资料包括


一、设计功能

1、单片机型号:STC89C52/51、AT89C52/51、AT89S52/51等等都可通用。

2、设计一个计时系统,包括16个按键,8个数码管。

3、实现时、分、秒计时;

4、能够调节、校准时间;

5、能够设置报警时间。

二、proteus仿真

三、原理图

四、程序源码

五、资料包括

需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网盘下载地址及提取码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现51单片机计时器数码管显示时分秒,可以采用定时器中断的方式。具体实现步骤如下: 1. 配置定时器,使其以一定的频率产生中断,例如1秒钟产生一次中断。 2. 在中断函数中,将计数器值加1,并将计数器值转换为时分秒格式。 3. 将时分秒值通过数码管显示出来。 以下是一个简单的代码示例: ```c #include <reg51.h> #define uchar unsigned char #define uint unsigned int uchar code table[] = { // 数码管显示表 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f // 9 }; uchar cnt = 0; // 计数器 uchar sec = 0; // 秒 uchar min = 0; // 分 uchar hour = 0; // 时 void display() { // 数码管显示函数 uchar i; uchar display_buf[4]; // 数码管显示缓存 display_buf[0] = table[hour / 10]; display_buf[1] = table[hour % 10]; display_buf[2] = table[min / 10]; display_buf[3] = table[min % 10]; for(i = 0; i < 4; i++) { P0 = display_buf[i]; P2 = 0x01 << i; delay(1); P2 = 0x00; } } void timer0() interrupt 1 { // 定时器0中断函数 cnt++; if(cnt >= 20) { // 1秒钟产生20个中断 cnt = 0; sec++; if(sec >= 60) { sec = 0; min++; if(min >= 60) { min = 0; hour++; if(hour >= 24) { hour = 0; } } } display(); // 显示时分秒 } } void main() { TMOD = 0x01; // 定时器0工作在模式1 TH0 = 0x3c; // 定时器0初值,1ms中断一次 TL0 = 0xb0; ET0 = 1; // 打开定时器0中断 TR0 = 1; // 启动定时器0 while(1); } void delay(uint t) { // 延时函数 uint i, j; for(i = 0; i < t; i++) { for(j = 0; j < 125; j++); } } ``` 在上述代码中,我们使用定时器0产生1ms的中断,然后在中断函数中计算时分秒,并通过数码管显示出来。注意,这里的计时器是通过软件实现的,所以精度不高,但足以满足一般需求。如果需要更高的精度,可以使用硬件计时器或者使用更高频率的定时器中断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值