中断控制数码管显示程序解释
- 格式:ppt
- 大小:161.00 KB
- 文档页数:17
实验报告课程名称嵌入式系统编程实践实验仪器清华同方辰源嵌入式系统实验箱实验名称实验四:数码管显示实验系别__计算机学院_专业 _班级/学号学生姓名实验日期 2013年10月11日成绩___________________指导教师实验四:数码管显示实验一、实验问题回答(1)如何设置功能3,4中的循环速度?答:利用系统SysTick Handler中断,控制循环速度void SysTick_Handler (void){Event = 1;}(2)若是想实现类似实验(三)通过键盘动态控制循环速度,考虑一下应该如何设计?答:SysTickPeriodSet(SysCtlClockGet() / X)//设置x的大小就可以控制循环的速度。
void Reset_Counter_Speed(int x){SysTickIntDisable();SysTickDisable();SysTickPeriodSet(SysCtlClockGet() / x);// 设置x,控制计数频率,值与频率成正比SysTickEnable();SysTickIntEnable();},达到预期的效果。
二、实验目的和效果(效果即是否达到实验目的,达到的程度如何)学习、了解和掌握数码管工作原理和使用方法实验结果及检查(1)默认在在OLED屏幕上分行显示自己的学号、姓名、项目序号、时间,如“2010011001”、“zhangsan”、“work4”、“2012-11-”(2)首先在屏幕上显示四个功能选单,通过键盘A-F键选择不同功能,选择后屏幕显示相关功能提示,接受键盘输入的数字键0-9并在数码管上显示。
如:开始显示:“please choose the function:”“A: …”“B: …”“C: …”“D: …”按下“A”键后,显示”now you choose function A”(3)按下键盘后,根据不同功能在数码管上显示按键字符。
硬件电路参考如下:程序参考如下:#pragma sfr#pragma interrupt INTP0 LED_INTP0 /* 定义使用INTP0中断,中断函数名LED_INTP0*/ #pragma di /*禁止使用中断功能声明*/#pragma ei /*允许使用中断功能声明*//*数码管编码数组*/unsigned char LED_light[10]={0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x3F}; unsigned char j=0; /*按键次数变量*/void hdinit() /*硬件初始化*/{PM1=0; /*P1口输出数码管字型码,所以设置为输出*/PU1=0XFF; /*由于P1口直接驱动数码管显示,为增大驱动,设置为内部上拉*/PM12.0=0; /*P12.0口线要作为中断多功能,设置为输出和内部上拉 */PU12.0=1;PIF0=0; /*中断请求标志,没有中断请求*/PMK0=0; /*中断屏蔽标志,允许中断*/PPR0=1; /*中断优先级,低优先级*/EGP.0=1; /*与EGN组合,上升沿有效*/EGN.0=0;}void main (void){DI(); /*首先做准备,禁止中断*/IMS=0XCC;IXS=0X00;hdinit();EI(); /*准备完成,允许中断*/while(1){ /*啥也不干,就等待中断,仅是在这个实验中使用中断,实际不是这样/*}}__interrupt void LED_INTP0() /*中断函数*/{ P1= LED_light[j]; /*P1赋值,数码管显示相应数值*/j++; /*按键次数加一*/if(j==10) /*如果按键次数达到十次,按键计数归0*/{j=0;} }思考: 如果用两位数码管,从0—99循环计数又该怎样设计硬件和软件呢?。
单⽚机实验报告——LED数码管显⽰实验(此⽂档为word格式,下载后您可任意编辑修改!)《微机实验》报告LED数码管显⽰实验指导教师:专业班级:姓名:学号:联系⽅式:⼀、任务要求实验⽬的:理解LED七段数码管的显⽰控制原理,掌握数码管与MCU的接⼝技术,能够编写数码管显⽰驱动程序;熟悉接⼝程序调试⽅法。
实验内容:利⽤C8051F310单⽚机控制数码管显⽰器基本要求:利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
提⾼要求:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:yyyy (年份)mm.dd(⽉份.⽇).asm;Description: 利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
;Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000H ;复位⼊⼝AJMP MAINORG 000BH ;定时器0中断⼊⼝AJMP TIME0MAIN: ACALL Init_Device ;初始化配置MOV P0,#00H ;位选中第⼀个数码管MOV R0,#00H ;偏移指针初值CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#06HMOV TL0,#0C6H ;赋初值,定时1sLOOP: MOV A,R0ADD A,#0BH ;加偏移量MOVC +PC ;查表取,段码MOV P1,A ;段码给P1显⽰SETB TR0 ;开定时LOOP1: JNB PSW.1,LOOP1 ;等待中断CLR PSW.1INC R0 ;偏移指针加⼀CJNE R0,#0AH,LOOP3MOV R0,#00H ;偏移指针满10清零AJMP LOOP ;返回DB 0FCH,60H,0DAH,0F2H,66H ;段码数据表:0、1、2、3、4 DB 0B6H,0BEH,0E0H,0FEH,0F6H; 5、6、7、8、9 ;***************************************************************** ; 定时器0中断;***************************************************************** TIME0: SETB PSW.1 ;标志位置⼀MOV TH0,#06H ;定时器重新赋值MOV TL0,#0C6HLOOP3: CLR TR0 ;关定时RETI;***************************************************************** ;初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 -Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 -Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend提⾼部分:;*********************************************************;Filename: shumaguan2.asm;Description:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:; 2012 (年份); 12.07(⽉份.⽇); 12.34(⼩时.分钟);Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000HAJMP MAINORG 000BHAJMP TIME0MAIN: ACALL Init_DeviceMOV R0,#00H ;⽤于位选MOV R1,#00H ;⽤于段选MOV R2,#22H ;置偏移量,⽤于控制模式MOV R4,#8MOV R5,#250CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#0FFHMOV TL0,#0C0H ;定时器赋初值1msBACK: MOV P0,R0 ;位选MOV A,R0ADD A,#40H ;选下⼀位MOV R0,AMOV A,R1ADD A,R2 ;加偏移量MOVC +PC ;查表取段码MOV P1,A ;段码给P1显⽰LOOP: SETB TR0 ;开定时HERE: JNB PSW.1,HERE ;等待中断CLR PSW.1DJNZ R5,BACKMOV R5,#250DJNZ R4,BACKMOV R4,#8 ;循环2000次(2s)MOV A,R2ADD A,#04H ;偏移量加04H,到下⼀模式段码初值地址 MOV R2,ACJNE R2,#2EH,LOOP2MOV R2,#22H ;加三次后偏移量回到初值LOOP2: AJMP BACK ;返回进⼊下⼀模式;段码数据表:DB 0DAH,60H,0FCH,0DAH ; 2102DB 0E0H,0FCH,61H,60H ; 701. 1DB 66H,0F2H,0DBH,60H ; 432. 1;*****************************************************************; 定时器0中断;***************************************************************** TIME0: MOV TH0,#0FFH MOV TL0,#0C0HCLR TR0SETB PSW.1INC R1 ;偏移指针加⼀CJNE R1,#04H,LOOPMOV R1,#00H ;偏移指针满04H清零RETI;***************************************************************** ; 初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital; P0.1 - Unassigned, Open-Drain, Digital; P0.2 - Unassigned, Open-Drain, Digital; P0.3 - Unassigned, Open-Drain, Digital; P0.4 - Unassigned, Open-Drain, Digital; P0.5 - Unassigned, Open-Drain, Digital; P0.6 - Unassigned, Open-Drain, Digital; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital; P1.1 - Unassigned, Open-Drain, Digital; P1.2 - Unassigned, Open-Drain, Digital; P1.3 - Unassigned, Open-Drain, Digital; P1.4 - Unassigned, Open-Drain, Digital; P1.5 - Unassigned, Open-Drain, Digital; P1.6 - Unassigned, Open-Drain, Digital; P1.7 - Unassigned, Open-Drain, Digital; P2.0 - Unassigned, Open-Drain, Digital; P2.1 - Unassigned, Open-Drain, Digital; P2.2 - Unassigned, Open-Drain, Digital; P2.3 - Unassigned, Open-Drain, Digitalmov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend六、程序测试⽅法与结果、软件性能分析软件调试总体截图:基础部分:软件运⾏时,我们发现P0端⼝为00H,P1端⼝以依次为FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H。
一程序功能与使用说明1 功能在主持人的控制下完成抢答的功能。
首先判断是否有人在未开始时就提前抢答了,这是就说明有人犯规了,于是,数码管显示违规选手号码,红灯亮,扬声器报警。
在主持人允许开始后就按下开始键,绿灯亮,可以抢答,否则违规。
在这里是用中断来控制抢答的,给一中断脉冲就显示绿灯,说明已经开始了。
在开始的前提下,选手可以抢答了,抢答成功者数码管显示该选手号码,黄灯亮,扬声器鸣叫。
2 使用说明(1)在主持人侧,设置抢答指示电路和启动/复位开关。
有中断来控制开始,用绿灯来指示开始。
(2)选手侧各设置1个抢答按钮,用逻辑开关K代表竞赛抢答按钮,使用实验仪的逻辑电平开关K0-K3来代表4个抢答按钮,当开关向上拨时表示按下按钮。
(3)用数码管显示选手号码,用哪个可编程并行接口芯片8255A控制数码管的显示和扬声器的发声控制。
给脉冲就说明允许开始,同时绿灯亮。
以后就可以抢答了,抢答成功者数码管显示该选手号码,黄灯亮,扬声器鸣叫。
如果未开始就抢答说明违规,于是数码管显示违规选手号码,红灯亮,扬声器报警。
(4)主持人用按键来控制是开始下一轮比赛,还是结束。
如果按键式空格就说明开始下一轮,否则就说明比赛结束。
二设计原理和思路1设计的原理用逻辑开关K代表竞赛抢答器按钮,用数码管显示选手号码。
用可编程并行接口芯片8255A控制数码管的显示和扬声器的发声控制。
用8259A处理比赛开始。
(1)8259A是一种可编程中断控制器,它的主要任务是辅助处理器对可屏蔽中断进行优先权管理。
中断控制部分可以接收外界的8个中断请求,对应引脚IR0-IR7.当IR引脚中断请求有效时,8259A的优先权电路经过判断当前最高优先权的的中断请求,通过本身的中断请求信号INT使处理器的可屏蔽中断请求引脚INTR有效,向处理器提出可屏蔽中断请求。
处理器在条件满足时进入中断响应周期,使中断响应信号INTA有效,读取8259A提供的中断向量号。
(2)8255A内部分成与外设连接部分和与处理器接口部分。
实验四数码管显示控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握LED数码管显示接口技术;3、理解单片机定时器、中断技术。
二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。
图4.1共阴四位八段LED数码管的原理图图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。
实验开发板中LED数码管模块的电路原理图,如图4.2所示。
SP1a~hP0.4~P0.7SP2P0.0~P0.3图4.2 LED数码管模块电路原理图图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。
当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。
训练内容一:轮流点亮数码管来检测数码管是否正常。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110B;数码管“位选信号”初值,低电平有效LOOP:SETB P1.1;数码管位控制锁存器有效MOV P0,ACLR P1.1RL A ;形成新的“位选信号”,为选择下一位数码管做准备SETB P1.0;数码管段控制锁存器有效MOV P0,#0FFH ;数码管的所有段点亮,显示“8”CLR P1.0CALL DELAYSJMP LOOPDELAY:MOV R5,#0;延时子程序D1: MOV R6,#0D2:NOPDJNZ R6,D2DJNZ R5,D1RETEND训练内容二:静态显示,0~9计数。
共阳共阴LED数码管引脚图管脚接口共阳共阴LED数码管引脚图管脚接口常见的数码管由七个条状和一个点状发光二极管管芯制成,叫七段数码管如下图所示,根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。
根据管脚资料,您可以判断使用的是何总接口类型.<LED数码管引脚图>LED数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。
在一定范围内,其正向电流与发光亮度成正比。
由于常规的数码管起辉电流只有1~2 mA,最大极限电流也只有10~30 mA,所以它的输入端在5 V电源或高于TTL 高电平(3.5 V)的电路信号相接时,一定要串加限流电阻,以免损坏器件。
数码管使用的电流与电压电流:静态时,推荐使用10-15mA;动态时,16/1动态扫描时,平均电流为4-5mA,峰值电流50-60mA。
电压:查引脚排布图,看一下每段的芯片数量是多少?当红色时,使用1.9V乘以每段的芯片串联的个数;当绿色时,使用2.1V乘以每段的芯片串联的个数。
怎样测量数码管引脚,分共阴和共阳?找公共共阴和公共共阳首先,我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻, VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED (一般是8个),那它就是共阴的了。
5.2.1数码显示原理1.LED显示器的结构与原理LED数码显示器是由若干个发光二极管组成的,当发光二极管导通时,相应的点或线段发光,将这些二极管排成一定图形,控制不同组合的二极管导通,就可以显示出不同韵字形。
单片机应用系统中常用的LED显示器为七段显示器,再加上有一个小数点,因此也可把它称为八段显示器。
结构形式有共阴极和共阳极两种,它的结构图如图5.11所示。
共阴极是把所有发光二极管的阴极连起来,通常接地,通过控制每一只发光二极管的阳极电平来使其发光或熄灭,阳极为高电平发光,为低电平熄灭;共阳极是把所有发光二极管的阳极连起来,通常为高电平(如+5V),通过控制每一只发光二极管的阴极电平来使其发光或熄灭,阴极为低电平发光,为高电平熄灭。
实验三:利用8259A中断实现LED灯和数码管显示实验安全0901 王宇航 09283020实验报告1.实验目的:了解8259中断控制器的基本使用,掌握中断程序编程技术。
同时使同学掌握中断和其它接口芯片配合来完成某一特定任务的方法。
2.实验步骤:8254A的OUT1输出接到8259A的MIR5上,每秒产生一次中断信号向8259A发出中断请求,在中断程序里将连接在8255A口的LED灯按照中断次数二进制点亮(即中断一次L0亮,中断两次L1亮,中断三次L1L0亮,中断四次L2亮……)。
同时在数码管低位上显示中断次数。
满10次后停止。
1.8254A在主程序中初始化。
CLK0工作在方式3,则控制字为00110110B,计数常数设为1000;CLK1工作在方式3,则控制字为01110110B,计数常数设为1000,则OUT1输出为1HZ 的方波。
2.8255A在使用前需要在主程序中初始化。
A口方式0输出,B口方式0输入,则控制字为10000011B。
3.8259A不用初始化,但在程序中需要包含以下几个部分:(1)8259A的MIR5对应的中断向量号为35H,需用此来设置中断入口地址。
(2)设置中断入口地址之后,需设置中断屏蔽字OCW1,使IR5请求被允许,其他请求被禁止。
(3)中断服务程序结束之前写OCW2,送中断结束命令EOI。
4.中断服务程序的主要功能是LED指示灯和数码管显示。
图3-1 实验连线图注意:实验系统的主8259A的片选信号为20H。
3.实验代码:.Model small.386DATA SEGMENTDATA0 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;分别对应字符0-9 COUNT DB 10 ;计数值为10DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX ;DS装入段基址LEA SI,DA TA0 ;取操作数DA TA0的16位偏移地址送到寄存器SI中 ;8254初始化MOV DX,203H ;8254命令口MOV AL,00110110B ;控制字--0通道、方式3(方波发生器)、二进制计数 OUT DX,AL ;将控制字写入命令口MOV DX,200H ;0通道的数据口MOV AX,1000 ;计数常数=1000OUT DX,AL ;先写入低字节MOV AL,AHOUT DX,AL ;再写入高字节MOV DX,203H ;8254命令口MOV AL,01110110B ;控制字1通道、方式3(方波发生器)、二进制计数 OUT DX,ALMOV DX,201H ;1通道的数据口MOV AX,1000 ;计数常数=1000OUT DX,ALMOV AL,AHOUT DX,AL ;8255初始化MOV DX,213H ;8255命令口MOV AL,10000011B ;8255控制字--A口方式0输出,B口方式0输入OUT DX,AL ;将控制字写入命令口;中断入口地址设置(用串指令)CLI ;关中断MOV AX,0MOV ES,AX ;置附件段基地址为0MOV DI,4*35H ;置附件段偏移地址到DIMOV AX,OFFSET INT_35 ;置中断程序首地址的偏移量到AXCLDSTOSW ;填首地址的偏移量到中断地址表MOV AX,SEG INT_35 ;置中断程序的段基地址到AXSTOSW ;填段基地址到中断地址表IN AL,21H ;读中断屏蔽寄存器IMRAND AL,11011111B ;设置中断屏蔽字OCW1,IR5请求被允许,其他请求被禁止 OUT 21H,AL ;将OCW1写入IMR中STI ;开中断WAIT:CMP COUNT,10 ;判断10次中断是否结束JNZ WAIT ;未结束,等待CLI ;10次中断后,关中断MOV AH,4CH ;结束,返回DOSINT 21H;延时程序DELAY PROCPUSH CX ;保护现场MOV CX,100H ;延时时间为处理一次CX自减1的时间乘以100HDELAY1: LOOP DELAY1POP CX ;恢复现场RET ;返回到调用处,继续执行DELAY ENDP;中断服务程序INT_35 PROCPUSH DX ;保护现场PUSH AXPUSH CXCLI ;关中断MOV AX,DATAMOV DS,AXINC COUNT ;中断次数加1MOV AL,COUNT ;将中断次数写入AL中MOV DX,210H ;8255数据口OUT DX,AL ;将中断次数输出到LED显示灯MOV CX,680HCMP COUNT,10JB GOON-randomirandom; ;低于10时跳转到GOONCMP COUNT,10JNZ L1 ;不等于10(此处即大于10)时跳转到L1 SUB SI,9 ;第10次中断时SI减去9,即归0L1:MOV AL,[SI] ;查表,对应0-9MOV DX,220H ;地址译码器连接六位数码管电路的数据口OUT DX,ALMOV DX,221H ;数据口MOV AL,00000001B ;指定六位数码管在最低位显示0-9OUT DX,ALCALL DELAY ;调用延时程序MOV AL,06H ;对应字符'1'MOV DX,220HOUT DX,ALMOV DX,221HMOV AL,00000010B ;指定六位数码管在次低位显示1OUT DX,ALCALL DELAYLOOP L1 ;CX=680HINC SI ;SI加1JMP L ;跳转至LGOON:INC SI ;SI加1MOV AL,[SI] ;查表MOV DX,220HOUT DX,ALMOV DX,221HMOV AL,00000001BOUT DX,ALL:MOV AL,20H ;写OCW2,送中断结束命令EOIOUT 20H,ALSTI ;开中断POP CX ;恢复现场POP AXPOP DXIRET ;中断返回INT_35 ENDPCODE ENDSEND START4.试验流程图:主程序流程图中断服务程序流程图。
洛阳理工学院实验报告
图4.2 摆放元器件
4.布线图
(1)画导线
两个元件只需要单击两个元件的连接点,ISIS
完成两点连线操作。
单机“工具”菜单栏里的“自动连线”选线,可使走线的
图4.3 布线完成图
5.打开μVision4软件
新建μVision4工程,并新建文件,编写C51程序,
文件,并进行编译,编译后的文件为.hex格式,文件名为
件编译成Shiyansi4.omf文件,此文件用来调试用的。
如图
图4.5 在μVision4中对C51程序进行调试
7.点击80C51,选择Shiyan4.omf,在ISIS中的对
图4.7(1)运行结果
图4.7(2)运行结果
实验总结:
通过本次试验,更深的了解Proteus ISIS模块的软件结构,菜单栏、工具栏、对话框等基本单元功能;熟悉了μVision4编译软件,了解了软件结构与功能,并完成了本实验的C51编程;掌握在μVision4中进行。
单片机指示灯和数码管的中断控制实验报告.doc本次实验是对单片机指示灯和数码管的中断控制的探索与实验。
本次实验采用的控制芯片是C8051F020,并使用了Keil uVision 5软件进行编程,通过搭建的硬件电路实现指示灯和数码管的控制。
一、实验目的1.了解中断的基本概念和中断的处理过程;2.学习如何设置中断优先级和使用中断嵌套;4.进一步巩固单片机的编程基础。
二、实验内容1.实现定时器中断控制指示灯,每隔一定时间改变指示灯的亮灭状态2.实现外部中断控制数码管,当外部引脚有电平变化时,更新数码管的显示内容三、实验原理中断是单片机系统中常用的一种处理机制。
引发中断的事件可以是定时器计数器溢出,外部I/O口电平跳变、串口数据到达等多种情况。
在中断响应后,单片机会暂停当前的程序执行,先转到相应的中断服务程序中执行,待中断处理完成后再从原来暂停的位置继续执行。
本次实验中,通过使用单片机的定时器和外部中断控制指示灯和数码管。
定时器中断每隔一定时间改变指示灯的状态,外部中断控制数码管显示内容的改变。
在编程时,需要设置中断的优先级和中断嵌套的情况。
四、实验步骤1.硬件连接将指示灯连接到P0.0引脚,将数码管连接到P2口对应的引脚,在数码管的位选接口处接入一个按键(用于模拟外部中断)。
2.编写定时器中断代码在Keil uVision中打开一个新的工程,编写定时器中断的代码,具体代码如下://包含头文件和全局变量定义#include<reg51.h>unsigned char ledStatus = 0;//定时器中断服务程序void tmr0_isr(void) interrupt 1{TMOD &= 0xf0;TH0 = (65536-50000)/256;}//定时器初始化ET0 = 1;unsigned char code num_c[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//LED灯控制函数control_led();//外部中断初始化//数码管更新函数P0 = num_c[num];P2 = ~(0x01<<num);4.实验结果将编写好的程序下载到单片机控制芯片上,按下数码管的位选按键,就可以看到数码管上的数字不断改变,同时指示灯每隔一定时间改变一次状态。
指示灯、数码管的中断控制实验报告
本次实验是通过中断控制指示灯和数码管的显示。
我们使用了STC89C52单片机来进行控制实验。
首先,我们定义了两个常量。
一个是DELAY,用于控制指示灯闪烁的速度;另一个是DELAY2,用于控制数码管显示的速度。
由于数码管的刷新速度要比指示灯快,所以我们设置了一个较小的DELAY2值。
在主函数中,我们对单片机进行了初始化,并开启了中断。
然后,我们通过一个while循环不断循环执行,等待中断的触发。
在中断处理函数中,我们利用了定时器来控制指示灯的闪烁,当计数器的值等于DELAY时,就切换指示灯的状态。
通过这种方式,我们可以让指示灯不断地交替闪烁。
对于数码管的中断控制,我们使用了另一个定时器。
每隔一段时间,就会调用中断处理函数,更新数码管的显示内容。
在这个函数中,我们定义了一个数码管显示表,通过循环周期地改变显示的内容,从而实现了数码管数字的滚动显示。
在实验过程中,我们还需要注意一些问题。
首先是定时器的设置,不仅要考虑到闪烁和滚动的速度,还要注意计数器的初始值和中断的开启。
另外,由于中断会频繁地跳入中断处理函数,我们需要尽量减少中断函数的执行时间,避免影响程序的运行。
通过这一次实验,我们掌握了中断控制指示灯和数码管的方法,对单片机的应用有了更深入的了解。
在今后的学习和开发中,这些基础知识将会起到重要的作用。
实验四数码管的动态显示实验班级通信1102 姓名谢剑辉学号20110803223 指导老师袁文澹一、实验目的熟悉掌握数码管动态显示的基本方法;根据已知电路和设计要求在实验板上实现数码管动态显示。
根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。
二、实验内容1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。
2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。
三、实验原理实验要求“4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容”。
动态扫描可以实现要求。
简单地说,动态扫描就是选通一位,送一位数据。
原理图中的P10~P13是位选信号,即选择哪个数码管显示数字;P00~P07是段码,即要显示的数字。
可以通过依次选通一位7段数码管并通过P0端口送出显示数据。
由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。
本实验使用中断,实现每2s更新一次数字。
四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。
(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。
由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。
四位七段数码管显示原理
四位七段数码管是一种常见的数字显示器件,它由四个七段LED数码管组成,每个数码管有七个LED分段来显示数字0到9及一些字母和符号。
下面我们介绍它的显示原理。
每个七段数码管的LED分段都是独立控制的,它们分别对应数码管的段a到g。
当需要显示某个数字时,通过控制相应的LED分段点亮或熄灭,从而形成要显示的数字。
通常情况下,一个四位七段数码管显示器需要使用四个控制信号来控制每个位上的数字显示,这四个信号分别对应数码管的四个共阳(共阳极)或共阴(共阴极)引脚。
共阳极数码管指的是共阳极接电源正极(Vcc),而共阴极数码管指的是共阴极接电源负极(GND)。
在显示时,先将要显示的数字转换为对应的七段LED分段点亮的信号组合,并通过相应的控制信号送入数码管。
然后将对应的控制信号置高(对共阳极数码管)或置低(对共阴极数码管)来点亮相应的数码管。
为了实现四位数的显示,还需要设置显示位置的切换。
通常使用一个时序电路来控制每个位上的数字显示的时间。
时序电路以一定的频率循环切换每个位,使得切换速度足够快,人眼就会感觉到四位数码管在同时显示。
总结起来,四位七段数码管通过控制LED分段点亮和时序电
路的切换,在四个位上显示出对应的数字信息。
这种显示原理在数字时钟、计数器、温度计等数字显示设备中得到广泛应用。
实验三定时器和中断实验一、实验目的1、学习51单片机内部定时器的使用方法。
2、掌握中断处理程序的方法。
3、掌握数码管与单片机的连接方法和简单显示编程方法。
4、学习和理解数码管动态扫描的工作原理。
二、实验内容1、使用定时器T0,定时1秒,控制P1口发光管循环点亮。
2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。
3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
三、实验电路图四、实验说明1、数码管的基本概念(1)段码数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。
本次实验使用的是共阴数码管,公共端是1、6,公共端置0,则某段选线置1相应的段就亮。
公共端1控制左面的数码管;公共端6控制右面的数码管。
正面看数码管的引脚、段选线和数据线的对应关系为:图1 数码管封装图图2 数据线与数码管管脚连接关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按顺序排列所组成的一个数字,它与数码管的类型(共阴、共阳)(2)位码位码也叫位选,用于选中某一位数码管。
在实验图中要使第一个数码管显示数据,应在公共端1上加低电平,即使P2.7口为0,而公共端6上加高电平,即使P2.6口为1。
位码与段码一样和硬件连接有关。
(3)拉电流与灌电流单片机的I/O 口与其他电路连接时,I/O 电流的流向有两种情况:一种是当该I/O 口为高电平时,电流从单片机往外流,称作拉电流;另一种是该I/O 口为低电平时,电流往单片机内流,称为灌电流。
一般I/O 的灌电流负载能力远大于拉电流负载能力,对于一般的51 单片机而言,拉电流最大4mA,灌电流为20mA。
一般在数码管显示电路中采用灌电流方式(用共阳数码管),可以得到更高的亮度。
本实验电路中采用拉电流方式(用共阴数码管)。
实验4.指示灯/数码管的中断控制【实验目的】掌握外部中断原理,学习中断编程与程序调试方法。
【实验原理】实验电路原理图如图A.53所示,图中按键K1和K2分别接于P3.2和P3.3,发光二极管D1接于P0.4,共阴极数码管LED1接于P2口。
时钟电路、复位电路、片选电路忽略。
图A.53 实验的电路原理图在编程软件配合下,要求实现如下功能:程序启动后,D1处于熄灯、LED1处于黑屏状态;单击K1,可使D1亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F后重新从1开始。
软件编程原理为:K1和K2的按键动作分别作为INT0和INT1的中断请求,在中断函数中进行指示灯与数码管的信息处理。
初始化后,主函数处于无限循环状态,等待中断请求。
【实验内容】(1)熟悉μVision3的软件调试方法;(2)完成C51语言编程;(3)练习μVision3与ISIS的联机仿真方法。
【实验步骤】(1)提前阅读与实验4相关的阅读材料;(2)参考图A.53;和表A.5,在ISIS中完成原理图的绘制;(3)在KeilμVision3中编写和编译C51程序,并生成可执行文件;(4)在μVision3中启动ISIS的仿真运行,并进行联机调试。
【实验要求】提交实验报告并包括如下内容:电路原理图、C51源程序(含注释语句)、软件调试分析、仿真运行截图及实验小结。
【参考图表】【实验程序】/*指示灯、数码管的中断控制程序*/#include <reg51.h>sbit P0_4 = P0^4;unsigned char i = 0; //数码管计数初始值0unsigned char duanma[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F的数码管段码void main(){ P2 = 0x00; //开机数码管黑屏P0_4 = 1; //开机LED灯灭EA = 1; //总中断允许EX1 = EX0 = 1; //INT0、INT1允许IT1 = IT0 = 1; //脉冲触发while(1);}void INT_0SVR() interrupt 0 //INT0中断函数{ P0_4 = !P0_4; //将P0_4非赋值给P0_4}void INT_1SVR() interrupt 2 //INT1中断函数{ i++; //数码管计数加一if(i==16) //当数码管计数达到16时回归1i = 1;P2 = duanma[i]; //将段码赋值给P2}【仿真截图】略【实验小结】通过实验对Protues有了更多的了解,同时了解到中断系统在实际中的更好应用。