C语言实现单片机电子闹钟与定时器功能
本资源是一份基于单片机的电子闹钟C语言程序,实现了时钟显示与闹钟功能。该程序由作者亲手修改并测试,保证了其可用性。以下是关键知识点的详细介绍: 1. **头文件包含**: - `#include <reg51.h>`:这是针对特定微控制器(如8051系列)的头文件,包含了单片机寄存器定义和标准函数声明。 2. **数据类型定义**: - `uchar` 和 `uint` 定义了无符号字符型和无符号整型,用于存储数字和控制变量。 3. **定时延时函数**: - `void delay(uint ii)`:这是一个简单的延时函数,通过循环减1来实现计时,参数`ii`表示需要延迟的时间。 4. **数组定义**: - `uchar duan[]` 和 `uchar wei[]` 分别是显示时钟和数字的位图数组,用于在数码管上生成时钟数字的图案。 5. **全局变量**: - 时间变量:`uchar hour`, `min`, `sec` 用于当前时间的存储; - 闹钟变量:`uchar alarm_en` 表示闹钟是否启用,`alarm_flag` 表示闹钟是否已经触发; - P3口状态和输入变量:用于读取按键输入。 6. **函数声明**: - 初始化函数:`void initialize()`,用于设置初始状态和初始化硬件; - 显示函数:`void show()`, `void show1()`, `void show2()`, `void show3()`, `void show4()` 分别负责显示当前时间、小时趋势、分钟趋势、闹钟状态和数码管字符; - 按键扫描函数:`void keyscan()`,用于检测按键输入; - 添加/确认时间函数:`void add()` 和 `void confirm()`,用户可以设置或确认时间; - 闹钟判断函数:`void alarm_judge()`,检查是否到了设定的闹钟时间; - 蜂鸣器函数:`void beep()`,用于闹钟响起时发出声音。 7. **程序流程**: - 用户首先调用`initialize()`进行初始化,然后通过`keyscan()`获取按键输入,进行时间设置(如`add()`)和确认(如`confirm()`)。 - 时间显示由`show()`和相关趋势显示函数负责,闹钟状态通过`show4()`更新,并在`alarm_judge()`中判断是否需要触发闹铃,触发后调用`beep()`产生蜂鸣声。 8. **程序特点**: - 通过位图数组实现数字显示,简洁高效; - 结构清晰,便于理解和维护; - 具备闹钟功能,可用于日常提醒。 这份单片机电子闹钟C程序提供了一个基础的嵌入式系统时钟和闹钟解决方案,适合初学者学习单片机编程以及理解如何在实际应用中使用C语言进行硬件交互。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//****************软件延时程序*********************************
void delay(uint ii)
{ while(--ii); }
//****************定义数码管驱动码******************************
uchar duan[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,
0XBF,0XFF,0X7F}; //段选,0 1 2 3 4 5 6 7 8 9 - 灭 .
uchar wei[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//位选,共阳,从右至左
//****************定义变量**************************************
uchar t=0,sec=0,min=0,hour=0; //正常走时时间变量
uchar sec1=0,min1=0,hour1=0; //时间设定值变量
uchar sec2=0,min2=0,hour2=0; //闹钟设定值变量
uchar alarm_en=0; //闹钟开关变量
uchar alarm_flag=0; //闹钟定时到达标志变量
uchar p3=0,moshi=0,mov=0; //P3口查询,模式值,调整位
//显示缓冲区,依次为正常、调时、闹钟设定、调整位带点标记
uchar temp[8],temp1[8],temp2[8],temp3[8];
//****************函数声明*************************************
void initialize(void); //初始化
void show(void); //正常走时显示
void show1(void); //时间设定显示
void show2(void); //闹钟设定显示
void show3(void); //调整位标记
void show4(void); //闹钟开关标记
void keyscan(void); //键盘扫描
void add(void); //调时调闹钟加数程序
void confirm(void); //调时确认,闹钟开关
void beep(void); //闹钟响铃程序
//******************主函数***************************
void main()
{
initialize();
while(1)
{
keyscan();
alarm_judge();
switch(moshi)
{
case 0:show(); show4();break; //显示正常走时
case 1:show1();show3();break; //显示设置时间
case 2:show2();show3();break; //显示闹钟时间
}
if(alarm_flag==1 && alarm_en==1) //定时时间到达且闹钟打开
{ beep(); }
}
}
//*****************定时器初始化**************************
void initialize(void)
{
TMOD = 0x01;
TH0 = 0X3C;
TL0 = 0XB0; //50ms
ET0 = 1;
EA = 1;
TR0 = 1;
剩余10页未读,继续阅读
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全