




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机C51课程设计1. 综 述本课题要求设计一个常用的万年历。该电路是用于反应年、月、日、时、分、秒、星期的实时状态,液晶显示屏上显示第一排显示“湖南工学院”第二排显示“年、月、日”第三排显示“时、分、秒”第四排显示“星期”。当接通时液晶屏上一次显示,并且可以通过矩阵键盘调节年、月、日、时、分、秒、星期的实时状态。假设液晶显示屏显示的是2008年8月1日,要求是:通过矩阵键盘的调节可以实时时间。经过以上所述的设计内容及要求的分析,可以将电路分为以下几部分:首先,通过晶振电路产生频率为32.768KHz的脉冲信号,该脉冲信号用于提供给DS1302的时钟脉冲信号。接通电源时,液晶屏上显示“湖南工学院”“电气与信息工程系”“电信0901”“蒋赞荣”。当按下第一个按键时进入“欢迎进入万年历”界面。按下第二个按键时进入显示经典万年历界面。理论部分已用protues软件进行仿真,并且达到设计要求。实际部分在电子实验室和同组的成员在老师的指导下一进行模拟,能够达到理论设计要求。在设计的过程中应该本着元件通用化,成品化,程序的精简化,以满足大规模生产的要求,以便在日后产品的更新维护能够更好的方便的进行。同时也要尽量减少设计过程中掉电现象和不稳定现象。使产品在使用过程中能够稳定的运行,达到良好的无故障率。二者必须达到一定的标准,才能在工厂进行量产。2. 方案设计与分析方案通过DS1302时钟芯片产生时钟数据信息,通过读写该芯片内的时钟信号通过单片机的控制将其显示在液晶屏幕上。该芯片的三总线SCLK、I/O、CE分别接在单片机的P32、P33、P34三端效果是最好的,因为P30、P31位接在液晶屏的RS、RW,P35接在液晶屏的E端,其它的三态数据线接在P0口,矩阵键盘可以通过跳线接P1口或P2口,在使程序设计起来比较简单,可以很好的利用者一点,设计的复杂程度适中,而且达到了预期的设计目的。在此电路中由于P0口用于液晶电路的三态八根数据线了,而P3口也用作了特殊作用,所以矩阵键盘的跳线只能是在P1口或者是P2口作为键盘的输入信号。其中在程序设计是注意液晶屏的时序状态,DS1302时钟电路的时序状态。只有时序的程序设计相符合就可使得DS1302正常工作,在发送地址信号,数据信号,控制信号时要注意时间的间隔,以保证地址信号,数据信号和控制信号能够准确的接受和发送。光标的闪烁是通过对液晶的写操作来完成的,在12864液晶中只需write(0x0F )指令就可以使光标闪烁,write(0x0C )可以使光标停止闪烁。在对待忙处理BF时,我们可以利用时间的延时来度过单片机在处理数据时的忙状态,这样既可以度过忙状态又可以简化程序设计的复杂程度。3程序设计框图及功能描述 表3.1系统框图电路组成及工作原理:经过以上所述的设计内容及要求的分析,可以将电路分为以下几部分:首先,通过DS1302产生时钟数据,该脉冲信号用于提供给单片机进行处理。单片机通过三个串行总线将DS1302的内部数据读出来,分别是SCLK(串行时钟)、I/O(数据输入输出)、CE(片选信号端)。数据的字节传送方式Read_Singlebyte:MOV Command,#85h; 命令字节为85hMOV ByteCnt,#1 ;单字节传送模式MOV R1,#RcvDat;数据地址覆给R1ACALL Receive_Byte;调用读出数据子程序RET;返回调用本子程序处控制电路主要是将DS1302中的时钟信息读出来,以产生实时的时间工作状态。最终使液晶屏上显示是实时时间,实现所需功能。4电路原理设计:4.1系统框图设计 万年历硬件原理框图 图4 系统框图4.2液晶电路:4.2.1 模块接口说明管脚号名称LEVEL功能1VSS0V电源地2VDD+5V电源正3VO-对比度调节4CSH/L模块片选端,高电平有效5SIDH/L串行数据输入6CLKH/L串行同步时钟,上升沿时读取SID数据15PSBLL:串口方式17/RESETH/L复位端,低电平有效19AVDD背光电源+5v20KVSS背光电源负端0v注:其余7脚到14脚位DB0到DB7为三态数据线。4.2.2 控制器接口信号说明RS,R/W为低电平是MPU写指令到指令暂存器;RS为低电平,R/W为高电平时读出忙标志BF及地址计数器AC的状态,RS为高电平,R/W为低电平MPU写入数据导数据暂存器DR;RS,R/W同时为高电平时从数据暂存器DR中读出数据。E的状态由高向低电平跳变时配合/W进行写数据或指令;E的状态为高电平时配合R进行读数据或指令;当E为低电平或者由低电平变为高电平时,不进行内部的数据操作。4.2.3 字符显示说明12864液晶屏可以显示四行八列共三十二个16*16的点阵汉字,其地址分配表如下:第一排80H、81H、82H、83H、84H、85H、86H、87H;第二排90H、91H、92H、93H、94H、95H、96H、97H;第三排88H、89H、8AH、8BH、8CH、8DH、8EH、8FH;第四排98H、99H、9AH、9BH、9CH、9DH、9EH、9FH;图4.1.2液晶显示电路4.3 矩阵键盘电路:矩阵式键盘电路为16*16的矩阵式键盘/* 函数原型:keychuli();* 功 能:处理与键盘相连的P1口的内容,作为键值。*/uchar keychuli() uchar k=0,i,j; for(i=0;i4;i+) P1=aai;delay(5);P1=P1&0xff; for(j=0;j4;j+ ) if(P1=bbij)k=i*10+j+1;j=4;i=4; return(k); /返回键值 图4.2.2矩阵键盘电路4.4 DS1302时钟电路:4.4.1综合性能指标1. 实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力2. 31 8 位暂存数据存储RAM3. 串行 I/O 口方式使得管脚数量最少4. 宽范围工作电压2.0 5.5V5. 工作电流 2.0V 时,小于300nA6. 读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式7. 8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配8. 简单 3 线接口9. 与 TTL 兼容Vcc=5V10. 可选工业级温度范围-40 +8511. 与 DS1202 兼容12. 在 DS1202 基础上增加的特性对Vcc1 有可选的涓流充电能力双电源管用于主电源和备份电源供应备份电源管脚可由电池或大容量电容输入附加的7 字节暂存存储器4.4.2 管脚描述X1 X2 32.768KHz 晶振管脚GND 地RST 复位脚I/O 数据输入/输出引脚SCLK 串行时钟Vcc1,Vcc2 电源供电管脚 4.4.3 DS1302 内部寄存器CH: 时钟停止位寄存器2 的第7 位12/24 小时标志CH=0 振荡器工作允许bit7=1,12 小时模式CH=1 振荡器停止bit7=0,24 小时模式WP: 写保护位寄存器2 的第5 位:AM/PM 定义WP=0 寄存器数据能够写入 AP=1 下午模式WP=1 寄存器数据不能写入 AP=0 上午模式WP: 写保护位寄存器2 的第5 位:AM/PM 定义WP=0 寄存器数据能够写入 AP=1 下午模式WP=1 寄存器数据不能写入 AP=0 上午模式TCS: 涓流充电选择 DS: 二极管选择位TCS=1010 使能涓流充电 DS=01 选择一个二极管TCS=其它 禁止涓流充电 DS=10 选择两个二极管DS=00 或11, 即使TCS=1010, 充电功能也被禁止RS位电阻典型位00没有没有01R12K10R24K11R38K4.4.4 写保护寄存器操作当写保护寄存器的最高位为0 时允许数据写入寄存器写保护寄存器可以通过命令字节8E 8F 来。规定禁止写入/读出写保护位不能在多字节传送模式下写入Write_Enable:MOV Command,#8Eh;命令字节为8EMOV ByteCnt,#1;单字节传送模式MOV R0,#XmtDat;数据地址覆给R0MOV XmtDat,#00h;数据内容为0 (写入允许)ACALL Send_Byte;调用写入数据子程序RET;返回调用本子程序处当写保护寄存器的最高位为1,时禁止数据写入寄存器。Write_Disable:MOV Command,#8Eh;命令字节为8EMOV ByteCnt,#1;单字节传送模式MOV R0,#XmtDat;数据地址覆给R0MOV XmtDat,#80h;数据内容为80h (禁止写入)ACALL Send_Byte;调用写入数据子程序RET;返回调用本子程序处DS1302电路,如图 4.4 所示。 图4.4 DS1302时钟电路5.电路原理图总体电路如图5-1所示,将电路接通后,分别根据要求输入符合要求的脉冲,观察到了汽车尾灯的控制现象。电路原理图如下:图5.1电路总原理图6.源程序代码/*标题:万年历综合设计*日期:2011-8-8*作者:蒋赞荣*版本:4.0*/#include#include#define uchar unsigned char#define uint unsigned intsbit rs = P30;sbit rw = P31;sbit en = P35;sbit L1=P37;sbit SCK=P32; sbit SDA=P33; sbit RST=P34; / DS1302复位char miao,fen,shi;uchar command,data0,data1,count,a=1000,b=200,c=200, i,j, num,s1num,v,shuzi1,t=1,k=0;uchar aa=0xef,0xdf,0xbf,0x7f ; uchar bb4=0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77,;uchar keychuli();uchar key();void lcd_clear(void);void lcd_set();void display(uchar y, uchar x, uchar *p); void dalay(uint m);void write(uchar command);void write_date(uchar data0);void delay(uint cnt) while(-cnt);sbit LE=P36;/bit ReadRTC_Flag;uchar code table= 湖南工学院,table1= 年 月 日,table2= 时 分 秒 ,table3= 星期;uchar code yejingtable=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x03,0x2d;/0-9 uchar l_tmpdate7=0x00, 0x00, 0x00, 0x00,0x00,0x00,0x10;/秒分时日月周年08-05-15 12:00:00uchar l_tmpdate1=0, 12, 12, 10,10, 0,11; uchar l_tmpdisplay16, command,num,jxh,sum=0; code uchar write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分时日月周年 最低位读写位 code uchar read_rtc_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; void Write_Ds1302_byte(uchar temp); void Write_Ds1302( uchar address,uchar dat ); uchar Read_Ds1302 ( uchar address ); void Read_RTC(void);/read RTC void Set_RTC(void); /set RTC void addsub(uchar i,uchar j ); void write_sfm(uchar add ,uchar kk, uchar date); uchar p=1;f=1; / void addsub( ); void xingqi();/void addsub(uchar i,uchar j ) if(v!=0 )if(v=2) l_tmpdate1i+; if(l_tmpdate1i=j)l_tmpdate1i=0; Set_RTC( ) ; if(v=3)&(l_tmpdate1i!=0) l_tmpdate1i-; Set_RTC( ) ; void write_sfm(uchar add ,uchar kk, uchar date)uchar shi,ge;shi=date/10;ge=date%10;write(kk+add);write_date(0x30+shi);write_date(0x30+ge);/*/ void InitTIMER0(void) TMOD|=0x01;/定时器设置 16位 TH0=0xef;/初始化值 TL0=0xf0; ET0=1; TR0=1; EA=1; void tim(void) interrupt 1 using 1/中断, uchar i; TH0=0xf5; TL0=0xe0; i+; if(i=10) i=0; ReadRTC_Flag=1; /*/ void Write_Ds1302_Byte(uchar temp) unsigned char i; for (i=0;i=1; /右移一位 SCK=1; _nop_(); /*/ void Write_Ds1302( uchar address,uchar dat ) RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); /启动 Write_Ds1302_Byte(address); /发送地址 Write_Ds1302_Byte(dat); /发送数据 RST=0; /恢复 /*/ uchar Read_Ds1302 ( uchar address ) uchar i,temp=0x00; RST=0; _nop_(); SCK=0; _nop_(); RST=1; _nop_(); Write_Ds1302_Byte(address); for (i=0;i=1; /右移一位 if(SDA) temp|=0x80; /每次传输低字节 SCK=1; _nop_(); _nop_(); RST=0; _nop_(); /以下为DS1302复位的稳定时间 RST=0; SCK=0; _nop_(); SCK=1; _nop_(); SDA=0; _nop_(); SDA=1; _nop_(); return (temp); /返回 /*/ void Read_RTC(void) /读取 日历 uchar i,*p; p=read_rtc_address; /地址传递 for(i=0;i7;i+) /分7次读取 秒分时日月周年 l_tmpdatei=Read_Ds1302(*p); p+; /*/ void Set_RTC(void) /设定 日历 uchar i,*p,tmp; for(i=0;i7;i+) tmp=l_tmpdate1i/10; l_tmpdatei=l_tmpdate1i%10; l_tmpdatei=l_tmpdatei+tmp*16; /经处理后数组l_tmpdate中的数据为BCD码形式 Write_Ds1302(0x8E,0X00); p=write_rtc_address; /传地址 for(i=0;i7;i+) /7次写入 秒分时日月周年 Write_Ds1302(*p,l_tmpdatei); p+; Write_Ds1302(0x8E,0x80); void diyiye() display(1,2,湖南工学院) ; display(2,1,电信与信息工程系); display(3,3,电信0901); display(4,1,蒋赞荣郭素芳岳艳) ;uchar code tableee=欢迎使用万年历!;void xingqi() if(l_tmpdisplay16=1) display(4,2,星期一); if(l_tmpdisplay16=2) display(4,2,星期二); if(l_tmpdisplay16=3) display(4,2,星期三); if(l_tmpdisplay16=4) display(4,2,星期四); if(l_tmpdisplay16=5) display(4,2,星期五); if(l_tmpdisplay16=6) display(4,2,星期六); if(l_tmpdisplay16=0) display(4,2,星期日);/*LCD功能设置*/void lcd_set(void) command=0x34; write(command); command=0x30; write(command); command=0x01; write(command); command=0x06; write(command); command=0x0c; write(command);/*清屏程序*/void lcd_clear(void) command=0x01; write(command); command=0x34; write(command); command=0x30; write(command);/*写指令程序*/void write(uchar command) delay(100); rs=0; rw=0; P0=command; en=1; _nop_(); _nop_(); en=0;/*写数据程序*/void write_date(uchar data0) delay(100); rs=1; rw=0; P0=data0; en=1; _nop_(); _nop_(); en=0;/*显示程序*/void display(uchar y, uchar x, uchar *p) switch (y) case 1:write(0x7f+x); break; /液晶第一行 case 2:write(0x8f+x); break; /0x90+(x-1) case 3:write(0x87+x);break; case 4:write(0x97+x);break; default:break;while(*p) write_date(*p+); /*主程序*/void main()lcd_clear(); lcd_set(); diyiye(); while(t|f) v=key();if(f=0)f=1;if(v=1)k+; if(k=10)k=0; if(k=1) lcd_clear(); switch(k) case 1: write(0x80); for(i=0;i16;i+ ) write_date(tableeei);while(k!=2) v=key();if(v=2) ReadRTC_Flag=1; lcd_set( ) ; lcd_clear( ) ; InitTIMER0(); Set_RTC();/设置时间 write(0x80); for(num=0;num14;num+) write_date(tablenum);delay(5); write(0x90); for(num=0;num16;num+) write_date(table1num);delay(5); write(0x89); for(num=0;num12;num+) write_date(table2num);delay(5); write(0x98); for(num=0;num0;x-) for(y=80;y0;y-); /* 函数原型:keychuli();* 功 能:处理与键盘相连的P1口的内容,作为键值。*/uchar keychuli() uchar k=0,i,j; for(i=0;i4;i+) P1=aai;delay(5);P1=P1&0xff; for(j=0;j4;j+ ) if(P1=bbij)k=i*10+j+1;j=4;i=4; return(k); /返回键值 /* 函数原型:key();* 功 能:键盘扫描函数,函数返回值即键值。*/uchar key() uchar keyzhi,keyzhii; /电子钟键盘按键键值临时存放 keyzhi=keychuli(); /调P1口处理函数 if(keyzhi!=0) /有键动作延时去抖动,否则函数返回 keyzhi=keychuli(); /再次调P1口处理函数 if(keyzhi!=0) /真正有键按下,取键值并暂存 keyzhii=keyzhi; while(keyzhi!=0) /判按键是否释放,没有释放延时去抖动等待释放 keyzhi=keychuli(); keyzhi=keyzhii; /按键释放后恢复按键键值 return(keyzhi); /返回按键键值 课程设计体会一周的课程设计很快就结束了,总的说来收获不小,不能说设计的过程中是一帆风顺的,开始时是设计阶段也没太在意,后来到动手的时候觉得遇见了好多没想到的问题,平时在书本上划的很熟练的一些电路,当拿到protues上进行仿真时就回错误百出。开始时让我极为的伤头,在课程设计的第二天我专门的对protues软件进行了操练,当我熟悉了之后用起来就比较得心应手了。也发现用计算机软件进行设计的好处,使产品的设计成本大大的降低。实践出真知,通过这次电路的设计让我学到了书本中没有的很多东西,我想最主要的就是一种综合能力的提升。我认为这样的电路设计很有现实意义,这样的教学方法对于提升同学们的综合运用能力也是行之有效的,是非常值得推广的。如果在讲课过程中能够运用部分内容穿插一些小设计,或者让同学们自己回去设计一些小电路,并且通过老师的指导演示出来,我想不仅能调动同学的学习积极性,而且还能培养出同学们的创新设计能力。比如这次设计,如果能够让同学们能够演示出来就更好了。如果老师讲课时能够将各种难题能够用软件模拟可以让我们更好的理解。在最初的设计过程中,我们一共整理出3个方案。但在实践的过程中发现,在pro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (正式版)DB15∕T 3380-2024 《马铃薯镰刀属真菌病害检测技术规程》
- 书中的奇遇读书故事叙事作文5篇范文
- (正式版)DB15∕T 3350-2024 《饲用燕麦草霉变评价》
- 电力入场考试题及答案
- 读书破万卷写物作文10篇
- 护理专科生理学试题库及答案
- 护理人际关系面试题库及答案
- 大学以往考试题及答案
- 企业信息安全管理制度与流程手册
- 企业文化价值体系分析工具
- 别墅整装交付管理办法
- 《风景谈》课件-课件
- 实验室6S培训资料
- 小米之家培训课件
- 新版gmp指南培训课件
- 邮件沟通礼仪培训课件
- 拔罐适应症研究-洞察及研究
- 2024年药品监管业务知识技能竞赛考试题库(含答案)
- 疼痛科质量控制管理
- 低空经济八大应用场景与实践案例解析方案
- 呼吸管路处理规范与操作要点
评论
0/150
提交评论