本文将详细讲解基于51单片机的电子时钟源程序设计,这是一份非常实用的教程,适合初学者理解单片机控制电子设备的基本原理和编程方法。 51单片机是广泛应用的微控制器,其核心是8051 CPU,具有丰富的I/O端口和内置定时器等资源,适合实现简单的数字电路和控制系统,如电子时钟。在本程序中,51单片机被用来驱动共阳极数码管显示时间(小时、分钟和秒)。 程序中定义了两个代码段表,用于数码管的段驱动: 1. `seg[11]`是段码表,存储了数码管各个段的点亮状态,对应数码管的7个段a、b、c、d、e、f和g以及小数点dp。例如,`0x0c0`表示所有段熄灭,`0x0f9`表示显示数字9。 2. `wei[8]`是位码表,用于选择数码管的8个位,即8个LED。例如,`0x01`表示第一位点亮,`0x02`表示第二位点亮,以此类推。 接下来,有一个延时子程序`delay(int n)`,它通过循环计数来实现一定时间的延迟。这个子程序在数码管显示时很重要,因为它确保每个数字有足够的显示时间,使得人眼能清晰地识别出显示的数字。 变量初始化部分,定义了四个全局变量: 1. `unsigned char second=0`,表示秒,初始值为0。 2. `unsigned char minute=0`,表示分钟,初始值为0。 3. `unsigned char hour=12`,表示小时,遵循12小时制,初始值为12。 4. `unsigned char count=0`,计数器,用于计算定时器T0中断发生次数。 定时器T0中断服务子程序`t0(void) interrupt 1`,在定时器溢出时触发,负责更新时间和数码管显示。其中,`TH0=0X3C; TL0=0X0B0;`是设置定时器初值,使定时器工作在1ms的周期。`count++`增加计数器,每过20次中断(即20ms),`second`递增,以此类推,实现时间的累加。当小时达到24时,自动回零,实现24小时制。 `smgxs()`函数是共阳数码管显示子程序,它依次设置P1口的段码(由seg[]决定)和P2口的位码(由wei[]决定),并通过`delay(100)`保证每个数字有足够时间显示。这样,小时、分钟和秒就会依次在数码管上滚动显示。 最后的主程序`main(void)`设置了定时器T0的工作模式(8位自动重载模式,TMOD=0X01),并启动定时器,开启中断。然后进入一个无限循环,不断调用`smgxs()`更新数码管显示。 总结来说,这个51单片机电子时钟源程序展示了如何利用定时器、中断、数码管显示技术来构建一个简单的数字时钟系统,对于学习单片机控制逻辑和底层硬件交互的初学者而言,这是一个很好的实践案例。通过理解和实践这个程序,可以加深对单片机硬件、中断机制、定时器工作原理以及数码管显示的理解。
- leee73382018-01-26不错的资料,有一定的参考价值
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 汇编语言入门与编程实践-低层开发者的必备技能
- WatchIO二进制固件和刷机工具(无需源码编译).zip
- 提取网页核心信息:Python中的Readability与Date Extraction技术
- Swift语言教程:从基础语法到高级特性的全面讲解
- 表白代码(发射爱心).zip学习资料程序
- 常用工具合集(包括汉字转拼音工具、常用数据格式相互转换工具、尺寸相关的工具类).zip
- Delphi编程教程:从入门到精通Windows应用程序开发
- 视觉化编程入门指南:Visual Basic语言教程及其应用领域
- 纯代码实现的3d爱心.zip学习资料语言
- 儿童编程教育中Scratch语言的基础教学及实战示例