ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:285.93KB ,
资源ID:11166510      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11166510.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计完美打印.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

课程设计完美打印.docx

1、课程设计完美打印课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 信息工程学院 题 目: 基于定时器计数器的秒表仿真和C语言开发 初始条件:本课程设计,要求用使用Proteus仿真软件进行系统设计与仿真。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、课程设计工作量:1周内完成对系统的设计、仿真。2、技术要求: 1)试用定时器/计数器设计一个简单的秒表,能显示计时状态和结果。要求进行电路仿真实验,并使用C语言进行程序的开发。 2)要求学生主动思考,自主发挥,实现系统的特色功能。3、查阅至少5篇参考文献。按武汉理工大学课程设计工作规范要求撰写设

2、计报告书。全文用A4纸打印,图纸应符合绘图规范。提交报告的主要内容:(使用Proteus 7.5 sp3)1) 题目2) 仿真所完成的主要功能和特色简介摘要(特别是自己扩展的功能,根据特色功能评优)3) Proteus仿真的基本流程4) 所使用芯片以及引脚功能简介(需要提供对应芯片DataSheet的下载链接)5) 设计方案与工作原理,给出仿真电路图6) 实验记录与结果分析时间安排:1) 第1天, 查阅相关资料,学习设计原理。2) 第23天, 方案选择和电路设计仿真。3) 第4天, 设计说明书撰写。4) 第5天, 上交报告,同时进行答辩。指导教师签名: 年 月 日系主任(或责任教师)签名: 年

3、 月 日 目 录摘要 11、硬件设计 21.1 元件介绍 21.1.1 AT89C51芯片 21.1.2 AT89C51各引脚功能 21.1.3 1602LCD引脚接口说明 41.1.4 引脚说明 51.1.5 DDRAM地址与显示位置的对应关系 51.2 电路设计 61.2.1 晶振电路 61.2.2复位电路 62、软件设计 72.1流程图 72.2程序源文件 73、仿真与测试 134、心得体会 145、参考文献 15本科生能力拓展训练成绩评定表 16摘要本系统采用AT89C51单片机为中心器件,利用定时器计数器定时和记数的原理,结合单片机最小系统及lcd1602显示等来设计计数器,将软、硬

4、件有机地结合起来。其中硬件系统采用PROTEUS仿真功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。关键词:秒表 单片机 PROTEUS仿真 1、硬件设计1.1 元件介绍1.1.1 AT89C51芯片AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价

5、廉的方案。AT89C51功能性能:与MCS-51成品指令系统完全兼容;4KB可编程闪速存储器;寿命:1000次写/擦循环;数据保留时间:10年;全静态工作:0-24MHz;三级程序存储器锁定;128*8B内部RAM;32个可编程I/O口线;2个16位定时/计数器;5个中断源;可编程串行UART通道;片内震荡器和掉电模式。1.1.2 AT89C51各引脚功能AT89C51提供以下标准功能:4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支

6、持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。AT89C51采用PDIP封装形式,引脚配置如图3所示。图1 AT89C51的引脚图AT89C51芯片的各引脚功能为:P0口:这组引脚共有8条,P0.0为最低位。这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了

7、数据输入的可靠性;第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。P1口:这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元

8、,但并不是像P0口那样传送存储器的读/写数据。P3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表1所示:P3口各位第二功能P3.0 RXT(串行口输入)P3.1 TXD(串行口输出)P3.2/INT0(外部中断0输入)P3.3/INT1(外部中断1输入)P3.4T0(定时器/计数器0的外部输入)P3.5T1(定时器/计数器1的外部输入)P3.6/WR(片外数据存储器写允许) P3.7/RD(片外数据存储器读允许)表1 P3口各位的第二功能Vcc为+5V电源线,Vss接地。ALE:地址锁存允许线,配合P0口的第二功能使用,在访问外部存储器时,

9、89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。:片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM,若=1,则允许使用片内ROM, 若=0,则只使用片外ROM。 :片外ROM的选通线,在访问片外ROM时,89C51自动在线上产生一个负脉冲,作为片外ROM芯片的读选通信号。RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上电复位和人工按键复位两种。XTAL1和XTAL2:片内

10、震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。1.1.3 1602LCD引脚接口说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据命令选择端口(H/L)12D5Data I/O5R/W读/写选择端(H/L)13D6Data I/O6E使能信号14D7Data I/O7D1Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极1.1.4 引脚说明 3脚:VL,液晶显示偏压信号,用于调整LCD1

11、602的显示对比度,一般会外接电位器用以调整偏压信号,此脚电压为0时可以得到最强的对比度。 4脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为低电平时,则是进行命令字节的传输操作。命令字节,即是用来对LCD1602的一些工作方式作设置的字节;数据字节,即使用以在1602上显示字节。 5脚:R/W,读写选择端。当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。 6脚:E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。 714脚:8位并行数据口,使得对LCD1602的数据读写大为方便。基

12、本操作时序: (1)读状态:输入:RS=L,RW=H,E=H;输出:D0D7=状态字 (2)写指令:输入:RS=L,RW=L,D0D7=指令码,E=高脉冲;输出:无 (3)读数据:输入:RS=H,RW=H,E=H;输出:D0D7=数据 (4)写数据:输入:RS=H,RW=L,D0D7=数据,E=高脉冲;输出:无需要两个写时序: 当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0D7,最后E引脚一个高脉冲将数据写入。 当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0D7,最后E

13、引脚一个高脉冲将数据写入。1.1.5 DDRAM地址与显示位置的对应关系 1602中我们就用前16个就行了。第二行也一样用前16 个地址。对应如下:1.2 电路设计1.2.1 晶振电路如图2-3 所示,这里选用12MHE的内部振荡方式,电路如下:电容器C1,C2起稳定振荡频率,快速起振的作用,C1,C2可在20100PF之间取,这里取20PF,接线时要使晶振振荡器尽可能接近单片机。1.2.2复位电路 采用上电+按键复位电路,上电后,由于电容充电,使RST持续一段时间高电平时间。当单片机已在运行之中时,按下复位按键也能使RST持续一段时间的高电平,从而实现上电加开关复位的操作。这不仅能时单片机复

14、位,而且还能使单片机的外围芯片也同时复位,当程序出现错误时,可以随时使电路复位。复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动 整体电路图: 图2 总体电路图2、软件设计2.1流程图图3 流程图2.2程序源文件:#include #include#define uchar unsigned char#define uint unsigned int #define DelayNOP()_nop_();_nop_();_nop_(

15、);_nop_(); sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit LCD_RS=P20;sbit LCD_RW=P21;sbit LCD_EN=P22;uchar keycount1=-1;uchar keycount2=-1;uchar code str1= second count ;uchar s1_string=N1 00:00:00:00 ;uchar s2_string=N2 00:00:00:00 ; uchar millisecond1,second1,minute1,hour1;uchar millisecond2

16、,second2,minute2,hour2; bit LCD_Busy_Check(); void LCD_Initialize(); void LCD_Set_POS(uchar) ; void LCD_Write_Command(uchar); void LCD_Write_Data(uchar); /延时 void DelayMS(uint ms) uchar t; while(ms-) for (t=0;t120;t+); /LCD忙检查 bit LCD_Busy_Check() bit Result; LCD_RS=0;LCD_RW=1;LCD_EN=1;DelayNOP(); R

17、esult=(bit)(P0&0x80); LCD_EN=0; return Result; /向LCD写指令 void LCD_Write_Command(uchar cmd) while (LCD_Busy_Check() ); LCD_RS=0;LCD_RW=0;LCD_EN=0; _nop_(); _nop_(); P0=cmd; DelayNOP(); LCD_EN=1;DelayNOP(); LCD_EN=0; /向LCD写数据void LCD_Write_Data(uchar str) while (LCD_Busy_Check() ; LCD_RS=1;LCD_RW=0;LCD

18、_EN=0;P0=str;DelayNOP(); LCD_EN=1;DelayNOP();LCD_EN=0; /初始化LCD void LCD_Initialize() DelayMS(5);LCD_Write_Command(0x38); DelayMS(5);LCD_Write_Command(0x0c); DelayMS(5);LCD_Write_Command(0x06); DelayMS(5);LCD_Write_Command(0x01); DelayMS(5); /设置显示位置 void LCD_Set_POS(uchar Position) LCD_Write_Command(

19、Position|0x80); /显示函数,在LCD指令行上显示字符串 void Display_String(uchar*str,uchar LineNo) uchar k; LCD_Set_POS(LineNo);for (k=0;k16;k+) LCD_Write_Data (strk);void Time0() interrupt 1 using 0 TH0=(65536-10000)/256; TL0=(65536-10000)%256; if(+millisecond1=100) millisecond1=0; if(+second1=60) second1=0; if(+minu

20、te1=60) minute1=0; if(+hour1=24) hour1=0; minute1=0; second1=0; void Time1() interrupt 3 using 1 TH1=(65536-10000)/256; TL1=(65536-10000)%256; if(+millisecond2=100) millisecond2=0; if(+second2=60) second2=0; if(+minute2=60) minute2=0; if(+hour2=24) hour2=0; minute2=0; second2=0; void display_s1(ucha

21、r mis, s,m,h) s1_string3=h/10+0; s1_string4=h%10+0; s1_string6=m/10+0; s1_string7=m%10+0; s1_string9=s/10+0; s1_string10=s%10+0; s1_string12=mis/10+0; s1_string13=mis%10+0; Display_String(s1_string,0x00); void display_s2(uchar mis, s,m,h) s2_string3=h/10+0; s2_string4=h%10+0; s2_string6=m/10+0; s2_s

22、tring7=m%10+0; s2_string9=s/10+0; s2_string10=s%10+0; s2_string12=mis/10+0; s1_string13=mis%10+0; Display_String(s2_string,0x40); void main() uint tmp=0;uint tmp1=0;IE=0x8A; TMOD=0x11; TH0=(65536-10000)/256; TL0=(65536-10000)%256;TH1=(65536-10000)/256; TL1=(65536-10000)%256; LCD_Initialize(); Displa

23、y_String(str1,0x00);P1=0xff;while(1) if(K1=0) while(K1=0); tmp=tmp+1; keycount1=tmp%2; if(K2=0) while(K2=0); tmp1=tmp1+1; keycount2=tmp1%2; if(K3=0) while(K3=0); millisecond1=0; second1=0; minute1=0; hour1=0; TR0=0; keycount1=-1; tmp=0; display_s1(millisecond1,second1,minute1,hour1); if(K4=0) while(

24、K4=0); millisecond2=0; second2=0; minute2=0; hour2=0; TR1=0; keycount2=-1; tmp1=0; display_s2(millisecond2,second2,minute2,hour2); switch (keycount1) case 1:TR0=1;display_s1(millisecond1,second1,minute1,hour1);break; case 0:TR0=0;display_s1(millisecond1,second1,minute1,hour1);break;switch (keycount2

25、) case 1:TR1=1;display_s2(millisecond2,second2,minute2,hour2);break; case 0:TR1=0;display_s2(millisecond2,second2,minute2,hour2);break; 3、仿真与测试第一步:按下K1键 图4 秒表1仿真第二步:按下K2键 图5 秒表2仿真第三步:按下K3键 图6 秒表1清零第四步:按下K4键 图7 秒表2清零4、心得体会本次课程设计运用单片机实现一个简单的秒表,运用了51单片机搭配相应的外围电路,如按键输入、lcd1602显示输出等模块,基本实现了题目要求,能够通过按键控制秒

26、表的启、停等计时功能。通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,做自己力所能及的,别人却没想到的事。同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。5、参考文献1 郭天祥.新概念51单片机C语言教程-入门、提高、开发、拓展全攻略M.电子工业出版社.2009.112 郭天翔.新概念51单片机C语言教程.北京:电子工业出版社,2008.103 陈益飞.单片机原理及应用技术.北京M:国防工业出版社,20114 张伟.张杰编著.单片机原理及应用.北京M:机械工业出版社,20075 丁元杰单片机原理及应用M.北京:机械工业出版社.2005本科生能力拓展训练成绩评定表姓 名性 别专业、班级题 目:答辩或质疑记录:成绩评定依据:最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 年 月 日

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2