单片机原理 数码管动态显示实验-单片机原理-实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理数码管动态显示实验-单片机原理-实验报告宁德师范学院计算机系
实验报告
(2014—2015学年第 2学期)
课程名称单片机原理实验名称数码管动态显示实验专业计算机科学与技
术(非师范)
年级 2012级学号 B2012102147 姓名王秋指导教师杨烈君实验日期2015.4.17
实验目的:
1. 巩固Proteus软件和Keil软件的使用方法
2. 学习端口输入输出的高级应用
3. 掌握7段数码管的连接方式和动态显示法
4. 掌握查表程序和延时等子程序的设计
实验要求:
1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路
2. 在电路中增加八位7段数码管(共阳/共阴自选),将P2口作数据输出口与7段数码管数据引
脚相连,P3引脚输出位选控制信号
3. 在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1-8
4. 实现指定数值的显示 (可使用缓存数值)
5. 实现类似时钟的效果,如“ 13-23-25” 13时23分25秒
6. 实现时钟的自动计时
7. 扩展要求: 结合LED显示,实现带数码显示的交通灯
实验设备(环境):
1(计算机
2(Proteus ISIS 7 Professional应用程序
3(Keil应用程序
实验内容:
数码管动态显示技术要求实现:
1(动态显示法,实现数码管分别显示数字1-8;
2(实现指定数值的显示 (可使用缓存数值) (33355223);
3(实现类似时钟的效果,如“ 13-23-25” 13时23分25秒;
4(实现时钟的自动计时;
扩展要求: 结合LED显示,实现带数码显示的交通灯;
实验步骤、实验结果及分析:
1 实验步骤:
1、使用Proteus ISIS 7 Professional应用程序,建立一个.DSN文件
2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51、CAP、CAP-ELEC、
CRYSTAL、RESPACK-8。
3、构建仿真电路:
连接图
显示1-8
显示33355223
显示时间13.23.25
时钟自动计时
连接图
红绿灯效果图1
红绿灯效果图2
4、创建一个Keil应用程序:新建一个工程项目文件;为工程选择目标器件(AT89C52);为工程项目创建源程序文件并输入程序代码;保存创建的源程序项目文件;把源程序文件添加到项目中。
5、把用户程序经过编译后生成的HEX文件添加到仿真电路中的处理器中(编辑元件?文件路径) 2 实验程序 <流程图> 开始
定义数组开始Ledcode[]开始
定义数组定义数组定义数组 Dispbug[]Ledcode[]Ledcode[]存放指定数While定义Dispbug[]While(1)存放指定数(1)YYFor定义子函数
ForN(i=0;i<8(i=0;i<8PutTime())),...,调用延YY时函数
P3=1< For调用延时N调用延时(i=0;i 开始 P3=1< 调用延时定义Dispbug[]函数存放指定数 If(ms>=60)定义子函数 YPutTime()comsec=(com,...,sec+1) % 60;,ms=0While(1)If(comsec <20) YY Sec1=20-comsec;PutTime()Sec2=30-comsec;R1=1;y1=0;g1=0;r2=0;y2=0;g2=1; YForIf(comsec>=20 (i=0;i<8)&& comsec<30)sec1=60-comsec;sec1=30-comsec;Sec2=60-comsec;Sec2=30- comsec;R1=0;y1=1;g1=0;R1=1;y1=0;g1=0;r2=1;y2=0;g2=0;r2=0;y2=1;g2=0; Y If(comsec>=30 If(Comsec>60)&& comsec<50) sec1=60-comsec;YSec2=50-comsec;R1=0;y1=0;g1=1;r2=1;y2=0;g2=0; 程序源代码: 1(动态显示法,实现数码管分别显示数字1-8; #include #define uchar unsigned char #define uint unsigned int uchar code Ledcode[]={ 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义一个数组里面放入1-8 void delay(uint x) { while(x--); } void main() { uchar i; while(1) { for(i=0;i<8;i++) { P3=1< P2=~Ledcode[i]; //P2口用来显示所需要显示的数值 delay(500); } } } 2. 实现指定数值的显示 (可使用缓存数值) (33355223); #include unsigned char code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40 }; unsigned char DispBuf[8]={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< P2=~LedCode[DispBuf[i]]; //显示指定数的位置