单片机时钟PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机型号的选择
通过对多种单片机性能的分析,最终认为 89C51是最理想的电子时钟开发芯片。89C51 是一种带4K字节闪烁可编程可擦除只读存储 器的低电压,高性能CMOS8位微处理器,器 件采用ATMEL高密度非易失存储器制造技术 制造,与工业标准的MCS-51指令集和输出管 脚相兼容。由于将多功能8位CPU和闪烁存储 器组合在单个芯片中,ATMEL的89C51是一 种高效微控制器,而且它与MCS-51兼容,且 具有4K字节可编程闪烁存储器和1000写/擦
/*--定时计数器T0及中断初始化函数--*/
void init(void)
{ TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256;//16位计数初值除以256得到高8位初值 TL0=(65536-50000)%256;//16位计数初值除以256的余数得到低8位
程序模块及介绍 5.仿真调试 6.小结
设计任务与要求
1. 设计一个电子时钟,并且能够实现日期, 星期和时分秒的现实和调节。 2. 设计出硬件电路。 3. 设计出软件编程方法,并写出源代码。 4. 用PROTEUS进行仿真。 5.利用查表,中断等清楚,有序。 6.系统的各功能模块要编语言编实现程序设 计。
初值
EA=1;//开总中断 ET0=1;//开启定时器0中断 EX0=1;//开启外部中断,外部中断用于调整 时间
PT0=1;//将定时器0中断设置高优先级,调整时间期不停止计时 TR0=1;//启动定时器0
}
/*----------1ms 延时函数---------*/
void delay(uint
uchar code week_string[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};//定义 星期英文缩写表
uchar data month_day[12]={31,0,31,30,31,30,31,31,30,31,30,31};//定义 每月天数表
机电工程系
智能电子产品设计与制作
设计题目 电子钟的设计与制作 专业班级: 电气自动化技术 姓 名: 郭浩坤 王树晨 李金同 李宝果 指导教师: 宋希涛 设计时间: 2014/12/22~2014/12/25 设计地点:8J 205
电子钟的设计与制作 目录
1.设计任务及要求 2.设计方案 3.数码管显示工作原理 4.程序设计
case 6:
LCD1602_write_c om(0x80+0x01+8
case 12:
LCD1602_write_ com(0x80+0x01
bit flag; uchar setup_bit=0;//setup_bit用于计数移位ቤተ መጻሕፍቲ ባይዱ数 EX0=0;//关闭中断函数 do//循环 {
if(shift_key==0) //判断移位键是 否按下
switch(setup_bit)//判断调整哪位,从而确定光标显示位置 { case 1: LCD1602_write_com(0x80+0x44+4);//光标设置到分个位显示位置 break; case 2: LCD1602_write_com(0x80+0x44+3);//光标设置到分十位显示位置 break; case 3: LCD1602_write_com(0x80+0x44+1);//光标设置到时个位显示位置 break; case 4: LCD1602_write_com(0x80+0x44+0);//光标设置到时十位显示位置 break; case 5: LCD1602_write_com(0x80+0x01+9);//光标设置到日个位显示位置 break;
设计方案
本设计主要设计了一个基于AT89C51单片机 的电子时钟。并在液晶屏上显示相应的时 间,日期和星期。并通过一个控制键用来 实现时间的调节。应用Proteus的ISIS软件实 现了单片机电子时钟系统的设计与仿真。 该方法仿真效果真实、准确,节省了硬件 资源。
该设计的硬件部分主要包括89C51多功能接 口芯片用于开发电子时钟芯片、液晶显示 器用于显示时间。
void leapyear() //判断某年是否 闰年函数
{
if (0) month_day[1]=29;//闰年2月
29天
else month_day[1]=28;//平年2月
/*定时计数器中 断程序,每当定 时计数器溢出时 触发中断,执行 该程序*/
hour=0; leapyear();//闰、平年计算 if(day==month_day[month-1])//判
断日期是否到了每月最后一天
{ day=1;
if(month==12) {
month=1; year++;
else minute++; }
else second++; } else temp++; week=CaculateWeek(year,month,day);//根据年月日计算星 期 }
void int0() interrupt 0//外部中断函数,当按下setup键时产生 外部中断进入调整状态 {
程序模块及介绍
#include<reg52.h> #define uchar unsigned char //宏定义 #define uint unsigned int //宏定义 sbit rs=P3^5; //液晶数据/指令选择端:1数据,0-指令 sbit lcden=P3^4; //液晶使能控制端:1-有 效,0-无效 sbit shift_key=P3^2;//位置移动键 sbit up_key=P3^3;//增加键
*-------LCD1602写数据函数-----*/ void LCD1602_write_dat(uchar dat) {
rs=1;//rs=1,置数据输入状态 P0=dat; //输出待显示字符的字符码(ASCII 码) delay(1);//延时1ms lcden=1;//lcden=1,使能端有效 delay(1);//延时1ms lcden=0;//lcden=0,使能端无效