参考基于C51单片机为主控芯片的电子表_第1页
参考基于C51单片机为主控芯片的电子表_第2页
参考基于C51单片机为主控芯片的电子表_第3页
参考基于C51单片机为主控芯片的电子表_第4页
参考基于C51单片机为主控芯片的电子表_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成绩电子科学与技术系科研训练中文题目: 基于c51单片机为主控芯片的电子时钟 英文题目: based on c51 single chip microcomputer as main control chip of electronic watch姓 名: 王* 学 号: * 专业名称: 电子科学与技术 指导教师: 郑国旭 基于c51单片机为主控芯片的电子表作者 哈尔滨理工大学电子科学与技术系内容摘要本文论述了用c51单片机制作电子表的方法和过程,电路图以及程序源代码。包括时间基准的选取和实现;1602液晶显示屏的驱动和编程;独立键盘的使用和编程;单片机内部时间中断的原理及编程。关键词 c51

2、单片机; 时间基准; 1602液晶显示屏; 编程based on c51 single chip microcomputer as main control chip of electronic watchabstract this paper discusses the using c51 production method and process of digital watches, circuit diagram and the program source code. including the selection of time benchmark and implementati

3、on; 1602 lcd driver and programming; the use of independent keyboard and programming; the principle and programming of single chip microcomputer internal time interrupt.keywords c51 production; time benchmark; 1602 lcd; programming目 录1 引言12 相关文献综述13 元件简述及应用13.1 stc89c51rc单片机简介及其应用23.1.1 stc89c51rc单片

4、机简介23.1.2 stc89c51rc单片机应用23.2 1602液晶屏简介及其应用33.2.1 1602液晶屏简介33.2.2 1602液晶屏应用44硬件电路构建54.1中控部分以及时间基准部分64.2按键交互部分74.3液晶显示部分85 软件程序编程95.1计算类函数代码95.1.1闰年计算函数95.1.2日期清零函数95.1.3星期计算函数105.2独立按键函数115.2.1 s1数位选择按键115.2.2 s2数值加一按键125.2.3 s3数值减一按键145.3计时器函数155.3.1计时器初始化函数155.3.2计时器中断函数165.4全部源代码186结论291 引言单片机是一种

5、集成电路芯片,是采用超大规模集成电路技术,把具有数据处理能力的中央处理器cpu、随机存储器ram、多种i/o口和中断系统、定时器/计数器等功能集成到一块硅片上,构成的一块小而完整的计算机系统。本设计为采用89c51rc芯片作为主控芯片的电子表,电子表可以显示时间、日期和星期,可以手动调整时间和日期,星期将通过内部计算自动给定,拥有计算闰年功能,并且可以通过年份和月份自动计算当月最后一天日期。2 相关文献综述随着科技的不断发展,单片机的种类也变得多种多样,五花八门,以满足不同情况的需要。应用单片机的产品已经融入到各行各业,以单片机为主控芯片的电子时钟也应运而生。在单片机应用以前,电子时钟主要使用

6、震荡电路以及数字电路构成,然而振荡电路的频率不稳定,极易受到干扰,而且大量的数字器件具有较高的延迟,这些都会影响电子时钟的精度,并且利用数字元件搭建极其麻烦,无形中增大了电子时钟的体积。然而单片机是一种以c语言为基础语言的可编程mcu,配合较少的元件就可以做出功能强大的产品,提高精度的同时也极大的缩小了体积,而且复杂功能的计时器也成为了可能。3 元件简述及应用本时钟采用stc89c51rc作主控芯片芯片。单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、电流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、

7、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。采用1602液晶屏作为显示元件。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义cgram,显示效果也不好)。1602lcd是指显示的内容为16x2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。3.1 stc89c51rc单

8、片机简介及其应用本设计采取stc89c51rc为主控芯片,以提供时间基准和时间日期计算。3.1.1 stc89c51rc单片机简介stc89c52rc是采用8051核的isp(in system programming)在系统可编程芯片,最高工作时钟频率为80mhz,片内含8k bytes的可反复擦写1000次的flash只读程序存储器,器件兼容标准mcs-51指令系统及80c51引脚结构,芯片内集成了通用8位中央处理器和isp flash存储单元,具有在系统可编程(isp)特性,配合pc端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。stc89c52rc

9、系列单片机是单时钟/机器周期(1t)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成max810 专用复位电路。3.1.2 stc89c51rc单片机应用1) 内置4组8位i/o口,其中p0口为双向i/o口,p1,p2,p3为准双向i/o口。2) 内置2个16位定时器/计数器。3) 内置外部中断2 路,下降沿中断或低电平触发中断,power down 模式可由外部中断低电平触发中断方式唤醒。4) 内置通用异步串行口。5) 工作电压为5v。6) 工作温度为070。图3.1.2.1 stc89c51rc引脚图引脚说明:i/o口:p0、p1

10、、p2、p3四组i/o口,p0口为三态双向i/o口,没有内置的上拉电阻,需要外接上拉电阻;p1、p2、p3为准双向i/o口;所有i/o口均可独立编程使用。vcc、gnd:单片机电源引脚,常电压为+5v;xtal1、xtal2:外接时钟引脚,xtal1为输入端,xtal2为输出端。rst:单片机的复位引脚,连续两个机器周期以上的高电平为有效。rxd、txd:串行输入输出口。int0、int1:外部中断0,外部中断1。t0、t1:定时器计数器0外部输入端、定时器计数器0外部输入端。psen:程序储存器允许输出控制端。ale/prog:外部储存器锁存端。ea/vpp:外部储存器控制端。3.2 160

11、2液晶屏简介及其应用本设计采取1602液晶屏最为显示元件。3.2.1 1602液晶屏简介液晶显示器的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。各种型号的液晶通常是按照显示字符的行数或液晶点阵的行列数来命名的。1602液晶屏每行显示16个字符,一共可以显示两行。3.2.2 1602液晶屏应用000102030405060708090a0b0c0d0e0f404142434445464748494a4b4c4d4e4f1602液晶屏内部ram映射表数据指针设置指令码:80h+地址码。初始化设置指令码:00111000(设置16*2显示,5*7点阵,8位数据接口)。00001

12、dcbd=1开显示,d=0关显示c=1显示光标,c=0不显示光标b=1光标闪烁,b=0光标不闪烁000001nsn=1写一个字符后地址加一n=0写一个字符后地址减一s=1写字符整屏显示左移或右移s=0写字符整屏不移动00010000光标左移00010100光标右移00011000整屏左移,光标跟随移动00011100整平右移,光标跟随移动显示开关及光标设置指令表引脚说明:图3.2.2.1 1602液晶屏引脚图1、vss:电源地2、vdd:电源正极3、vo:液晶显示对比度调节端4、rs:数据命令选择端5、rw:读写选择端6、en:使能信号端714、d0d7:数据口15、bla:背光电源正极16、

13、blk:背光电源负极4硬件电路构建电子时钟分4个模块构成,分别为:中控部分,时间基准,按键交互,液晶显示。(其中时间基准部分已集成在中控模块中。)图3.3.0.1 电子时钟结构图4.1中控部分以及时间基准部分中控部分以及时间基准采用如下电路图设计:图3.3.1.1 中控部分及时间基准原理图此中控电路叫做c51单片机的最小系统,作用是为单片机提供适合的外部工作条件。u1为stm89c51rc,即为电子表的主控芯片。左上角接在rst引脚的电路为复位按键电路,由一个按键、一个0.1f电容和一个10电阻组成。电容作用是消除按键抖动。按下按键即可为单片机提供连续两个机器周期的高电平,以供单片机复位。左下

14、角接在xtal两个引脚的是晶振电路,由一个晶振、两个起振电容构成。以晶振的固定频率震荡以输出固定频率的脉冲信号,为单片机提供机器周期,同时提供时间基准。左上角为p0 i/o口的上拉电阻。使其能稳定输出高低电平。4.2按键交互部分按键交互部分采用如下电路图:图3.3.2.1 按键交互原理图按键交互部分由四个独立按键构成,四个独立按键一端接地,另一端口链接单片机上的四个i/o口,当单片机检测到其中的i/o口为低电平时,将会触发按键功能。按键功能简述:s1:选择时间日期将要调节的数位s2:当前数位数值加一s3:当前数位数值减一s4:无功能,备用按键4.3液晶显示部分液晶显示部分采用如下电路图:图3.

15、3.3.1 液晶显示部分原理图液晶显示部分为1602液晶屏提供基本的工作环境,并且负责液晶屏与单片机的数据交互,d0d7八个数据端链接单片机上的一组i/o口,e、rs连接单片机p3.4、p3.5口。供单片机操作液晶显示屏 5 软件程序编程stc89c51rc芯片是基于c语言可编程芯片,只有硬件电路还无法正常工作因此还需要编程,并且将程序烧录至单片机中,才能使其正常工作。由于代码过于繁杂,将选取重要代码加以论述,本章最后将给出全部源代码。5.1计算类函数代码本电子时钟可以按照年份和月份计算当月共有多少天,并且星期将由电子时钟自动给定,无需手动调节。计算函数主要包括:闰年计算函数、日期清零函数(用

16、来计算日期最后一天,超出后日期置一,重新叠加。)、星期计算函数。5.1.1闰年计算函数源代码如下/*/* */* */* 闰年计算函数 */* */* 是闰年返回值为1 */*/int isleapyear(int year) year=year+2000;return (year%4=0&&year%100)|year%400=0;当年份可以被4整除并且不可以被100整除或者可以被400整除的年份是闰年。是闰年则函数返回值为1,反之则返回0.当其他函数引用该函数时,则可以方便的判断该年是否是闰年。5.1.2日期清零函数源代码如下/*/* */* */* 日期清零计算函数 */

17、* */* 日期需要清零时返回值为1 */*/int delete_riqi(int ri)if(ri>28&&yue=2&&!isleapyear(nian)return 1;if(ri>29&&yue=2)return 1;if(ri>30&&(yue=4|yue=6|yue=9|yue=11)return 1;if(ri>31)return 1;return 0;通过多个if语句进行判断,判断当前日期是否已经超过当月的最后一天,如果是,则返回1,否则返回0.当其他函数引用该函数时,可以判断日期是否需要

18、重新计数5.1.3星期计算函数源代码如下/*/* */* */* 星期计算函数 */* */* 星期日返回值为0 */*/int week(int nian,int yue,int ri) int iweek,y,c,m,d; c=nian/100;y=nian%100;m=yue;d=ri; iweek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; /蔡勒公式 iweek = iweek >= 0 ? ( iweek % 7 ) : ( iweek % 7 + 7 ); /iweek为负时取模return iwee

19、k; 函数采用泰勒公布,将年月日输入函数,函数会通过年月日计算出但天是星期几,方便进行星期显示。5.2独立按键函数按键交互是由独立按键构成的,此函数是独立按键的驱动函数。共有三个独立按键,分别为:s1,数位选择按键;s2,数值加一按键;s3,数值减一按键。5.2.1 s1数位选择按键源代码如下if(s1=0)delay(5);if(s1=0)/调整选择s1num+;while(!s1);if(s1num=1)/调整秒钟tr0=0;write_com(0x80+0x40+10);write_com(0x0f);/光标闪烁if(s1num=2) /调整分钟write_com(0x80+0x40+7

20、);if(s1num=3) /调整小时write_com(0x80+0x40+4);if(s1num=4) /调整日期write_com(0x80+9); if(s1num=5) /调整月份write_com(0x80+6);if(s1num=6) /调整年份write_com(0x80+3);if(s1num=7)/还原s1num=0;write_com(0x0c);tr0=1;采用消抖延时来消除按键抖动,slnum用来记录数位,每按下按键一次,slnum自加一,方便数值调整获取数位,当按下7次按键时,恢复正常显示。5.2.2 s2数值加一按键源代码如下if(s2=0)/加数delay(5)

21、;if(s2=0)while(!s2);if(s1num=1)/调整秒钟miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)/调整分钟fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)/调整小时shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(s1num=4)/调整日期ri+;if(delete_riqi(ri)ri=1;

22、write_nyr(9,ri);write_xq(week(nian,yue,ri);write_com(0x80+9);if(s1num=5)/调整月份yue+;if(yue=13)yue=1;write_nyr(6,yue);write_xq(week(nian,yue,ri);write_com(0x80+6);if(s1num=6)/调整年份nian+;if(nian=100)nian=0;write_nyr(3,nian);write_xq(week(nian,yue,ri);write_com(0x80+3);获取slnum数值来获取数位,对当前数位的数值进行加一处理,并对液晶屏进

23、行显示处理。引用日期清零函数和星期计算函数,日期计满将自动置一,自动获取星期。方使用者操作。5.2.3 s3数值减一按键源代码如下if(s3=0)/减数delay(5);if(s3=0)while(!s3);if(s1num=1)/调整秒钟miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)/调整分钟fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)/调整小时shi-;if(shi=-1)shi

24、=23;write_sfm(4,shi);write_com(0x80+0x40+4);if(s1num=4)/调整日期ri-;if(ri=0)ri=28;write_nyr(9,ri);write_xq(week(nian,yue,ri);write_com(0x80+9);if(s1num=5)/调整月份yue-;if(yue=0)yue=12;write_nyr(6,yue);write_xq(week(nian,yue,ri);write_com(0x80+6);if(s1num=6)/调整年份nian-;if(nian=-1)nian=99;write_nyr(3,nian);wri

25、te_xq(week(nian,yue,ri);write_com(0x80+3);同加一按键功能相似,将加数变成减数操作,并对液晶屏进行显示处理。5.3计时器函数计时器函数为电子时钟的核心函数,用来计时以及对液晶屏进行操作。5.3.1计时器初始化函数初始化函数源代码如下/*/* */* */* 初始化函数 */* */* */*/void init()uchar num;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);nian=15;yue=5;ri=28;shi=

26、0;fen=0;miao=0;for(num=0;num<15;num+)write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num<12;num+)write_date(table1num);delay(5);tmod=0x01;th0=(65536-50000)/256;tl0=(65536-50000)%256;ea=1;et0=1;tr0=1;初始化函数打开计时器开关,设置计时器工作模式,并且给定计时器初值。为计时器工作做前期准备。当计时器数值计满时,将进入计时器中断函数。5.3.2计时器中断函数计时器中

27、断函数源代码如下/*/* */* */* 计时中断函数 */* */* */*/void timer0() interrupt 1th0=(65536-50000)/256;tl0=(65536-50000)%256;count+;if(count=18)count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;ri+;if(delete_riqi(ri)ri=1;yue+;if(yue=13)yue=1;nian+;if(nian=100)nian=0;write_nyr(3,nian);write_n

28、yr(6,yue);write_nyr(9,ri);write_xq(week(nian,yue,ri);write_sfm(4,shi);write_sfm(7,fen);write_sfm(10,miao);进入计时器中断后需要重新为计时器填装初值,已进行下次计时,每1/18秒将进入计时器中断一次,因此当进入计时器中断18次,则秒钟加一,当秒钟为60时,秒钟清零分钟加一,以此类推。5.4全部源代码/*/* 科研训练 */* 基于c51单片机的电子时钟 */* 电科13-2 */* 王海旭 */* 1307010217 */*/#include<reg52.h>#define u

29、char unsigned char #define uint unsigned intsbit rs=p35;sbit lcden=p34;sbit s1=p30;sbit s2=p31;sbit s3=p32;uchar count,s1num;char miao,shi,fen,nian,yue,ri;uchar table_w3="sun","mon","tue","wed","thu","fri","sat"/星期数组uchar code table=" 2015-05-28 thu"/初始显示uchar code table1=" 00:00:00"/*/* */* */* 延时函数 */* */* */*/void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*/*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论