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

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

举报
开通vip

单片机数码管动态显示实验报告单片机数码管动态显示实验报告 单片机数码管动态显示实验程序(汇编) 单片机数码管动态显示实验程序 org 00h ajmp head org 0030h head: mov sp,#0070h num equ p0 ;p0口连接数码管 reset: mov dptr ,#tab mov r0,#4 sh: acall show_tab call dptr_add djnz r0,sh mov r0 ,#4 sjmp reset dptr_add: inc dptr inc d...

单片机数码管动态显示实验报告
单片机数码管动态显示实验报告 单片机数码管动态显示实验程序(汇编) 单片机数码管动态显示实验程序 org 00h ajmp head org 0030h head: mov sp,#0070h num equ p0 ;p0口连接数码管 reset: mov dptr ,#tab mov r0,#4 sh: acall show_tab call dptr_add djnz r0,sh mov r0 ,#4 sjmp reset dptr_add: inc dptr inc dptr inc dptr inc dptr ret tab : db 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H, 0A1H,86H,8EH ;;;;;;;;;;;;;;;;;;;;; 函数的功能是用来动态显示dptr上的四个数据 ;;;;;;;;;;;;;;;;;;;;;; show_tab: clr a mov r2,#0 mov r3,#148 mov p2,#238 loop: movc a,@a+dptr mov num ,a acall delay_5ms inc r2 mov a,r2;调用片选函数前注意A的变化acall select_mov cjne r2,#4,loop mov r2,#0 clr a djnz R3,loop ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; select_mov:;p2的初值238 push 0e0h mov a,p2 rl a mov p2,a pop 0e0h ret delay_5ms: mov r6,#5 signed_5ms: call delay_1ms djnz r6,signed_5ms ret 篇二:单片机动态数码显示设计实验报告 微机原理与接口技术 实验报告 实验题目:指导老师:班 级:计算机科学与技术系 姓 名:动态数码显示设计 2014年 12月3日 实验十三 动态数码显示设计 一、实验目的 1.掌握动态数码显示技术的设计方法。 2.掌握扫描在程序设计中的应用。 二、设计原理 如图13.1所示,在单片机的P1端口接动态数码管的字形码笔段,在单片机的P2端口接动态数码管的数位选择端。在单片机P3.0管脚处接一个开关,当开关连接高电平时,态数码管上显示“12345”字样;当开关连接低电平时,态数码管上显示“HELLO”字样。 三、参考电路 图13.1 动态数码显示电路原理图 四、电路硬件说明 (1)在“单片机系统”区域中,把单片机的P1.0,P1.7端口连接到“动态数码显示”区域中的a,h端口上。 (2)在“单片机系统”区域中,把单片机的P2.0,P2.7端口通过8联拨动拨码开关JP1连接到“动态数码显示”区域中的S1,S8端口上。 (3)在“单片机系统”区域中,把单片机的P3.0端口通过8联拨动拨码开关JP2连接到拨动开关区域中的SW1端口上。 五、程序设计内容 (1)动态扫描方法: 动态接口采用各数码管循环轮流显示的方法,当循环显示频率 较高时,利用人眼的暂留特性,看不出显示的闪烁现象,这种显 示需要一个接口完成字形码的输出(字形选择),另一接口完成各 数码管的轮流点亮(数位选择)。 (2)在进行数码显示的时候,要对显示单元开辟8个显示缓冲 区,在每个显示缓冲区装有显示的不同数据即可。 (3)对于显示不同字形码的数据采用查表方法来完成。 六、程序流程图 (如图13.2所示 ) 图13.2 动态数码显示程序流程图 七、汇编源程序 START: PANDUAN: SW: Q1: XIANSHI: NEXT: ;;;;;;;;;;入口地址;;;;;;;;;;ORG 0000HLJMPSTARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI ;;;;;;;;;;主程序入口;;;;;;;;;;ORG 0100H LCALLPANDUANLCALLXIANSHILJMPSTART ;;;;;;;;;;判断开关的状 态;;;;;;;;;;JB P3.0,SWLCALLDELAY10MSJB P3.0,SWMOV DPTR,#TABLE2SJMPQ1JNB P3.0,PANDUANMOV DPTR,#TABLE1RET ;;;;;;;;;;显示程序;;;;;;;;;;MOV R0,#00HMOV R1,#7FHMOV A,R0MOVCA,@A+DPTRMOV P0,AMOV A,R1MOV P2,ALCALLDELAYINC R0RR AMOV R1,ACJNER1,#0FBH,NEXT DELAY10MS: D1:DELAY: LOOP:TABLE1: TABLE2:RET ;;;;;;;;;;10ms 延时程序;;;;;;;;;; MOV R6,#20 MOV R7,#248 DJNZR7,$ DJNZR6,D1 RET ;;;;;;;;;;200ms延时程序;;;;;;;;;; MOV R5,#20 LCALLDELAY10MS DJNZR5,LOOP RET ;;;;;;;;;;共阴字母 码表;;;;;;;;;; DB 76H,79H,38H,38H,3FH ;;;;;;;;;;共阴数码表;;;;;;;;;;; DB 06H,5BH,4FH,66H,6DH ;;;;;;;;;;结束标志;;;;;;;;;;;;; END 八、C语言源程序 #includeAT89X51.H unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d}; unsigned char code table2[]={0x76,0x79,0x38,0x38,0x3f}; void main(void) { unsigned char i,j,k,m; while(1) { j=0x7f; for(i=0;i5;i++) //运行5次取出表中的5个数//{ if(P3_0==0)//如 果开关为0,则显示12345// { P0=table1[i]; }//送P1口显示// else //如果开关为1,显示HELLO// { P0=table2[i]; }//送P1口显示 // P2=j; //显示码送入P2口// j=0x7f; //重赋初值// k=j(i+1);//右移i+1位// m=j(7-i);//左移7-i位// j=k|m; for(k=4;k0;k--) //每隔一段时间显示一次// for(m=248;m0;m--); } } } 篇三:数码管实验报告 篇一:实验八 数码管led实验报告 苏州大学实验报告 院、系 年级专业 姓名 学号课程名称 成绩指导教师同组实验者实验日期 实验名称: 数码管led实验 一(实验目的 理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管lg5641ah与mcu的接线图。 二(实验内容 理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,mcu的排8段数码管显示mcu复位后的开始到现在的运行时间。由于只有四个数码管,所以只显示mcu运行到 目前为止的分钟和秒,当计时达到一个小时,就重新从00:00开始计时。另外,也可以通过pc方的串口通信程序,指定计时的开始值。三(实验过程 (一)原理图 图8-2数码管外形 dp a b c e f g dp 图8-1 数码管(二)接线图 图8-3 mcu与4连排8段数码管的连接第1页 (三)基本原理 8段数码管一般由8个发光二极管(llight-emitting diode,led)组成,每一个位段就是一个发光二极管。一个8段数码管分别由a、b、c、d、e、f、g位段,外加上一个小数点的位段h(或记为dp)组成。根据公共端所接电平的高低,可分为共阳极和共阴极两种。有时数码管不需要小数点,只有7个位段,称7段数码管。共阴极8段数 码管的信号端高电平有效,只要在各个位段上加上相应的信号即可使相应的位段发光,比如:要使a段发光,则在发光。 四(编程 (一)流程图 图8-4 数码管led显示流程图(及其中断子程序) (二)所用寄存器名称及其各个位 程序中没有使用与led显示相关的控制和状态寄存器,仅仅使 用了通用i/o口a口和b口。 (三)主要代码段 1第2页第3页 2(c 第4页 第5页 篇二:数码管实验报告 单片机实验报告 一、实验名称 数码管动态扫描显示01234567(实验五) 二、实验目的 (1)掌握数码管显示数字的原理。 (2)通过不同的编程实现灵活运用数码管。 三、实验原理 四、相关原理图 五、实验内容 数码管显示12345678 c程序: #include reg51.h #include intrins.h unsigned char data dis_digit; unsigned char code dis_code[11]={ 0x28, 0x7e, 0xa2, 0x62, 0x74, 0x61, 0x21, 0x7a, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表 unsigned char data dis_buf[8];// 显示缓冲区 unsigned char data dis_index; char code sst516[3] _at_ 0x003b; void main() { p0 = 0xff; p2 = 0xff; tmod = 0x01; th0 = 0xfc; tl0 = 0x17; ie = 0x82; dis_buf[0] = dis_code[0x1]; dis_buf[1] = dis_code[0x2]; dis_buf[2] = dis_code[0x3]; dis_buf[3] = dis_code[0x4]; dis_buf[4] = dis_code[0x5]; dis_buf[5] = dis_code[0x6]; dis_buf[6] = dis_code[0x7]; dis_buf[7] = dis_code[0x8]; dis_digit = 0xfe; dis_index = 0; tr0 = 1; while(1);} void timer0() interrupt 1 // 定时器0中断服务程序, 用于数码管的动态扫描 // dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 // dis_digit --- 位选通值, 传送到p2口用于选通当前数码管的数值, 如等于0xfe时, // 选通p2.0口数码管 // dis_buf--- 显于缓冲区基地址 { th0 = 0xfc; tl0 = 0x17; p2 = 0xff;// 先关闭所有数码管 p0 = dis_buf[dis_index]; // 显示代码传送到p0口 p2 = dis_digit;// dis_digit = _crol_(dis_digit,1);// 位选通值左移, 下次中断时选通下一位数码管 dis_index++;// dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 }汇编程序: 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,#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 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_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 ; 位选通值左移, 下次中断时选通下一位数码管 rl a篇三:数码管动态显示实验报告 实验四 数码管动态显示实验一 一、实验要求 1. 在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2. 在电路中增加四个7段数码管(共阳/共阴自选),将p1口作数据输出口与7段数码管数据引脚相连 ,p2.0~p2.3引脚输出选控制信号 3. 在keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4 二、实验目的 1. 2. 3. 4. 巩固proteus软件和keil软件的使用方法 学习端口输入输出的高级应用 掌握7段数码 管的连接方式和动态显示法 掌握查表程序和延时等子程序的设计 三(实验说明 本实验是将单片机的p1口做为输出口,将四个数码管的七段引脚分别接到p1.0至p1.7。由于电路中采用共阳极的数码管,所以当p1端口相应的引脚为0时,对应的数码管段点亮。程序中预设了数字0-9的段码。由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。因此定义了scan函数,接到单片机的p2.0至p2.3 在实验中,预设的数字段码表存放在数组tab中,由于段码表是固定的,因此存储类型可设为code。 在proteus软件中按照要求画出电路,再利用keil软件按需要实现的功能编写c程序,生成hex文件,把hex文件导到proteus软件中进行仿真。为了能够更好的验证实验要求,在编写程序时需要延时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)为复位引脚,当rst为高电平的时间达到2个机器周期时系统就会被复位;31引脚(ea)为存取外部存储器使能引脚,当ea为高电平是使用单片机内部存储器,当ea为低电平时单片机则使用外部存储器。18、19引脚是接晶振脚。而接地和电源端在软件中已经接好,所以不用在引线。 如下图所示:(二)流程图与程序设计(三)程序设源代码 #include reg51.h //定义8051寄存器头文件 #define seg7p p1 //定义扫描信号的位置 #define scanp p2 //定义数码管的位置 char code tab[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0~4的码值 0x92, 0x83, 0xf8, 0x80, 0x98 }; //数字5~9的码值 char disp[4]={1,2,3,4};//定义要显示的数值 void delay_ms(int x); //声明延时函数 char scan[4]={0xfe,0xfd,0xfb,0xf7}; //定义扫描 char i,j; //定义变量i,j main() //主函数的开始 { while(1) //无限循环 {for(i=0;i4;i++) //从 {j=disp[3-i]; //取出显示的数值 scanp =scan[i]; //扫描的顺序 seg7p =tab[j]; //将tab的数值赋给数码管delay_ms(4);//延时 4ms } } } void delay_ms(int x) { int i,j; for (i=0;ix;i++) for (j=0;j120;j++); }
本文档为【单片机数码管动态显示实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769254
暂无简介~
格式:doc
大小:35KB
软件:Word
页数:16
分类:生活休闲
上传时间:2017-10-20
浏览量:1194