首页 单片机原理 数码管动态显示实验-单片机原理-实验报告

单片机原理 数码管动态显示实验-单片机原理-实验报告

举报
开通vip

单片机原理 数码管动态显示实验-单片机原理-实验报告单片机原理 数码管动态显示实验-单片机原理-实验报告 宁德师范学院计算机系 实验报告 (2014—2015学年 第 2学期) 课程名称 单片机原理 实验名称 数码管动态显示实验 专 业计算机科学与技术(非师范) 年 级 2012级 学号 B2012102147 姓名 王 秋 指导教师 杨烈君 实验日期 2015.4.17 实验目的: 1. 巩固Proteus软件和Keil软件的使用方法 2. 学习端口输入输出的高级应用 3. 掌握7段数码管的连接方式和动态显示法 4. 掌握查表程序和延时等子程序...

单片机原理 数码管动态显示实验-单片机原理-实验报告
单片机原理 数码管动态显示实验-单片机原理-实验报告 宁德师范学院计算机系 实验报告 (2014—2015学年 第 2学期) 课程名称 单片机原理 实验名称 数码管动态显示实验 专 业计算机科学与技术(非师范) 年 级 2012级 学号 B2012102147 姓名 王 秋 指导教师 杨烈君 实验日期 2015.4.17 实验目的: 1. 巩固Proteus软件和Keil软件的使用方法 2. 学习端口输入输出的高级应用 3. 掌握7段数码管的连接方式和动态显示法 4. 掌握查 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 程序和延时等子程序的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 实验要求: 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<=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< 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< 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 DispBuf[8]; void delay(unsigned int x) { while(x--); } void PutTime() { DispBuf[7]=Sec%10; //取对应秒数的个位放在最右边显示 DispBuf[6]=Sec/10; //取对应秒数的十位放在右起第二位显示 DispBuf[5]=10; //此处表示秒跟分之间用横杆隔开 DispBuf[4]=Min%10; DispBuf[3]=Min/10; DispBuf[2]=10; DispBuf[1]=Hour%10; DispBuf[0]=Hour/10; } void main() { long n=0; while(1) { unsigned char i; PutTime(); for(i=0;i<8;i++) { P3=1< 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 DispBuf[8]; void delay(unsigned int x) { while(x--); } void PutTime() { DispBuf[7]=Sec%10; DispBuf[6]=Sec/10; DispBuf[5]=10; DispBuf[4]=Min%10; DispBuf[3]=Min/10; DispBuf[2]=10; DispBuf[1]=Hour%10; DispBuf[0]=Hour/10; } void main() { long n=0; while(1) { unsigned char i,ms; //定义一个ms用于控制秒数加一的延时 PutTime(); for(i=0;i<8;i++) { P3=1<=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_Null 10 uchar code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x40}; uchar DispBuf[8]; sbit r1=P2^0;sbit y1=P2^1;sbit g1=P2^2; sbit r2=P2^3;sbit y2=P2^4;sbit g2=P2^5; uchar sec1;sec2;comsec; void delay(uint x) { while(x--); } void PntTime( ) { DispBuf[3]=sec2 % 10; DispBuf[2]=sec2 / 10; DispBuf[1]=sec1 % 10; DispBuf[0]=sec1 / 10; } void display() { uchar i; for (i = 0;i < 8;i ++) { P3=0; P1=~LedCode[ DispBuf[i] ]; P3=1<=60){ ms=0; comsec=(comsec+1) % 60; //定义一个计数变量,使其一直保持在60内 } if( comsec <20){ //comsec在20以内时g2、r1亮 sec1=20-comsec; sec2=30-comsec; r1=1;y1=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){ 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)查表将要显示的数据转换为能使数码管正确显示相对应的段码。 5)分时送段码和位码,数码管开始循环显示。 指导教师评语: 1、完成所有规定的实验内容,实验步骤正确,结果正确; 2、完成绝大部分规定的实验内容,实验步骤正确,结果正确; 3、完成大部分规定的实验内容,实验步骤正确,结果正确; 评定等级:A(优秀) B(良好) C(中等) D(及格) E(不及格) 成绩评定 教师签字 年 月 日 备注: 注:1、报告内的项目或设置,可根据实际情况加以补充和调整 2、教师批改学生实验报告应在学生提交实验报告10日内
本文档为【单片机原理 数码管动态显示实验-单片机原理-实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_196623
暂无简介~
格式:doc
大小:119KB
软件:Word
页数:15
分类:
上传时间:2017-10-17
浏览量:357