news 2026/5/1 21:49:07

基于单片机倒数计数器(LCD,独立按键)系统Proteus仿真(含全部资料)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机倒数计数器(LCD,独立按键)系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:↓↓↓

通过网盘分享的文件:资料分享
链接:百度网盘 请输入提取码提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

利用AT89S52单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数,当倒计数为O时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。
定时闹钟的基本功能如下。
字符型LCD (16x2)显示器。显示格式为"TIME分分:秒秒”。
用4个按键操作来设置当前想要倒计数的时间。一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下。
K1一可调整倒计数的时间1—60分钟。
K2一设置倒计数的时间为5分钟,显示"05: 00”。
K3一设置倒计数的时间为10分钟,显示"10: 00”。
K4-设置倒计数的时间为20分钟,显示"20: 00”。
复位后LCD的画面应能显示倒计时的分钟和秒数,此时按下K1键可以在LCD上显示出设置画面。此时,若
A.按操作键K2-一增加倒计数的时间1分钟。
B.按操作键K3—一减少倒计数的时间1分钟。
C.按操作键K4一—设置完成。


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

元件型号数量
单片机AT89C511
电容10uf1
电容30pf2
晶振12MHZ1
电阻10k1
按钮8
显示器LCD16021
电阻1k1
三极管PNP1
蜂鸣器无源1
LED红色1
电阻100欧1
排阻10k1

五、Keil c语言程序源代码(部分)

//音符半周期us 1908 1706 1520 1436 1276 1136 1012 956 854 760 718 638 568 506 478 426 380 358 320 284 254 #include <reg51.h> #include <intrins.h> #include "lcd1602.h" #define uchar unsigned char #define uint unsigned int sbit S1=P1^0;//按钮定义 sbit S2=P1^1; sbit S3=P1^2; sbit S4=P1^3; sbit K1=P3^4; sbit K2=P3^5; sbit K3=P3^6; sbit K4=P3^7; sbit beep=P2^7;//蜂鸣器 sbit led=P2^6; uchar ge_num=1;//歌曲编号 //音符半周期us 1908 1706 1520 1436 1276 1136 1012 956 854 760 718 638 568 506 478 426 380 358 320 284 254 //半周期 uint code music[22]={0x0fff,1908,1706,1520,1436,1276,1136,1012,956,854,760,718,638,568,506,478, 426, 380, 358, 320, 284, 254}; //节拍编码,一个16拍半周期数 uint code pai16[22]={1,80, 88, 99, 105, 117, 132,148, 157,175,196,208,234,264,295,313, 351, 394, 418, 471, 528, 589}; //简谱,半周期us+节拍时间(16分拍倍数) uchar code gequ1[]={ 10,2,0,1,10,2,9,6,7,2,0,1,7,2,8,2,0,1,8,4,0,12,10,2,0,1,10,2,9,2,8,2,9,2,12,2,0,1,12,2,10,2,0,1,10,8, 0,8,13,2,0,1,13,2,12,4,10,2,9,2,10,4,9,4,8,8,10,4,9,2,8,2,9,6,7,2,0,1,7,2,6,2,0,1,6,8,0,8,10,2,0,1, 10,2,9,6,7,2,0,1,7,2,8,2,0,1,8,4,0,12,10,2,0,1,10,2,9,2,8,2,9,2,12,2,0,1,12,2,10,2,0,1,10,8,0,4, 0,4,13,2,0,1,13,2,12,4,10,2,9,2,10,4,9,4,8,8,10,4,9,2,8,2,9,6,8,2,0,1,8,10,0,4,0,12, 10,2,12,2,13,4,15,4,14,6,12,2,10,4,0,4,8,2,0,1,8,6,13,2,0,1,13,2,12,2,10,2,9,2, 10,8,0,12,10,2,12,2,13,4,15,4,14,6,10,2,15,4,0,2,10,2,9,6,13,2,0,1,13,2,12,2,10,2,9,2, 8,2,0,1,8,2,0,1,8,8,0,4,10,4,6,1,9,1,10,1,12,1,10,4,6,1,9,1,10,1,13,1,10,4,5,1,7,1,8,1,12,1,10,4,0,1,10,2,12,2,13,4,10,4,9,4,5,4, 8,8,0,1,8,8,0,4,10,2,0,1,10,2,9,6,7,2,8,8,0,12,10,2,0,1,10,2,9,2,8,2,12,2, 12,2,10,2,0,1,10,8,0,8,13,2,0,1,13,2,12,4,10,2,9,2,10,4,9,4,8,8,10,4,9,2,8,2,9,6,7,2, 7,2,6,2,0,1,6,8,0,8,10,2,0,1,10,2,9,6,7,2,0,1,7,2,8,2,0,1,8,4,0,12,10,2,0,1,10,2,9,2,8,2,9,2,12,2, 12,2,10,2,0,1,10,8,0,8,13,2,0,1,13,2,12,4,10,2,9,2,10,4,9,4,8,8,10,4,9,2,8,2,9,6,8,4, 8,8,0,12,0,8,10,2,12,2,13,4,15,4,14,6,12,2,10,4,0,4,8,2, 8,6,13,2,0,1,13,2,12,2,10,2,9,2,10,8,0,8,10,2,12,2,13,4,15,4,14,6,10,2,15,4,0,4,10,2, 9,6,13,2,0,1,13,2,12,2,10,2,9,2,8,12,0,8,10,2,12,2,13,4,15,4,14,6,12,2,10,4,0,4,8,2, 8,6,13,2,0,1,13,2,12,2,10,2,9,2,0,1,9,2,10,2,0,1,10,8,0,8,10,2,12,2,13,6,15,2,14,4,10,4,15,4,0,4,10,2, 9,6,13,2,0,1,13,2,12,2,10,2,9,2,8,2,0,1,8,2,0,1,8,8,0,8,10,2,12,2,13,4,15,4,14,6,10,2,16,2,15,2,0,2,10,2, 9,6,13,2,0,1,13,2,12,2,10,4,9,1,8,1,0,1,8,2,0,1,8,8,0,8,10,4,9,6,7,2,0,1,7,2,8,2,0,1,8,4,0,8, 10,4,9,6,12,2,0,1,12,2,10,2,0,1,10,8,0,8,13,4,12,4,10,2,9,2,10,6,9,2,8,8, 10,4,9,2,8,2,9,8,8,4,6,8,0xff }; uchar code gequ2[]={ //一剪梅 14,3, 12,3, 13,8,13,2, 15,1, 14,1, 13,1, 12,1, 10,1,12,1,10,12,6,1,8,1, 9,8,0,1,9,2,10,1,9,1,8,1,9,1,7,1, 6,12,0,1,6,2,0,1, 6,2, 10,4, 9,1, 8,1, 7,1, 8,2, 7,2, 6,1, 5,1, 6,12,0,1, 6,2, 8,4,0,1, 6,1, 8,1, 9,4, 10,1, 11,1, 10,1, 9,1, 10,12,0,1, 10,1, 12,1, 13,6, 12,1, 10,1, 9,6, 8,1,9,1, 10,6, 9,1, 10,1, 6,8, 7,2, 7,1, 6,1, 5,2, 7,4, 5,1, 3,1, 10,2, 8,1, 7,1, 6,12,0,1,6,2, 6,10,0,1, 6,2, 13,4, 12,2, 10,1, 12,1, 10,1, 12,1, 13,4, 12,2, 9,4, 10,1, 12,1, 10,8, 7,1,6,5,7,1,6,5,12,1,13,1, 10,1, 9,1, 10,6,0,1,10,8, 6,2, 13,4, 12,2, 10,1, 12,1, 10,1, 12,1, 13,4, 12,2, 9,4, 10,1, 12,1, 10,8, 8,1,6,7,10,1,9,1,10,4,12,1,13,1, 10,1, 9,1, 10,6,0,1,10,8, 6,2, 13,4, 12,2, 10,1, 12,1, 10,1, 12,1, 13,4, 12,2, 9,4, 10,1, 12,1, 10,8, 7,1,6,7,7,1,6,7, 0xff }; uchar code gequ3[]={ //花心 10,2, 12,2, 0,1, 12,12, 0,1, 12,2, 13,2, 12,2, 10,8, 9,2, 10,2, 0,1, 9,12, 6,4, 8,10, 0,1, 5,4, 0,1, 5,4, 6,4, 0,2, 8,2, 9,2, 10,4, 8,4, 9,2, 0,1, 9,1, 10,1, 9,2, 8,2, 7,4, 8,4, 0,1, 8,10, 0,2, 12,2, 0,1, 12,4, 13,4, 0,1, 15,2, 0,1, 15,2, 0,1, 15,4, 12,4, 13,2, 0,1, 13,1, 15,1, 13,2, 12,2, 10,4, 12,4, 0,1, 12,10,0,1, 5,2, 0,1, 5,2, 6,2, 8,2, 0,1, 8,2, 9,2, 10,4, 8,4, 9,2, 10,2, 15,4, 13,2, 12,2, 0,1, 12,8, 10,4,12,4,0,1,10,2,0,1,10,2,0,1,10,2,9,2,10,2, 9,2,8,2,0,1,9,2,0,1,9,2,0,1,9,2,10,2,9,4,8,2,7,2, 7,2,0,1,7,2,0,1,7,2,0,1,7,2,0,1,7,2,8,2,9,2,8,2,0,1,8,10,0,1,12,2,13,2,15,2,0,1, 15,2,16,2,15,4,13,2,12,2,0,1,12,6,13,2,12,2,10,4,12,4,0,1,10,2,0,1,10,2,0,1,10,2,0,1,10,4,9,2, 8,2,0,1,9,2,0,1,9,2,0,1,9,2,10,2,9,4,8,2,7,2,0,1,7,2,0,1,7,2, 0xff }; uchar gequ=0;//指定播放歌曲 uint times=0;//节拍数 uint num=0;//计数 uchar a=0xfc,b=0x18;//定时器初值 uint first=1;//公共变量 uint time=0; //计时 uchar shunxu=0;//显示控制 //============================= uchar miao=0,fen=1,sec=0;//倒计时 uchar mode=0;//模式 uchar start=0; uchar disp[]="00:00"; void delay(uint i)//延时 { uchar k; while(i--) for(k=0;k<110;k++); } //主函数 void main() { init_1602();//初始化 write_string(2,0,"shi jian zhuyu"); TMOD=0X11;//定时器0,工作方式1。 TH0=0XFC; //定时1ms TL0=0X18; TH1=0X3C; //定时50ms TL1=0XB0; ET0=1;//打开定时器0中断允许 ET1=1; TR1=1; EA=1;//打开总中断 while(1) { if(!TR0) { if(!S1)//乐曲1 { beep=1;delay(1000);gequ=0;num=0;ge_num=1; write_string(2,0,"shi jian zhuyu"); while(!K1); } if(!S2)//乐曲2 { beep=1;delay(1000);gequ=1;num=0;ge_num=2; write_string(2,0,"Yi Jian Mei "); while(!K2); } if(!S3)//乐曲3 { beep=1;delay(1000);gequ=2;num=0;ge_num=3; write_string(2,0,"Hua Xin "); while(!K3); } } if(!S4)//停止 { TR0=0;beep=1; num=0; } if(!K1)//设置 { mode=1; //TR1=1; } if(!K2)//加 { if(mode==0) { fen=5; miao=0; start=1; } else { if(fen<60) fen++; } while(!K2); } if(!K3)//减 { if(mode==0) { fen=10; miao=0; start=1; } else { if(fen>1) fen--; } while(!K3); } if(!K4)//设置完成 { if(mode==0) { fen=20; miao=0; } else { mode=0; start=1; } while(!K4); } //led闪烁 if(start) { if(sec<10) led=0; else led=1; } else led=1; } } //定时器0中断 void Timer0() interrupt 1 { TH0=a; //给定时器赋初值 TL0=b; switch(gequ) { case 0: if(gequ1[num]!=0) beep=!beep; if(times<first)//节拍数未到,计数+1 times++; //计时 else { times=0; //节拍清零 num+=2; //下一个音符 if(gequ1[num]==0xff) //结束 { num=0; TR0=0;//关闭定时器 beep=1; } a=(65536-music[gequ1[num]])/256; //设置初值 b=(65536-music[gequ1[num]])%256; first=gequ1[num+1]*pai16[gequ1[num]]; } break; case 1: if(gequ2[num]!=0) beep=!beep; if(times<first)//节拍数未到,计数+1 times++; //计时 else { times=0; //节拍清零 num+=2; //下一个音符 if(gequ2[num]==0xff) //结束 { num=0; TR0=0;//关闭定时器 beep=1; } a=(65536-music[gequ2[num]])/256; //设置初值 b=(65536-music[gequ2[num]])%256; first=gequ2[num+1]*pai16[gequ2[num]]; } break; case 2: if(gequ3[num]!=0) beep=!beep; if(times<first)//节拍数未到,计数+1 times++; //计时 else { times=0; //节拍清零 num+=2; //下一个音符 if(gequ3[num]==0xff) //结束 { num=0; TR0=0;//关闭定时器 beep=1; } a=(65536-music[gequ3[num]])/256; //设置初值 b=(65536-music[gequ3[num]])%256; first=gequ3[num+1]*pai16[gequ3[num]]; } } } //定时器1中断 void Timer1() interrupt 3 { if(sec<20)//1s sec++; else { sec=0; if(start) { if(miao>0)//倒计时 miao--; else { if(fen>0) { miao=59; fen--; } else { TR0=1;//启动音乐 start=0;//停止计时 } } } } //显示 disp[3]=miao/10+0x30; disp[4]=miao%10+0x30; if(mode) write_string(1,3,"SET "); else write_string(1,3,"TIME"); write_string(1,7,disp); TH1=0X3C; //定时50ms TL1=0XB0; }

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:20:05

ARM 架构中的 PRIMASK、FAULTMAST、BASEPRI 寄存器

ARM 架构中的 PRIMASK、FAULTMAST、BASEPRI 寄存器 这三个是 ARM Cortex-M 系列处理器 中的关键系统异常屏蔽寄存器&#xff0c;用于控制中断和异常的行为。下面分别解释&#xff1a;1. PRIMASK&#xff08;优先级屏蔽寄存器&#xff09; 作用&#xff1a;临时屏蔽所有可配置优…

作者头像 李华
网站建设 2026/5/1 6:18:48

Wan2.2-T2V-A14B为何成为专业视频创作平台的核心引擎?

Wan2.2-T2V-A14B&#xff1a;如何重塑专业视频创作的底层逻辑&#xff1f; 在影视广告制作领域&#xff0c;一个曾经司空见惯的场景是&#xff1a;导演反复修改分镜脚本、美术团队加班绘制概念图、拍摄周期因天气或演员档期一再推迟。整个流程动辄耗时数周&#xff0c;成本高达…

作者头像 李华
网站建设 2026/5/1 6:19:22

如何在5分钟内完成量子任务提交?Azure CLI与VSCode协同操作全曝光

第一章&#xff1a;量子计算任务提交的现状与挑战当前&#xff0c;量子计算正处于从理论验证向实际应用过渡的关键阶段。随着IBM、Google、Rigetti等公司开放量子云平台&#xff0c;研究人员可通过网络提交量子电路任务至真实量子设备或模拟器执行。然而&#xff0c;任务提交过…

作者头像 李华
网站建设 2026/5/1 6:19:59

python中pandas库的使用(超详细)

1、serier系数&#xff0c;可以看作是竖起来的listprint(s_1.index)当加入index后,index等于多少&#xff0c;那么它对应的那一行数据的行名就是多少pandas库和numpy库的不同就是&#xff0c;numpy只能处理数值类型的数据&#xff0c;而pandas可以处理字符串等print(s_3.values…

作者头像 李华
网站建设 2026/5/1 1:01:39

为什么你的生存分析结果不显著?——R语言建模常见错误与修正方案

第一章&#xff1a;为什么你的生存分析结果不显著&#xff1f;在进行生存分析时&#xff0c;研究者常遇到统计结果不显著的问题&#xff0c;这可能并非数据本身无价值&#xff0c;而是方法或数据处理环节存在隐患。理解潜在原因并采取相应对策&#xff0c;是提升分析质量的关键…

作者头像 李华