数码管实验报告.docx

上传人:牧羊曲112 文档编号:3111347 上传时间:2023-03-10 格式:DOCX 页数:8 大小:40.43KB
返回 下载 相关 举报
数码管实验报告.docx_第1页
第1页 / 共8页
数码管实验报告.docx_第2页
第2页 / 共8页
数码管实验报告.docx_第3页
第3页 / 共8页
数码管实验报告.docx_第4页
第4页 / 共8页
数码管实验报告.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数码管实验报告.docx》由会员分享,可在线阅读,更多相关《数码管实验报告.docx(8页珍藏版)》请在三一办公上搜索。

1、数码管实验报告 篇一:实验八 数码管led实验报告 苏州大学实验报告 院、系 年级专业 姓名 学号课程名称 成绩指导教师同组实验者实验日期 实验名称: 数码管led实验 一实验目的 理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管lg5641ah与mcu的接线图。 二实验内容 理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,mcu的排8段数码管显示mcu复位后的开始到现在的运行时间。由于只有四个数码管,所以只显示mcu运行到目前为止的分钟和秒,当计时达到一个小时,就重新从00:00开始计时。另外,也可以通过pc方的串口通信程序,指定计时

2、的开始值。三实验过程 原理图 图8-2数码管外形 dp a b c e f g dp 图8-1 数码管接线图 图8-3 mcu与4连排8段数码管的连接第1页 基本原理 8段数码管一般由8个发光二极管组成,每一个位段就是一个发光二极管。一个8段数码管分别由a、b、c、d、e、f、g位段,外加上一个小数点的位段h组成。根据公共端所接电平的高低,可分为共阳极和共阴极两种。有时数码管不需要小数点,只有7个位段,称7段数码管。共阴极8段数码管的信号端高电平有效,只要在各个位段上加上相应的信号即可使相应的位段发光,比如:要使a段发光,则在发光。 四编程 流程图 图8-4 数码管led显示流程图 所用寄存器

3、名称及其各个位 程序中没有使用与led显示相关的控制和状态寄存器,仅仅使用了通用i/o口a口和b口。 主要代码段 1第2页第3页 2c 第4页 第5页 篇二:数码管实验报告 单片机实验报告 一、实验名称 数码管动态扫描显示01234567 二、实验目的 掌握数码管显示数字的原理。 通过不同的编程实现灵活运用数码管。 三、实验原理 四、相关原理图 五、实验内容 数码管显示12345678 c程序: #include reg51.h #include intrins.h unsigned char data dis_digit; unsigned char code dis_code11= 0x2

4、8, 0x7e, 0xa2, 0x62, 0x74, 0x61, 0x21, 0x7a, 0x20, 0x60,0xff;/0,1,2,3,4,5,6,7,8,9,关显示,数码管码表 unsigned char data dis_buf8;/ 显示缓冲区 unsigned char data dis_index; char code sst5163 _at_ 0x003b; void main p0 = 0xff; p2 = 0xff; tmod = 0x01; th0 = 0xfc; tl0 = 0x17; ie = 0x82; dis_buf0 = dis_code0x1; dis_buf

5、1 = dis_code0x2; dis_buf2 = dis_code0x3; dis_buf3 = dis_code0x4; dis_buf4 = dis_code0x5; dis_buf5 = dis_code0x6; dis_buf6 = dis_code0x7; dis_buf7 = dis_code0x8; dis_digit = 0xfe; dis_index = 0; tr0 = 1; while(1); void timer0 interrupt 1 / 定时器0中断服务程序, 用于数码管的动态扫描 / dis_index - 显示索引, 用于标识当前显示的数码管和缓冲区的偏

6、移量 / dis_digit - 位选通值, 传送到p2口用于选通当前数码管的数值, 如等于0xfe时, / 选通p2.0口数码管 / dis_buf- 显于缓冲区基地址 th0 = 0xfc; tl0 = 0x17; p2 = 0xff;/ 先关闭所有数码管 p0 = dis_bufdis_index; / 显示代码传送到p0口 p2 = dis_digit;/ dis_digit = _crol_(dis_digit,1);/ 位选通值左移, 下次中断时选通下一位数码管 dis_index+;/ dis_index = 0x07; / 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫

7、描 汇编程序: code_seg segment code data_seg segment data rseg data_seg dis_digit: ds 1 dis_index: ds 1 dis_buf: ds 8 stack: ds 20 ;= cseg at 00000h ; reset向量 ljmp main cseg at 0000bh ; 定时器0中断向量 ljmp timer0 ;= rseg code_seg org0080h main: mov sp,#(stack-1); 初始化堆栈指针 movp0,#0ffh; 初始化i/o口 movp2,#0ffh movtmod

8、,#01h; 初始化timer0 movth0,#0fch movtl0,#017h movie,#082h mov dptr, #dis_code; 设定显示初值 mov a,#1 movc a,a+dptr movdis_buf,a mov a,#2 movc a,a+dptr movdis_buf+01h,a mov a,#3 movc a,a+dptr movdis_buf+02h,a mov a,#4 movc a,a+dptr movdis_buf+03h,amov a,#5 movc a,a+dptr movdis_buf+04h,a mov a,#6 movc a,a+dptr

9、 movdis_buf+05h,a mov a,#7 movc a,a+dptr movdis_buf+06h,a mov a,#8 movc a,a+dptr movdis_buf+07h,a movdis_digit,#0feh; 初始从第一个数码管开始扫描 movdis_index,a setb tr0 ; 启动定时器0,开始动态扫描显示 main_lp: ; 主程序循环,增加其它代码 sjmp main_lp ;= using 0 timer0: ; 定时器0中断服程序, 用于数码管的动态扫描 ; dis_index - 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 ; dis

10、_digit - 位选通值, 传送到p2口用于选通当前数码管的数值, 如等于0xfe时, ; 选通p2.0口数码管 ; dis_buf- 显于缓冲区基地址 push acc push psw push ar0 movth0,#0fch movtl0,#017h movp2,#0ffh ; 先关闭所有数码管 mova,#dis_buf ; 获得显示缓冲区基地址 adda,dis_index ; 获得偏移量 movr0,a; r0 = 基地址 + 偏移量 mova,r0; 获得显示代码 movp0,a; 显示代码传送到p0口 movp2,dis_digit ; mov a,dis_digit ;

11、位选通值左移, 下次中断时选通下一位数码管 rl a篇三:数码管动态显示实验报告 实验四 数码管动态显示实验一 一、实验要求 1. 在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2. 在电路中增加四个7段数码管(共阳/共阴自选),将p1口作数据输出口与7段数码管数据引脚相连 ,p2.0p2.3引脚输出选控制信号 3. 在keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4 二、实验目的 1. 2. 3. 4. 巩固proteus软件和keil软件的使用方法 学习端口输入输出的高级应用 掌握7段数码管的连接方式和动态显示法 掌握查表程序和延时等

12、子程序的设计 三实验说明 本实验是将单片机的p1口做为输出口,将四个数码管的七段引脚分别接到p1.0至p1.7。由于电路中采用共阳极的数码管,所以当p1端口相应的引脚为0时,对应的数码管段点亮。程序中预设了数字0-9的段码。由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。因此定义了scan函数,接到单片机的p2.0至p2.3 在实验中,预设的数字段码表存放在数组tab中,由于段码表是固定的,因此存储类型可设为code。 在proteus软件中按照要求画出电路,再利用keil软件按需要实现的功能编写c程序,生成hex文件,把hex文件导到proteus软件中进行仿真。为了能够更好的验

13、证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89c51的一个机器周期包含12个时钟脉冲,而我们采用的是12mhz晶振,每一个时钟脉冲的时间是1/12us,所以一个机器周期为1us。在keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。 四、硬件原理图及程序设计 硬件原理图设计 电路中p1.0到p1.7为数码管七段端口的控制口,排阻rp1阻值为220,p2.0到p2.3为数码管的扫描信号。at89c51单片机的9脚为复位引脚,当rst为高电平的时间达到2个机器周期时系统就会被复位;31引脚为存取外部存储器使能引脚,当ea为高电平是

14、使用单片机内部存储器,当ea为低电平时单片机则使用外部存储器。18、19引脚是接晶振脚。而接地和电源端在软件中已经接好,所以不用在引线。 如下图所示:流程图与程序设计程序设源代码 #include reg51.h /定义8051寄存器头文件 #define seg7p p1 /定义扫描信号的位置 #define scanp p2 /定义数码管的位置 char code tab10=0xc0, 0xf9, 0xa4, 0xb0, 0x99, /数字04的码值 0x92, 0x83, 0xf8, 0x80, 0x98 ; /数字59的码值 char disp4=1,2,3,4;/定义要显示的数值

15、void delay_ms(int x); /声明延时函数 char scan4=0xfe,0xfd,0xfb,0xf7; /定义扫描 char i,j; /定义变量i,j main /主函数的开始 while(1) /无限循环 for(i=0;i4;i+) /从 j=disp3-i; /取出显示的数值 scanp =scani; /扫描的顺序 seg7p =tabj; /将tab的数值赋给数码管delay_ms(4);/延时4ms void delay_ms(int x) int i,j; for (i=0;ix;i+) for (j=0;j120;j+); 五实验总结 问题一:运行电路时,

16、数码管乱码 解决的方法:检查电路,发现程序中扫描信号端口错误,将扫描信号的端口顺序调换,重新运行。 问题二:重新运行后,数码管只显示其中的一部分。 解决的方法:检查程序,发现是延时时间的问题,在改动延时时间后,重新编译后在次运行电路,电路正常显示,符合要求。 通过本次的实验,在前两个实验的基础上让我复习了知识点,也让我在次掌握了新的知识。在完成这次实验后,让我想到可以用多个按键控制多个数码管实现加减和暂停和开始。我觉得这次的课程实验让我知道,一次次的失败,并不会让我放弃去追求,相反它会引领着我去发现问题,从而解决问题,完成更深入的探索。也让我明白理论知识的重要性,并且与实际相结合,多动手,在实践中成长。所以我会很重视每一次的实验。我坚信:每次实验都会给我自身很大帮助。慢慢的积累点滴的知识,到最后就会多的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号