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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验五 万秒计时器的设计.docx

1、实验五 万秒计时器的设计实验四 数码管的动态显示实验一、实验目的 熟悉掌握数码管动态显示的基本方法; 根据已知电路和设计要求在实验板上实现数码管动态显示。根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。二、实验内容 1、在STC89C52实验平台的4位数码管上实现动态显示00000001000299989999000000010002不断反复,每隔1s切换显示内容。 2、应用键盘控制时间的显示。键盘按键控制“停止计时”、“启动计时”、“加个位显示内容”、“加十位显示内容”、“加百位显示内容”、“加千位显示内容”。3、思考:如何实现当4位数码管显示的内容为“9999”时,蜂鸣器蜂鸣。

2、3、实验原理 实验要求1、动态扫描可以实现要求。简单地说,动态扫描就是选通一位,送一位数据。原理图中的P10P13是位选信号,即选择哪个数码管显示数字;P00P07是段码,即要显示的数字。可以通过依次选通一位7段数码管并通过P0端口送出显示数据。由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。本实验使用中断,实现每1s更新一次数字。 实验要求2、利用键盘扫描,对扫描结果判断与进行对应操作可以实现要求。简单地说,就是中断来临时,对键盘进行一次扫描,将扫描到的键值与对应操作联系起来。其中对启动与停止设置标志位,通过对

3、标志位的判断来停止或启动,而不是对TR0进行直接操作,以防与中断计数的启动与停止互相覆盖,而达不到要求。实验要求3、判断每一位的数字,当每位皆“9”时,置P15低电平,蜂鸣器蜂鸣。四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路;使用中断实现每1秒更新一次数字的设计思路;使用键盘控制时间显示的设计思路;以及实现当4位数码管显示的内容皆为“9”时,蜂鸣器蜂鸣的设计思路。(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每1s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现1s的长延时,那么可以

4、使用多次中断来实现,并且在中断到来时,不断地死循环显示数字。在编写代码时,初始化千位百位十位个位的数字为0;设置Timer0定时时间为50ms,可以用一个参数i计算中断的次数;当中断的次数达到20次时,说明已经达到了1s,此时更新数字,即将数字GeWei自增1;当GeWei数字大于9时,ShiWei自增1;当ShiWei数字大于9时,BaiWei自增1;当BaiWei数字大于9时,QianWei自增1;当QianWei大于9时,个位十位百位千位清零。(3)扫描键值的函数放在中断里面,每次中断时,判断是否有键被按下,并判断键值是多少,执行相对应的操作。这里比较值得注意的是,标志位flag的设置问

5、题。不能直接对TR0进行操作来实现暂停与启动,因为在中断的定时器设置会覆盖掉,所以要用标志位flag而不是TR0。本实验中,按P37 千位加1;按 P36百位加1,按P35十位加1,按P34个位加1,按P33暂停计时,按P32启动计时。(4)判断GeWei%10,ShiWei%10,BaiWei%10,QianWei%10是否皆为“9”,若是则将P15置0,让三极管导通,蜂鸣器蜂鸣。2、针对电路图及设计要求给出程序框图。 设计步骤:1、编写源代码第一步:打开Keil uVision4,单击主菜单“project”的“new project”选项,选择工程保存路径,输入工程名“FivePro”;

6、在弹出的对话框里选择Atmel的80C51,单击“确定”;第二步:单击主菜单的“File”的“New”选项,在编辑窗口里编写源代码。/*效果:1、数码管做精确的秒计数0000-9999; 2、如果四位为9999时,蜂鸣器蜂鸣; 3、按键控制“停止与启动计时”、“加个位显示内容”、 “加十位显示内容”、“加百位显示内容”、“加千位显示内容”;编者:2014年05月22日 */头文件:#include reg51.h/变量定义:code unsigned char Tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/表:共阳数码管 0-9

7、unsigned char GeWei; unsigned char ShiWei; unsigned char BaiWei; unsigned char QianWei;unsigned char flag; /定义标志位unsigned char tt=0;/中断次数/引脚定义: /P3作为键盘控制时间显示sbit S2=P32; /P32设置为 启动计时 sbit S3=P33; /P33设置为 停止计时 sbit S4=P34; /P34设置为 个位加1 sbit S5=P35; /P35设置为 十位加1 sbit S6=P36; /P36设置为 百位加1sbit S7=P37; /

8、P37设置为 千位加1 /P1作为数码管位选信号sbit SMG_q = P10; /定义数码管阳级控制脚(千位)sbit SMG_b = P11; /定义数码管阳级控制脚(百位)sbit SMG_s = P12; /定义数码管阳级控制脚(十位)sbit SMG_g = P13; /定义数码管阳级控制脚(个位)sbit Sound = P15; /定义蜂鸣器控制脚/函数声明:void delay(unsigned int timer); /数码管扫描延时void DisplayGeWei(unsigned char G);/个位显示函数void DisplayShiWei(unsigned c

9、har S); /十位显示函数void DisplayBaiWei(unsigned char B); /百位显示函数void DisplayQianWei(unsigned char Q);/千位显示函数void delay60ms(void);/键盘消抖延时void key_scan(void);/键盘扫描 void main() TMOD=0x01; /设置定时器1为模式一,即16位计算模式 TH0=(65536-50000)/256; /给计数寄存器赋值,50毫秒时间 TL0=(65536-50000)%256; EA=1; /开启总中断 ET0=1; /开启定时器0中断 TR0=1;

10、 /启定定时器0 GeWei=0; /初始化 ShiWei=0; BaiWei=0; QianWei=0; while(1) if(tt=20) /20*50ms定时时间为1秒 tt=0; GeWei+; /计数变量加1 if(GeWei9) GeWei=0; ShiWei+; if(ShiWei9) ShiWei=0; BaiWei+; if(BaiWei9) BaiWei=0; QianWei+; if(QianWei9) GeWei=0; ShiWei=0; BaiWei=0; QianWei=0; if(QianWei=9&BaiWei=9&ShiWei=9&GeWei=9) Soun

11、d=0; else Sound=1; DisplayGeWei(GeWei); DisplayShiWei(ShiWei); DisplayBaiWei(BaiWei); DisplayQianWei(QianWei); /中断函数void timer() interrupt 1 TR0=0; key_scan();/执行键盘扫描 if(flag) tt+; TH0=(65536-46083)/256; /定时器T0高四位赋值 TL0=(65536-46083)%256; /定时器T0低四位赋值 TR0=1;/键盘扫描函数void key_scan(void) P3=0xff; /将P3置高电

12、平 if(P3&0xff)!=0xff) /p3与自身与,如果不为原来的,则说明有键按下 delay60ms(); /延时60ms再检测 if(P3&0xff)!=0xff) /确实有键按下 if(S2=0) /如果是S2按下启动计时 flag=1; if(S3=0) /如果是S3按下停止计时 flag=0; if(S4=0) /如果是S4键按下个位加1 GeWei+; if(S5=0) /如果是S5键按下十位加1 ShiWei+; if(S6=0) /如果是S6键按下百位加1 BaiWei+; if(S7=0) /如果是S7键按下千位加1 QianWei+; /显示个位void Displa

13、yGeWei(unsigned char G) SMG_g=0; /P1.3引脚输出低电平,个位点亮 P0=TabG%10; delay(500); SMG_g=1; /熄灭个位 /显示十位 void DisplayShiWei(unsigned char S) SMG_s=0; /P1.2引脚输出低电平,十位点亮 P0=TabS%10; delay(500); SMG_s=1; /熄灭十位/显示百位void DisplayBaiWei(unsigned char B) SMG_b=0; /P1.1引脚输出低电平,百位点亮 P0=TabB%10; delay(500); SMG_b=1; /熄

14、灭百位/显示千位void DisplayQianWei(unsigned char Q) SMG_q=0; /P1.0引脚输出低电平,千位点亮 P0=TabQ%10; delay(500); SMG_q=1; /熄灭千位/键盘扫描延时消抖void delay60ms(void) unsigned char i,j; for(i=0;i200;i+) for(j=0;j100;j+) ;/动态扫描延时void delay(unsigned int timer) while(timer-) ;第三步:选择主菜单的“File”的“Save”选项,输入文件名如“code”,后缀名为.c;第四步:回到编

15、辑界面,单击“Target1”前面的“+”号,在“Source Group1”选项上右击,选择“Add Files to Group Source Group1”,在弹出的窗口的“文件类型”里选择“All Files”选择“code.c”,单击“Add”,然后单击“Close”;第五步:单击左边“Project”窗口的“Target1”,然后选择菜单“Project /Option for Target Target1,选择“Output”,勾选”Creat HEX File”,点击“确定”;(此步骤是为了生成.hex文件,用于烧录到板子或者装载到硬件仿真软件,如果不考虑此目的,则可以省略此步

16、骤);3、编译连接与调试。(1)编译与连接:点击“Project/Rebuild all Target Files”进行文件编译。编译结果若有错误或警告,则将要修改直至文件编译成功。编译成功,其结果为:(2)调试:第一步:依次点击“Debug”“Start/Stop Debug Session”第二步:在界面左边出现工作寄存器R0R7、累加器A等特殊功能寄存器,这些寄存器的数值会随着调试的进行发生变化;点击F11,会进行单步调试功能;第三步:界面有反汇编窗口、命令窗口、程序窗口、存储器观察窗口、寄存器观察窗口等,根据需要来观测。点击“peripjerals”中的“I/O port”选择不同的输

17、出端口,点击“Timer-time0”,弹出如下图窗口。点击debug中的run,可以看到运行中的P1、P0的输出值以及Timer的工作状态。P1端口与P0端口各管脚的波形如下,从中可以看出符合设计逻辑与时间间隔。I对应的存储器里的指令:经检验,P1、P0端口以及Timer和存储器里面的指令逻辑上是符合的、一致的。从而可以判断实验的准确。4、根据原理图在proteus上放置元件并进行仿真第一步:双击“ISIS”,打开Proteus工作页面;单击“文件”、“新建文件”,在弹出的选择模块窗口中选择DEFAULT模块,点击“确定”、“保存”,设置好保存路径,在文件名中输入文件名,点击“保存”;第二步

18、:点击左边的“P”,从元件库中选取所需的元件,放置好各元件,连线;设计好的电路图如下:第三步:右击单片机AT89C51,在“编辑元件”对话框中单击“Program File”右侧文本旁边的按钮,选取在Vision4.0产生的“FivePro.hex”,在“Clock frequency”输入“12MHz”,点击确定;9、单击“调试”菜单的“执行”命令,如果有提示错误或警告,则要修改直至没有提示出错,系统进行仿真。仿真信息提示如下:10、下载到向老师租借的板子上跑,实验效果符合实验要求。5、实验结果与分析通过单步跟踪调试程序,观察各个相关SFR、SRAM单元结果可知程序结果正确。6、实验结论与心得本次实验使用Timer0工作在方式1,多次中断来实现2s的定时。其中每次触发中断时间为50ms,用一变量计算中断次数,则中断次数*50ms为持续时间。可以在时间到的时候,进行各种操作,比如进行键值判断。中断模块,可以作为一个比较标准的模块,稍加改动用于其他的实验中。通过此次试验,我更加了解到中断的工作原理,以及在编写代码时如何使用中断,以及使用中断进行长延时或者其他操作。认识到中断的机制,解放了CPU的含义。实验充满着趣味。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1