一、设计目的

  1. 掌握定时/计数器工作的基本原理;
  2. 掌握一个完整的C语言程序结构;熟悉定时/计数器的编程

二、设计环境

  1. Keil开发环境
  2. Proteus软件。

三、设计及调试
(1) 设计内容

  1. 通过定时计数器实现秒与分的定时;
  2. 将定时的秒与分在LCD上显示。

(2) 设计硬件电路

AT89C51单片机,LCD1602

(3) 设计过程及调试关键步骤
首先在Proteus仿真软件上进行硬件电路的连接,连接完后用一个简单的显示程序检测能否显示,显示无误后开始编程。编程需要在原来LCD1602程序上添加初始化、中断,写入时钟三个子函数,首先在Keil中设置晶振频率为12MHz,之后根据晶振频率进行初值的运算与转载,运用T1定时器进行方式1中断。调试时观察显示位置并进行调整

四、设计结果与分析
(1) 程序

#include <reg51.h>
#include <intrins.h>  //包含_nop_( )空函数指令的头文件
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0;  //位变量
sbit RW=P2^1;  //位变量
sbit E=P2^2;   //位变量
void lcduchar digit;//全局变量判断中断次数
uchar second;        //秒
uchar minute;        //分
void clock_initial();//时钟初始化
void clock_write(uchar s,uchar m);//写入时钟
void lcd_initial(void); //LCD初始化函数
void check_busy(void);  //检查忙标志函数
void write_command(uchar com);  //写命令函数
void write_data(uchar dat);//写数据函数
void delay(uint);//延时函数
uchar displaydata1[]=" LYZ CLOCK TIME "; //LCD显示第一行的内容
uchar displaydata2[]=" 00:00          ";//LCD显示第二行的内容
void main(void) //主函数
{
lcd_initial( ); //调用对LCD初始化函数
clock_initial(); //时钟初始化
TMOD=0x10;  //设置定时器T1以方式1定时
EA=1;       //开总中断
ET1=1;      //允许T1中断
TH1=(65536-50000)/256;  //12MHz下装载高八位初值
TL1=(65536-50000)%256;  //12MHz下装载低八位初值
TR1=1;      //启动定时器
digit=0;    //开始计数
second=0;//初值
minute=0;
while(1){
clock_write(second,minute);}}
void T1_interserve(void) interrupt 3//T1中断服务
{
digit++;
if(digit==20){
digit=0;
second++;}
if(second==60){
second=0;
minute++;}
if(minute==60){
minute=0;}
TH1=(65536-50000)/256;  //12MHz下装载高八位初值
TL1=(65536-50000)%256;  //12MHz下装载低八位初值
}
void clock_initial()//时钟初始化
{
uchar i;
write_command(0x80);
for(i=0;i<16;i++){
write_data(displaydata1[i]);}
write_command(0xc0);
for(i=0;i<16;i++){
write_data(displaydata2[i]);}   }
void clock_write(uchar s,uchar m) //写入时钟
{
write_command(0xc1);
write_data(m/10+0x30);
write_data(m%10+0x30);
write_command(0xc4);
write_data(s/10+0x30);
write_data(s%10+0x30);}
void delay(uint j)//1ms延时子程序
{
uchar i=250;
for(;j>0;j--)
{
while(--i);
i=249;
while(--i);
i=250; }}
void check_busy(void) {  //检查忙标志函数
uchar dt;
do
{
dt=0xff;
E=0;
RS=0;
RW=1;
E=1;
dt=P3; }
while(dt&0x80);
E=0;}
void write_command(uchar com) {     //写命令函数
check_busy();
E=0;
RS=0;
RW=0;
P3=com;    E=1;
_nop_( );
E=0;
delay(1);}
void write_data(uchar dat) //写数据函数
{
check_busy();
E=0;
RS=1;
RW=0;
P3=dat;
E=1;
_nop_();
E=0;
delay(1);   }
void LCD_initial(void)   //液晶显示器初始化函数
{
write_command(0x38);    //写入命令0x38:8位两行
显示,5×7点阵字符
write_command(0x0c);    //写入命令0x0C:开整体
显示,光标关,无黑块
write_command(0x06);    //写入命令0x06:光标右移
write_command(0x01);    //写入命令0x01:清屏
delay(1);}

(2) 实现结果及现象
最初,LCD1602第一行显示LYZ CLOCK TIME,第二行显示00:00表示0分0秒

时钟开始计数

计数到分时

(3) 实验结果的分析与总结,有无改进方案?
实验结果的分析与总结:第一行第二行都显示清晰,时钟计时与实际中相差不大,由于使用的是方式1的计时,会有些许误差。改进方案:可使用方式2的方式进行计时,减小误差。

基于51单片机的定时/计数器设计相关推荐

  1. 单片机数字定时闹钟设计c语言,电子设计 基于51单片机的定时闹钟设计.doc

    电子设计 基于51单片机的定时闹钟设计 课件之家精心整理资料--欢迎你的欣赏 课件之家精心整理资料--欢迎你的欣赏 摘 要 单片计体积小.能耗低.成本低.功能强,广泛应用于智能产品和工业自动化上.本次 ...

  2. 单片机多功能电子琴课设_基于51单片机的多功能电子琴设计.doc

    基于51单片机的多功能电子琴设计 基于51单片机的多功能电子琴的设计 摘要 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器.它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编 ...

  3. c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc

    -- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...

  4. 基于51单片机的公交车安全智能检测系统、基于51单片机的金属探测仪控制设计、基于单片机的智能电子密码锁系统设计、基于51单片机酒精浓度检测仪设计【资料转发分享】

    630基于51单片机的公交车安全智能检测系统-设计资料 本资料是基于单片机的公交车安全监测系统 具有如下功能: 1.监测环境的温度,超标报警.可以设置上下限 2.监测是否有火灾以及有毒气体,超标报警, ...

  5. 基于单片机的智能电子密码锁系统设计-基于51单片机酒精浓度检测仪设计-基于单片机的水缸加热温控控制系统设计-基于单片机蓝牙技术的温室监测系统设计-基于单片机智能PWM调光灯系统设计【毕设方案】

    600基于单片机的智能电子密码锁系统设计-电路程序资料 本设计采用的是AT89C51单片机作为控制核心,控制外围电路工作的装置.在本次基于单片机的电子密码锁设计中,将采用AT89C51单片机作为控制核 ...

  6. 【毕业设计】基于51单片机的智能窗帘设计(原理图+原理图+仿真+论文)

    按键1:加(手动开启窗帘 按键2:减(手动关闭窗帘) 按键3:进入定时模式开启时间和光控阈值数值大小的开启 按键4:进入当前时间的设置(年.月.日.时.分的设置) 按键5:切换模式(在手动模式.定时模 ...

  7. 基于51单片机的指纹密码锁设计

    目录 具体实现功能 设计介绍 单片机介绍 设计思路 资料内容 原理图 程序 仿真实现 全部资料 具体实现功能 具体功能: 本设计采用STC89C52.AT89C52.AT89S52作为主控芯片,LCD ...

  8. 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc

    基于51单片机的实时时钟设计报告 PAGE PAGE 24 课程设计(论文)任务书 信息工程 学 院 信息工程 专 业 (2) 班 一.课程设计(论文)题目 嵌入式课程设计 二.课程设计(论文)工作自 ...

  9. matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc

    基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...

最新文章

  1. excel公式中更正错误 #N/A
  2. 使用C++对TINY+语言进行词法分析、语法分析、语义分析和中间代码生成
  3. 河源市计算机组装竞赛,计算机组装大赛决赛圆满结束
  4. 小白学习MVC5+EF6遇到的问题一
  5. 手rm-linux联网后自动dhcp,Linux操作系统下DHCP基础配置
  6. Effective C# 原则3:选择is或者as操作符而不是做强制类型转换(翻译)
  7. galleryview-3.0b3使用小记
  8. 算法笔记(23)网格搜索及Python代码实现
  9. Podfile.lock
  10. Oracle导入导出二进制文件,你不知道的事
  11. python中文乱码问题大总结
  12. ASP.net的简单认识
  13. 本地调试微信接口花生壳等域名被限制拉黑
  14. flyme android 7 root,魅族PRO7怎么Root?魅族PRO7一键ROOT权限获取图文教程(系统自带Root功能)...
  15. js判断指定日期是礼拜几
  16. 我的微信公众号开通了
  17. JQueryDOM和遍历
  18. 开发工具---Eclipse 教程Ⅰ
  19. java谐音梗_你听过最好玩的英语谐音梗是?
  20. “嗨聊SPACE”项目测试:利用Selenium+Firefox自动化测试对用户注册、登录、上下线提示功能以及页面之间的跳转进行测试(python脚本编写)

热门文章

  1. vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)
  2. Mythtype中丢失mplugin.dll怎么办
  3. 邀请注册html模板,邀请注册页.html
  4. 如何创建MySQL数据库
  5. Python小白到老司机,快跟我上车!基础篇(二十)
  6. java 求1000以内完数
  7. kafka命令之消费者组
  8. 广州市花都区2021-2022学年七年级第一学期期末考试英语试题
  9. tensorboard显示无数据解决方法No scalar data was found 以及终端命令tensorboard --logdir logs无反应
  10. 位置式与增量式PID