单片机原理数码管动态显示实验单片机原理实验报告_第1页
单片机原理数码管动态显示实验单片机原理实验报告_第2页
单片机原理数码管动态显示实验单片机原理实验报告_第3页
单片机原理数码管动态显示实验单片机原理实验报告_第4页
单片机原理数码管动态显示实验单片机原理实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、宁德师范学院计算机系实验报告(20142015学年 第2学期)课程名称单片机原理实验名称数码管动态显示实验专业计算机科学与技术(非师范)年 级 2012 级学号B2012102147 姓名 王 秋指导教师杨烈君实验日期2015.4.17实验目的:1 .巩固Proteus软件和Keil软件的使用方法2 .学习端口输入输出的高级应用3 .掌握7段数码管的连接方式和动态显示法4 .掌握查表程序和延时等子程序的设计实验要求:1 .在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2 .在电路中增加八位 7段数码管(共阳/共阴自选),将P2 口作数据输出口与 7段数码管数据 引脚相

2、连,P3引脚输出位选控制信号3 .在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1-84 .实现指定数值的显示(可使用 缓存数值)5 . 实现类似时钟的效果,如“ 13-23-25 ” 13时23分25秒6 .实现时钟的自动计时7 .扩展要求:结合LED显示,实现带数码显示的交通灯实验设备(环境):1. .计算机2. Proteus ISIS 7 Professional应用程序3. Keil应用程序实验内容:数码管动态显示技术要求实现:1 .动态显示法,实现数码管分别显示数字1-8;2 .实现指定数值的显示(可使用 缓存数值)(33355223);3 .实现类似时钟的效果,

3、如“ 13-23-25 ” 13时23分25秒;4 .实现时钟的自动计时;扩展要求:结合LED显示,实现带数码显示的交通灯;实验步骤、实验结果及分析:1实验步骤:1、使用Proteus ISIS 7 Professional应用程序,建立一个 .DSN文件2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C5I CAR CAP-ELEC CRYSTAL RESPACK-83、构建仿真电路:连接图显示1-8显示 33355223显示时间13.23.25时钟自动计时连接图红绿灯效果图1红绿灯效果图24、创建一个 Keil应用程序:新建一个工程项目文件;为工程选择目标器

4、件(AT89C52);为工程项目创建源程序文件并输入程序代码;保存创建的源程序项目文件;把源程序文件添加到项目中。5、把用户程序经过编译后生成的HEX文件添加到仿真电路中的处理器中(编辑元件一文件路径)2实验程序 < 流程图>程序源代码:1.动态显示法,实现数码管分别显示数字1-8;#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Ledcode=0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/定义一个数组里面放入1-

5、8void delay(uint x) while(x-);)void main() uchar i; while(1) for(i=0;i<8;i+) P3=1<<i;/P3口表示从第一个位开始显示数值P2=Ledcodei; /P2口用来显示所需要显示的数值delay(500); ) ) )2 .实现指定数值的显示(可使用缓存数值) (33355223);#include<reg51.h>unsigned char code LedCode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40);unsi

6、gned char DispBuf8=3,3,3,5,5,2,2,3; /指定要显示的数的位置void delay(unsigned int x) while(x-);void main()unsigned int i;for(i=0;i<8;i+)P3=1<<i;P2=LedCodeDispBufi; / 显示指定数的位置 delay(500); 3 .实现类似时钟的效果,如“ 13-23-25 ” 13时23分25秒;#include<reg51.h>unsigned char code LedCode=0x3f,0x06,0x5b,0x4f,0x66,0x6

7、d,0x7d,0x07,0x7f,0x6f,0x40;unsigned char Hour=13,Min=23,Sec=25;unsigned char DispBuf8;void delay(unsigned int x)while(x-);void PutTime()DispBuf7=Sec%10; /取对应秒数的个位放在最右边显示DispBuf6=Sec/10; /取对应秒数的十位放在右起第二位显示DispBuf5=10; /此处表示秒跟分之间用横杆隔开DispBuf4=Min%10;DispBuf3=Min/10;DispBuf2=10;DispBuf1=Hour%10;DispBuf

8、0=Hour/10;void main()long n=0;while(1)unsigned char i;PutTime();for(i=0;i<8;i+)P3=1<<i;P2=LedCodeDispBufi;delay(500);4 .实现时钟的自动计时;#include<reg51.h>unsigned char code LedCode口=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;unsigned char Hour=13,Min=23,Sec=25;unsigned char DispB

9、uf8;void delay(unsigned int x)while(x-);void PutTime()DispBuf7=Sec%10;DispBuf6=Sec/10;DispBuf5=10;DispBuf4=Min%10;DispBuf3=Min/10;DispBuf2=10;DispBuf1=Hour%10;DispBuf0=Hour/10;void main()long n=0;while(1)unsigned char i,ms; /定义一个 ms用于控制秒数加一的延时PutTime();for(i=0;i<8;i+)P3=1<<i;P2=LedCodeDispB

10、ufi;delay(500);ms+; /控制加一的时延if(ms>=20)Sec+;ms=0;if(Sec>=60) /表示进位,当秒满六十则向分钟进一,同时秒数清零Min+;Sec=0;if(Min>=60)Hour+;Min=0;if(Hour>=24) /当小时数满24小时时,则小时数清零,完成计时Hour=0;5 .扩展要求:结合LED显示,实现带数码显示的交通灯;#include "reg52.h"# define uint unsigned int# define uchar unsigned char# define Disp_Nul

11、l 10uchar code LedCode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;uchar DispBuf8;sbit U=P2A0;sbit y1=P2A1;sbit g1=P2A2;sbit r2=P2A3;sbit y2=P2A4;sbit g2=P2A5;uchar sec1;sec2;comsec;void delay(uint x)while(x-);void PntTime()DispBuf3=sec2 % 10;DispBuf2=sec2 /10;DispBuf1=sec1 % 10;DispBuf0=

12、sec1 /10;void display。uchar i;for (i = 0;i < 8;i +)P3=0;P1=LedCode DispBufi;P3=1<<i;delay(100);void main ()while(1)uchar ms;PntTime();display。;ms+;if( ms >=60)ms=0;comsec=(comsec+1) % 60; 定义一个计数变量,使其一直保持在 60内 if( comsec <20) /comsec在 20 以内时 g2、r1 亮sec1=20-comsec; sec2=30-comsec;r1=1;y

13、1=0;g1=0;r2=0;y2=0;g2=1;if(comsec>=20 && comsec<30) /comsec 在 20 与 30 之间时 y2、r1 凫sec1=30-comsec; sec2=30-comsec;r1=1;y1=0;g1=0;r2=0;y2=1;g2=0;if(comsec>=30 && comsec<50) /g1、r2 在 comsec增力口 20 内亮sec1=60-comsec; sec2=50-comsec;r1=0;y1=0;g1=1;r2=1;y2=0;g2=0;)if(comsec>=50

14、)sec1=60-comsec; sec2=60-comsec;r1=0;y1=1;g1=0;r2=1;y2=0;g2=0;)过程总结:本实验是将单片机的 P2 口做为输出口,将四个数码管的七段引脚分别接到P2.0至P2.7.由于电路中采用共阳极的数码管,所以当P2端口相应的引脚为 0时,对应的数码管段点亮。程序中预设了数字0-9的段码。由于是让八个数码管显示不同的数值,所以要用扫描的方式来实现。因此可 定义扫描函数,接到单片机的P3 口。在实验中,预设的数字段码表存放在数组LedCode中,由于段码表是固定的,因此存储类型可设为code.在Proteus软件中按照要求画出电路,再利用 Keil软件按需要实现的功能编写 c程序, 生成Hex文件,把Hex文件导到Proteus软件中进行仿真。心得体会:实验数码管显示程序的编程方法1)先准备好要显示的数据,放入相应的显示存储单元中。2)根据要使用的数码管的具体位置来确定扫描初值和扫描方向。3)根据使用数码管的个数来确定扫描的位数。4)查表将要显示的数据转换为能使数

温馨提示

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

评论

0/150

提交评论