单片机嵌入式实验报告51秒表.docx
- 文档编号:3232445
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:9
- 大小:90.01KB
单片机嵌入式实验报告51秒表.docx
《单片机嵌入式实验报告51秒表.docx》由会员分享,可在线阅读,更多相关《单片机嵌入式实验报告51秒表.docx(9页珍藏版)》请在冰豆网上搜索。
单片机嵌入式实验报告51秒表
单
片
机
及
嵌
入
式
设
计
姓名:
班级:
信息工程
学号:
学院:
信息科学与技术学院
一、题目
51秒表
二、设计要求
我们设计的是一个1602液晶显示的秒表,计时精度达到0.1秒,另外有两个独立的按键对秒表进行控制,一个键控制计时的开始,一个键控制计时的停止。
三、使用的系统平台
软件平台:
keil51
keil51是美国keilsoftware出品的51系列兼容单片机C语言软件开发系统,是众多单片机开发软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真于一体,同时还支持PLM、汇编、和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有强大的功能。
硬件平台:
STC89C52单片机、1602液晶显示器、按钮、发光二极管
STC89C52单片机:
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
1602液晶显示器:
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
四、系统总体设计
如下图所示,整个秒表以STC89C52为核心,按下停止键或启动键控制秒表的停止和开始,同时反映给STC89C52,再经过处理显示在1602液晶显示器上,进行计时。
五、系统的详细设计
硬件:
系统总的原理图如上图所示,按下暂停和启动按键,秒表开始计时并显示在LCD1602液晶显示器上。
对于STC89C52单片机,其内部带有定时/计数系统,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能。
对于LCD1602通过指令来控制它的读写操作。
软件流程图:
六、系统的软件实现
主要函数:
延时函数:
voiddelay1ms()
{
unsignedchari,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);}
voiddelay(unsignedcharn)
{
unsignedchari;
for(i=0;i delay1ms(); } 忙状态测试: unsignedcharBusyTest(void) { bitresult; RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1;//E=1,才允许读写 _nop_();//空操作 _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应3时间 result=BF;//将忙碌标志电平赋给result E=0;//将E恢复低电平 returnresult; } voidWriteInstruction(unsignedchardictate) { while(BusyTest()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_();//空操作两个机器周期,给硬件反应时间 P0=dictate;//将数据送入P0口,即写入指令地址 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } voidWriteAddress(unsignedcharx) { WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x" } voidWriteData(unsignedchary) { while(BusyTest()==1); RS=1;//RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, P0=y;//将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } voidLcdInitiate(void) { delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x38);//显示模式设置: 16×2显示,5×7点阵,8位数据接口 delay(5);//延时5ms ,给硬件一点时间 WriteInstruction(0x38); delay(5); WriteInstruction(0x38);//连续三次,确保初始化成功 delay(5); WriteInstruction(0x0c);//显示模式设置: 显示开,无光标,光标不闪烁 delay(5); WriteInstruction(0x06);//显示模式设置: 光标右移字符移动 delay(5); WriteInstruction(0x01);//清屏幕指令将以前的显示内容清除 delay(5);} voidDisplaySecond() { unsignedchari,j; i=s/10;//取整运算,求得十位数字 j=s%10;//取余运算,求得各位数字 WriteAddress(0x46);//写显示地址,将十位数字显示在第2行第11列 WriteData(digit[i]);//将十位数字的字符常量写入LCD WriteData(digit[j]);//将个位数字的字符常量写入LCD WriteData(46); WriteData(digit[count/2]); } voidmain(void) {unsignedchari; LcdInitiate();//调用LCD初始化函数 TMOD=0x01;//使用定时器T0的模式1 TH0=(65536-46083)/256;//定时器T0的高8位设置初值 TL0=(65536-46083)%6;//定时器T0的低8位设置初值 EA=1;//开总中断 ET0=1;//定时器T0中断允许 TR0=1;//启动定时器T0 //启动定时器T0 count=0;//中断次数初始化为0 s=0;//秒初始化为0 WriteAddress(0x00);//写地址,从第1行第4列开始显示 i=0;//从字符数组的第1个元素开始显示 while(string[i]! ='\0')//只要没有显示到字符串的结束标志'\0',就继续 { WriteData(string[i]);//将第i个字符数组元素写入LCD i++;//指向下一个数组元素 } //将分号的字符常量写入LCD while (1)//无限循环 { DisplaySecond();//显示秒 delay(5);//给硬件一点反应时间}} voidTime0(void)interrupt1using1//定时器T0的中断编号为1,使用第1组工作寄存器 { count++;//每产生1次中断,中断累计次数加1 if(count==20)//如果中断次数计满20次 { count=0;//中断累计次数清0 s++;//秒加1 } if(s==60)//如果计满60秒 { s=0;//秒清0 } TH0=(65536-46083)/256;//定时器T0高8位重新赋初值 TL0=(65536-46083)%6;//定时器T0低8位重新赋初值 } 七.系统的测试结果 程序烧写进52单片机,单品机控制1602显示,可显示出“stopwatch”字样。 当按下S1键,计数启动。 当按下S2键,计数暂停。 当按下S3键,计数置0,重新等待计数。 初步完成计数功能。 七、总结 经过两个星期的的秒表设计,我认识到自己还有很多不足,一方面,动手能力较差,需要提高;另一方面,之前学的知识很多都忘记了,为了更好的完成这次秒表设计,必须要温习相关的内容。 但更重要的是经过这两周的学习,我不仅对单片机的理论有了更好的了解,也成功的将理论知识运用到了实践中,提高了我各方面的能力,虽然有一些方面没有达到老师的要求,但是我会吸取经验,下次一定会做得更好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 嵌入式 实验 报告 51 秒表
![提示](https://static.bdocx.com/images/bang_tan.gif)