实验四 数码管的动态显示实验_第1页
实验四 数码管的动态显示实验_第2页
实验四 数码管的动态显示实验_第3页
实验四 数码管的动态显示实验_第4页
实验四 数码管的动态显示实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、实验四 数码管的动态显示实验班级 通信1102 姓名 谢剑辉 学号20110803223 指导老师 袁文澹一、实验目的 熟悉掌握数码管动态显示的基本方法;根据已知电路和设计要求在实验板上实现数码管动态显示。根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。二、实验内容1、在STC89C52实验平台的4位数码管上实现动态显示01231234234534564567567867897890890190120123不断反复,每隔2s切换显示内容。2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。3、 实验原理 实验要求“4位数码管上实现动态显示012312342345345

2、64567567867897890890190120123不断反复,每隔2s切换显示内容”。动态扫描可以实现要求。简单地说,动态扫描就是选通一位,送一位数据。原理图中的P10P13是位选信号,即选择哪个数码管显示数字;P00P07是段码,即要显示的数字。可以通过依次选通一位7段数码管并通过P0端口送出显示数据。由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。本实验使用中断,实现每2s更新一次数字。四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思

3、路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。在编写代码时,设置Timer0定时时间为50ms,可以用一个参数i计算中断的次数;当中断的次数达到4

4、0次时,说明已经达到了2s,此时更新数字,即将数字x自增1;同时,判断(x%10),(x+1)%10,(x+2)%10,(x+3)%10里面是否有1,如果有1的话,则将P15置0,让三极管导通,蜂鸣器蜂鸣。2、 针对电路图及设计要求给出继电器定时控制的程序框图。设计步骤:1、编写源代码第一步:打开Keil uVision4,单击主菜单“project”的“new project”选项,选择工程保存路径,输入工程名“SMGPro”;在弹出的对话框里选择Atmel的80C51,单击“确定”;第二步:单击主菜单的“File”的“New”选项,在编辑窗口里编写源代码。/*/实验四:数码管的动态显示/2

5、014.05.10 谢剑辉*/#include<reg51.h>sbit sound=P15;sbit s0=P10;sbit s1=P11;sbit s2=P12;sbit s3=P13;unsigned char i; /记录中断次数unsigned int x; /x%10为千位的数字unsigned char Tab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/数码管显示09的段码表/*函数功能:快速动态扫描延时程序*/void delay(unsigned int timer)while(timer-) ;/*

6、函数功能:4位数的数码显示器显示*/void display(unsigned int k) s0=0;/即P1=1111 1110B,P1.0引脚输出低电平,数码显示器千位接通电源 P0=Tabk%10;/显示千位 delay(200); s0=1; s1=0;/即P1=1111 1101B,P1.1引脚输出低电平,数码显示器百位位接通电源 P0=Tab(k+1)%10;/显示百位 delay(200); s1=1; s2=0;/即P1=1111 1011B,P1.2引脚输出低电平,数码显示器十位接通电源 P0=Tab(k+2)%10;/显示十位 delay(200); s2=1; s3=0

7、;/即P1=1111 0111B ,P1.3引脚输出低电平,数码显示器个位接通电源 P0=Tab(k+3)%10;/显示个位 delay(200); s3=1;void main(void)/主函数 sound=0; TMOD=0x01;/使用定时器T0 TH0=(65536-46083)/256; /上式将定时器计时时间设定为46083×1.085微秒=50000微秒=50毫秒 TL0=(65536-46083)%256; EA=1;/开启总中断 ET0=1;/定时器T0中断允许 TR0=1;/启动定时器T0开始运行 while(1) display(x); /调用检测结果的显示程

8、序 /*函数功能:定时器T0的中断服务程序*/void Time0(void) interrupt 1 using 1 TR0=0; /关闭定时器T0 i+; /每来一次中断,i自加1 if(i=40) /够40次中断,即2秒钟进行一次检测结果采样 x+; /2秒更新一次x i=0; /将i清0,重新统计中断次数 if(x%10=1|(x+1)%10=1|(x+2)%10=1|(x+3)%10=1) sound=0; else sound=1; TH0=(65536-46083)/256; /重新给计数器T0赋初值 TL0=(65536-46083)%256; TR0=1; /启动定时器T0第

9、三步:选择主菜单的“File”的“Save”选项,输入文件名如“SMGcode”,后缀名为.c;第四步:回到编辑界面,单击“Target1”前面的“+”号,在“Source Group1”选项上右击,选择“Add Files to Group Source Group1”,在弹出的窗口的“文件类型”里选择“All Files”选择“SMGcode.c”,单击“Add”,然后单击“Close”;第五步:单击左边“Project”窗口的“Target1”,然后选择菜单“Project /Option for Target Target1,选择“Output”,勾选”Creat HEX File”,

10、点击“确定”;(此步骤是为了生成.hex文件,用于烧录到板子或者装载到硬件仿真软件,如果不考虑此目的,则可以省略此步骤);3、 编译连接与调试。(1) 编译与连接:点击“Project/Rebuild all Target Files”进行文件编译。编译结果若有错误或警告,则将要修改直至文件编译成功。编译成功,其结果为:(2)调试:第一步:依次点击“Debug”“Start/Stop Debug Session”第二步:在界面左边出现工作寄存器R0R7、累加器A等特殊功能寄存器,这些寄存器的数值会随着调试的进行发生变化;点击F11,会进行单步调试功能;第三步:界面有反汇编窗口、命令窗口、程序窗

11、口、存储器观察窗口、寄存器观察窗口等,根据需要来观测。点击“peripjerals”中的“I/O port”选择不同的输出端口,点击“Timer-time0”,弹出如下窗口:点击debug中的run,可以看到运行中的P1、P0的输出值以及Timer的工作状态P0与P1端口的波形:I对应的存储器里的指令:经检验,P1、P0端口以及Timer和存储器里面的指令逻辑上是符合的、一致的。4、 根据原理图在proteus上放置元件并进行仿真第一步:双击“ISIS”,打开Proteus工作页面;单击“文件”、“新建文件”,在弹出的选择模块窗口中选择DEFAULT模块,点击“确定”、“保存”,设置好保存路径

12、,在文件名中输入文件名,点击“保存”;第二步:点击左边的“P”,从元件库中选取所需的元件,放置好各元件,连线;设计好的电路图如下:第三步:右击单片机AT89C51,在“编辑元件”对话框中单击“Program File”右侧文本旁边的按钮,选取在Vision4.0产生的“JSMGPro.hex”,在“Clock frequency”输入“12MHz”,点击确定;9、 单击“调试”菜单的“执行”命令,如果有提示错误或警告,则要修改直至没有提示出错,系统进行仿真。仿真信息提示如下:5、 实验结果与分析通过单步跟踪调试程序,观察各个相关SFR、SRAM单元结果可知程序结果正确。6、 实验结论与心得1、

13、 本次实验使用Timer0工作在方式1,多次中断来实现2s的定时。其中每次触发中断时间为50ms,用一变量计算中断次数,则中断次数*50ms为持续时间。可以在时间到的时候,进行各种操作,比如进行判断,如本实验中进行判断是否包含1;也可以进行清零等操作;其中中断模块,可以作为一个比较标准的模块,稍加改动用于其他的实验中。 2、在proteul仿真图中,一开始的时候,由于元件参数值不对,导致并不能显示理想的结果。仔细检查代码逻辑与在烧录到板子上运行的结果,发现符合要求。那么肯定是proteul的问题。在本次实验中,和同学交流,发现需要在数码管位选信号的数码管的P极,串联一个电阻。而且阻值也有要求。同学的是2千欧电阻,我选的时候,2千欧是不行的,可能是其他元件参数设置不同。当我选择5千欧

温馨提示

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

评论

0/150

提交评论