指示灯数码管的中断控制
单片机实验——利用中断控制LED
单片机实验——利用中断控制LED本实验利用中断控制单片机的GPIO口控制LED的亮灭,达到了在不同的时间间隔下实现LED的闪烁、呼吸等效果。
本实验可以让初学者更好地理解与掌握单片机的中断和GPIO 控制。
一、实验器材准备1. STC12C5A16S2单片机开发板2. LED灯3. 1KΩ电阻4. 杜邦线二、实验原理本实验中,我们需要利用单片机的GPIO口控制LED灯的亮灭。
其中,单片机的GPIO 口需要设置为输出模式,即控制LED灯亮灭的电平。
在运行中,通过改变电平状态来控制LED的亮灭。
而中断控制则是为了实现不同的效果,比如在不同的时间间隔下闪烁、呼吸等。
中断是指硬件或软件的外部事件,它会打断当前正在执行的程序,转为执行中断程序。
在单片机编程中,我们可以采取中断方式实现不同的操作。
三、实验步骤1. 首先,连接电路。
将LED作为单片机GPIO控制的输出口,同时连接一个1KΩ的电阻,如下图:2. 打开Keil软件,新建工程,导入STC12C5A16S2头文件。
3. 在代码中,首先需要定义GPIO的引脚,接下来进行中断初始化设置。
4. 编写闪烁程序,实现LED在不同时间间隔下闪烁,如下:```cvoid Led_Flash(void){Led_ON(); //LED灯亮Delay(500); //延时等待500msLed_OFF(); //LED灯灭Delay(500); //延时等待500ms}```5. 编写呼吸程序,实现LED在不同时间间隔下进行呼吸灯效果。
```cvoid Led_Breath(void){uint8 i;uint16 j;for (i = 0; i < 10; i++) //变量i控制灯的亮度{for (j = 0; j < 2000; j++) //变量j控制每次延时等待的时间{Led_ON();Delay_us(i * 20);Led_OFF();Delay_us((9 - i) * 20);}}}```6. 编写中断控制程序,通过定时器中断来实现LED的不同效果。
UART串口通信—控制LED灯中断法
UAR串口通信一控制LED丁(中断法)项目说明:1. 通过串口来控制LED灯,发送1 (十六进制)点亮LEDT C 8个LED蓝灯),发送2 (十六进制)关闭LE[灯(8个LE[蓝灯)。
2. 通信速率:9600bps (即波特率为9600)3. 串口通信采用中断的方法。
此项目练习的目的:(我们应掌握如下知识点)( 1 )熟悉串口中断相关寄存器的配置。
( 2)学会串口中断的使用方法。
完整代码:#include "reg52.h"/* 串口初始化:主要涉及寄存器配置*/void UartInit(void) // 初始化uart{TMOD = 0X20; // 定时器1定时器方式工作模式2,可自动重载的8位计数器常把定时/计数器1 以模式2 作为串行口波特率发生器SCON = 0X50; // 串口选择工作模式1使能接收,允许发送,允许接收PCON = 0X00; //8 位自动重载,波特率加倍TH1 = 0XFD; // 用11.0592MHz波特率9600TL1 = 0XFD;TR1 = 1; // 打开中时器/* 由于我们采用中断法,所以我们还需要对串口中断相关的寄存器进行配置*/ES = 1;// 串口中断EA= 1;//CPU 总中断}// 写串口中断响应的服务程序:void UartISR(void) interrupt 4{unsigned char TempDat;if (RI)/* 查询串口是否接收到一个完整的数据*/{RI = 0;/* 清除标志,准备下一次判断*/TempDat = SBUF;/* 读取串口数据*/if (1 == TempDat)/* 判断串口接收到的数据*/{P1 = 0;/*如果接收到的数据是1,贝U点亮8个LED蓝灯*/}} else if (2 == TempDat){P1 = 0xff;/* 如果接收到的数据是2,则关闭8个LED蓝灯*/}} else{}} }void mai n(void){Uartl nit();/* 调用串口初始化函数,进行相应的配置,如波特率等 */ while(1)〃 不用干啥事,一直等待就行。
单片机原理及应用实验报告
《单片机原理及应用》实验报告姓名:学号:班级:应用物理指导教师:日期:实验1 计数显示器一、实验目的熟悉51单片机的基本输入输出应用,掌握Proteus模块的原理图绘图方法及单片机系统仿真运行方法二、实验原理由共阴极数码管LED1和LED2、P0口、P2口,上拉电阻RP1及Vcc组成的输出电路;由按钮开关BUT、P3.7和接地点组成的输入电路,该电路在编程软件的配合下,可实现计数显示功能:可统计按钮BUT的按压次数,并将按压结果以十进制数形式显示出来;当显示值达到99后可自动从1开始,无限循环。
三、实验内容(1)观察Proteus模块的软件结构,熟悉菜单栏、工具栏、对话框等基本单元功能(2)学会选择元件、画导线、修改属性等基本操作(3)学会可执行文件加载及程序仿真运行方法(4)验证计数显示器的功能四、实验要求提交实验报告并包括如下内容:电路原理图、电路原理分析、仿真运行截图及实验小结1.实验原理图2.仿真运行截图3.实验小结通过这次实验让我认识了kell和proteus软件的基本功能,学会了用kell编写程序用proteus仿真运行。
在这次实验中同时也遇到了很多问题。
比如因为第一次使用这两个软件对界面还不太熟悉,浪费了很多的时间也产生了很多错误,但之后与同学们的交流过程中,慢慢的对这两个软件有了更深入的了解,在后期仿真的时候才能得心应手的处理问题。
这个计数显示器的实验让我进一步了解了单片机与数码管的魅力,看到了电子元件的神奇之处,只要按动按键就能让数码管的数字逐次加一,这大大激发了我的学习单片机兴趣,这次实验也会成为我以后学习单片机的奠基石,因为它打开了我认识单片机的大门,让我认识到了单片机的魅力,并让我沉浸其中。
实验2 指示灯开关控制器一、实验目的学习51单片机I/O口基本输入输出功能,掌握汇编语言的编程与调试方法。
二、实验原理输入电路由外接在P1口的8只拨动开关组成;输出电路由外接在P2口的8只低电平驱动的发光二极管组成。
单片机原理实验报告(详细)
湖南城市学院实验报告2018-2019 学年上学期姓名:***班级学号:******实验课程:单片机原理及应用实验室名称:电子工程实验室湖南城市学院信息与电子工程学院实验中心印制实验项目名称:实验一指示灯和开关控制器实验一、实验目的及要求1、学习51单片机I/O基本输入/输出功能,掌握汇编语言的编程与调试方法;2、熟悉proteus软件,了解软件的结构组成与功能;3、学会在ISIS模块中进行汇编程序录入、编译和调试;4、理解单片机程序控制原理,实现指示灯/开关控制器的预期功能。
二、实验原理实验电路原理图如图1所示,图中输入电路由外接在P3口的8只拨动开关组成;输出电路由外接在P2口的8只低电平驱动的发光二极管组成。
此外,还包括时钟电路、复位电路和片选电路。
图1 实验原理图在编程软件的配合下,要求实现如下指示灯/开关控制功能:程序启动后,8只发光二极管先整体闪烁3次(即亮→暗→亮→暗→亮→暗,间隔时间以肉眼可观察到为准),然后根据开关状态控制对应发光二极管的灯亮状态,即开关闭合相应灯亮,开关断开相应灯灭,直至停止程序运行。
软件编程原理为:(1)8只发光二极管整体闪烁3次亮灯:向P2口送入数值0;灭灯:向P2口送入数值0FFH;闪烁3次:循环3次;闪烁快慢:由软件延时时间决定。
(2)根据开关状态控制灯亮或灯灭开关控制灯:将P3口(即开关状态)内容送入P2口;无限持续:无条件循环。
程序流程图如图2所示。
图2 实验程序流程图三、实验仪器设备及装置(1)硬件:电脑一台;(2)仿真软件:Proteus;(3)编程软件Keil uVision4。
其中,仿真软件ISIS元件清单如表1所示。
表1 仿真软件ISIS元件清单四、实验内容和步骤(一)实验内容:(1)熟悉ISIS模块的汇编程序编辑、编译与调试过程;(2)完成实验的汇编语言的设计与编译;(3)练习ISIS汇编程序调试方法,并最终实现实验的预期功能。
(二)实验步骤:(1)提前阅读与实验相关的阅读材料;(2)参考指示灯/开关控制器的原理图和实验的元件清单,在ISIS中完成电路原理的绘制;(3)参考程序流程图在Keil uVision4中编写和编译汇编语言程序;(4)利用ISIS的汇编调试功能检查程序的语法和逻辑错误;(5)观察仿真结果,检验与电路的正确性。
数码管led显示器控制电路
CPLD/FPGA
8×N
……
数码管静态显示方式的优点是连线简单, 软件编程简单。
缺点是需要耗费大量的IO端口资源。
静态显示 的方式
CPLD/FPGA驱动LED静态显示译码 程序
when others => seg <= "0000000"; --全灭
end case;
end process;
end a;
仿真结果
将要显示的数据译成段码在数码管上显示 出来。
静态显示应用举例:
设计一个4路独立键盘输入电路,读取键盘 的键值,并将键值在一位静态共阴极LED数 码管中显示出来。
数码管显示原理
数码管的组成:LED数码管是 由发光二极管构成的,常用的 有8段。
数码管的分类:有共阴和共阳 极两种。多个LED的阴极连在 一起的为共阴极数码管,阳极 连在一起的为共阳极数码管。
共阴极数码管的公共端接地, 阳极(a到h)接高电平,数码 管点亮。
共阳极数码管的公共端接电源, 阴极(a到h)接低,数码管点 亮。
entity keyscan is
port(
clk10hz: IN std_logic;
key1, key2, key3, key4: IN std_logic;
keyvalue: OUT integer range 0 to 4
);
end keyscan;
architecture a of keyscan is
段码共用,位码独立
N个LED数码管以动态方式显示时,需要 8+N个IO口线。其中8个IO口线用作输出段 码,N个IO口线输出位码。
实验四 数码管显示控制
实验四数码管显示控制一、实验目的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计数。
stm32单片机设计定时器中断实现1s的led灯闪烁知识应用
stm32单片机设计定时器中断实现1s的led灯闪烁知识应用要实现1s的LED灯闪烁,可以使用STM32单片机的定时器中断来控制LED的开关。
以下是实现的步骤:1. 配置定时器:选择一个定时器(如TIM2)并设置适当的预分频和计数值,以实现1s的定时周期。
2. 配置中断:使能定时器中断,并将中断优先级设置为适当的值(较高优先级)。
3. 初始化LED引脚:将LED引脚设置为输出,并初始化为高电平(LED关闭)。
4. 编写中断处理程序:在中断处理程序(如TIM2_IRQHandler)中,切换LED引脚的状态。
例如,如果LED引脚当前为高电平,则将其设置为低电平,反之亦然。
5. 启动定时器:启动定时器以开始定时。
整个步骤如下所示的代码示例:```c#include "stm32fxx.h"void TIM2_IRQHandler(void){if(TIM2->SR & TIM_SR_UIF){TIM2->SR &= ~TIM_SR_UIF; // 清除中断标志位// 切换LED引脚状态if(GPIOC->ODR & GPIO_ODR_ODR0)GPIOC->ODR &= ~GPIO_ODR_ODR0; // 关闭LEDelseGPIOC->ODR |= GPIO_ODR_ODR0; // 打开LED}}int main(){// 初始化LED引脚RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; // 使能GPIOC时钟GPIOC->MODER |= GPIO_MODER_MODER0_0; // 将PC0设置为输出模式GPIOC->OSPEEDR |= GPIO_OSPEEDR_OSPEED0; // 设置PC0输出速度// 配置定时器RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // 使能TIM2时钟TIM2->PSC = 8399; // 将预分频设置为8400-1,得到10kHz 的计数频率TIM2->ARR = 9999; // 将计数值设置为10000-1,得到1s的定时周期// 配置中断TIM2->DIER |= TIM_DIER_UIE; // 使能更新中断NVIC_EnableIRQ(TIM2_IRQn); // 使能TIM2中断NVIC_SetPriority(TIM2_IRQn, 0); // 设置TIM2中断优先级为最高// 启动定时器TIM2->CR1 |= TIM_CR1_CEN; // 启动TIM2定时器while(1){// 程序主循环}return 0;}```以上代码使用了TIM2定时器和PC0引脚作为LED灯的控制。
利用8259A中断实现LED灯和数码管显示实验
实验三:利用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.试验流程图:主程序流程图中断服务程序流程图。
89C52数码管静态显示及定时器和中断应用
动态显示
动态显示的特点是将所有位数码管的段选线
并联在一起,由位选线控制是哪一位数码管有效。 选亮数码管采用动态扫描显示。所谓动态扫描显
示即轮流向各位数码管送出字形码和相应的位选,
利用发光管的余辉和人眼视觉暂留作用,使人的
感觉好像各位数码管同时都在显示。动态显示的
亮度比静态显示要差一些,所以在选择限流电阻 时应略小于静态显示电路中的。
TCON
IT0 1 0 IE0 1 ET0 1 TF0 IT1 1 0 IE1 1 ET1 1 TF1 EX0 1
IE
EA 1
IP
PX0 1 0 PT0 1 0 1
硬件查询
自 然 优 先 级 中断源 高 级
INT0 T0 INT1 T1 RX TX
中断入口
EX1 1
PX1 1 0 PT1 1 0 0 自 然 优 先 级 中断源
R 1K
11
7 4 2 1 10
89C52
DPY a f e g d b c
a b c d e f a f e g d
C2
5 3
P00 P01 P02 P03 P04 P05 P06 P07
P00 P01 P02 P03 P04 P05 P06 P07
1 2 3 4 5 6 7 8
g dp a a b c dp f e g d b c dp DPY 4-L E D
硬件查询
自 然 优 先 级 中断源 高 级
INT0 T0 INT1 T1 RX TX
中断入口
EX1 1
PX1 1 0 PT1 1 0 0 自 然 优 先 级 中断源
低 级
RI TI
ES 1 ≥1
PS 1 0
实验四led灯和数码显示器的中断控制
实验四LED灯和数码显示器的中断控制一、实验目的:掌握外部中断的工作原理,熟悉中断编程及Keil平台软件调试方法。
二、实验原理:实验电路如图A.53所示。
K1和K2分别接于端口P3.2和P3.3,按压后的电平负跳变可分别产生INT0中断请求和INT1中断请求。
INT0中断响应后取端口P0.4电平,使指示灯D1的状态反转,INT1中断响应后使计数值增1并送给数码管LED显示。
电路原理图及中断原理分析:按键K1接外部中断0,K2接外部中断1。
P0.4接指示灯D1,P2口接数码管,每按一次K1键电平产生负跳变,INT0中断响应后取端口P0.4电平,D1的状态反转;每按一次K2键产生负跳变,INT1中断响应使计数值增1并使数码管显示该数值,变化范围为0~F。
三、实验步骤:(1)、按照表A.5所示将元件添加到Proteus ISIS对象选择列表中,并仿照图A.53完成电路原理图绘制。
(2)、在Keil中编写C51程序,并使之编译通过。
(3)、在Keil中加载编译后的可执行文件,并控制Proteus中的程序仿真运行。
Category Reference Value Microprocessor ICs U1 80C51Optoelectromics D1 LED-GREENSwitches&Relays K1~K2 BUTTONResistors R1~R2/100 RES Optoelectronics LED 7SEG-COM-CAT-GRN四、实验要求:(1)、主函数在程序初始化完成后进入原地循环状态,等待中断请求。
(2)、两路外部中断均设为下降沿触发方式,且为自然优先级。
(3)、计数变量初值为0,变化范围为0~F。
(4)、实验报告内容包括:电路原理图及分析、中断原理分析,C51源程序(含注释语句),仿真运行截屏图,实验小结。
五、C51源程序如下:#include< reg51.h>char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};char flag;sbit p0_4= P0^4;void delay(unsigned int time){unsigned int j =0;for(;time>0;time--)for(j=0;j<125;j++);}int0_key () interrupt 0{p0_4=!p0_4;}int1_key () interrupt 2{delay(200);P2=led_mod[flag%16];delay(200);flag++;}void main(void) {flag=0;IT0= 1;EX0= 1;EX1= 1;EA= 1;while(1);}六、试验结果:(1)开始运行时如下图:(2)、按键后运行图如下:实验结果分析:由运行结果可以看出,按键K1产生外部中断0控制D1的状态,使指示灯D1由亮到暗一次变化;按键K2产生外部中断1使LED显示0~F不同数值。
指示灯、数码管的中断控制实验报告
指示灯、数码管的中断控制实验报告
本次实验是通过中断控制指示灯和数码管的显示。
我们使用了STC89C52单片机来进行控制实验。
首先,我们定义了两个常量。
一个是DELAY,用于控制指示灯闪烁的速度;另一个是DELAY2,用于控制数码管显示的速度。
由于数码管的刷新速度要比指示灯快,所以我们设置了一个较小的DELAY2值。
在主函数中,我们对单片机进行了初始化,并开启了中断。
然后,我们通过一个while循环不断循环执行,等待中断的触发。
在中断处理函数中,我们利用了定时器来控制指示灯的闪烁,当计数器的值等于DELAY时,就切换指示灯的状态。
通过这种方式,我们可以让指示灯不断地交替闪烁。
对于数码管的中断控制,我们使用了另一个定时器。
每隔一段时间,就会调用中断处理函数,更新数码管的显示内容。
在这个函数中,我们定义了一个数码管显示表,通过循环周期地改变显示的内容,从而实现了数码管数字的滚动显示。
在实验过程中,我们还需要注意一些问题。
首先是定时器的设置,不仅要考虑到闪烁和滚动的速度,还要注意计数器的初始值和中断的开启。
另外,由于中断会频繁地跳入中断处理函数,我们需要尽量减少中断函数的执行时间,避免影响程序的运行。
通过这一次实验,我们掌握了中断控制指示灯和数码管的方法,对单片机的应用有了更深入的了解。
在今后的学习和开发中,这些基础知识将会起到重要的作用。
中断控制数码管显示程序解释
P2=11111101,P2.1引脚低电平,DS2亮
P0=Tab[k/10];
显示十位
delay();
调用延时函数
P2=0xfe;
P2=11111110,P2.0引脚低电平,DS1亮
P0=Tab[k%10]; 显示个位
delay();
P2=0xff;
P2=11111111,关闭所有数码管
{
display(x);
调用显示函数
}
}
void Time0(void)interrupt 1 using 1
中断服务程序
{
TR0=0;
关闭T0
x--;
每来一次中断,x自减1
if(x==0)
{
x=9999;
} TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; }
unsigned char second; 定义秒
void delay(void)
延时函数
{
unsigned char i;
for(i=0;i<200;i++)
延时时间,for循环语句
;
}
秒显示函数
void Display_Second(unsigned char k) 定义入口参数
{
P2=0xfd;
ET0=1;
定时器T0中断允许
TR0=1;
启动定时器T0开始运行
int_time=0;
中断次数初始化
second=0;
秒初始化
whileplay_Second(second);
调用秒的显示子程序
}
}
实际计数值=
实验4.指示灯 数码管的中断控制
实验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有了更多的了解,同时了解到中断系统在实际中的更好应用。
实验4指示灯-数码管的中断控制
实验4指示灯-数码管的中断控制
单片机原理及应用实验报告电路图截图:
实ห้องสมุดไป่ตู้总结:
通过这次的指示灯\数码管的外部中断控制程序设计让我对Protues软件有了更多的了解,同时我也学会了其中断编程设计。在这次试验中,我认识到了自己的不足,编程方面掌握的还不是那么牢固。这次的课程设计和电路连接让我受益匪浅,对以后的编程和程序设计方面来说,会有很大的帮助。
单片机控制交通灯毕业论文设计
.。
..学院毕业设计(论文)题目单片机交通灯控制设计系别:学生姓名:学号:专业名称:指导教师:年月日单片机交通灯控制设计。
摘要:近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段.与传统的红绿灯相比,单片机在信号灯上的应用,使信号灯蕴含了生命,特别是自动检测和控制能力的提高,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
使用单片机进行交通灯的设计,可以提高交通指示灯的智能化,简化操作程序,突出实用性,并可根据实际情况进行功能拓展。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统.交通信号灯控制方式很多。
本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片80C51为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩秒时黄灯闪烁警示。
本系统实用性强、操作简单、扩展功能强关键词:单片机交通灯闯红灯检测车流量一、单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种.单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3、4代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。
二、交通灯的控制方法2、1 定时控制交叉口信号控制机按事先设置的配时方案运行,称为固定周期控制。
一天只用一个配时方案的称为单段式定时控制;一天按不同时段的交通量采用几个配时方案的称为多段式定时控制。
带中断的交通灯控制系统ppt课件
精品课件
22
80C51中断的控制
一、中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和 屏蔽是由中断允许寄存器IE控制的。
nEX0(IE.0),外部中断0允许位; nET0(IE.1),定时/计数器T0中断允许位; nEX1(IE.2),外部中断1允许位; nET1(IE.3),定时/计数器T1中断允许位; nES(IE.4),串行口中断允许位; nEA (IE.7), CPU中断允许(总允许)位。
精品课件
6
硬件电路及控制方法
+5V
R1
100R
R2
100R
100RR3R4
100R
R5
100R
R6
D1
U2:A
2
1
D2
U2:B
LED-RED 4 74LS04 3
D3
U2:C
LED-YELLOW 6
74LS04 5
D4
U2:D
LED-GREEN 12
74LS04 13
D5
74LUS204:E
LED-RED
精品课件
29
80C51单片机中断处理过程
中断响应条件和时间
一、中断响应条件
中断源有中断请求; 此中断源的中断允许位为1; CPU开中断(即EA=1)。 同时满足时,CPU才有可能响应中断。
精品课件
30
二、中断服务的进入与返回
进入中断服务是单片机自动安排的,如进 入前会保存中断处地址及重要信息。进入 中断服务程序后则执行相应的服务程序, 执行完后还要恢复原来的地址及重要信息, 然后返回到原来被中断处断续执行原来的 程序。
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
实验四指示灯数码管的中断控制
洛阳理工学院实验报告
图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中进行。
51单片机中断控制LED
单片机作业题目要求:设计这样一个系统:在一个51单片机最小系统板上,P1口低四位接四个四角按键,高四位接四个LED灯。
按键中断作为总中断,当接中断的按键按下后,所有灯均可按照对应的按键进行点亮。
当没有中断按下时,无论怎么按接在P1口低四位的按键,均不能是按键点亮。
实现步骤:第一:电路搭建:电路搭建说明:1.采用AT89C52单片机,DIP40封装。
2.选用12M,并使晶振尽可能接近单片机,采用22pf的电容接在晶振两边并接地,使晶振更容易起振。
3.标号为D18的LED是中断触发指示灯,一旦中断触发,D18会一直亮着。
没有中断触发时会一直灭着。
4.key1,key2,key3,key4分别控制D1,D2,D3,D4,D5.5.D5为复位指示灯,当复位按键按下时,D5亮。
反之灭。
第二:程序实现:本程序十分简单,秉着杜绝抄袭,自助设计的理念,本程序完全有本人设计完成。
没有采用老师讲解的例程。
程序的注释已经将程序称述的很明白,现做简要说明:本人将按键查询部分都放在中断处理函数中处理。
当中断触发按键按下时,D18亮,程序进入中断函数,开始不断查询按键值,并点亮相应led.。
这样的程序对CPU的占有率较高,但由于这样写代码更加简单明了,有由于题目对cpu占有率的并没有明确要求,本着开发周期尽可能短的原则,本程序选择了简单方案。
现将代码复制如下:将KEIL与PROTEUS联调,调试结果如下:1.启动程序:,可以看到图中三角符号变绿。
此时:此时,图中所有led灭,无现象。
1.此时按下任意按键,比如key1,key2两个(为了方便截图,直接将开关用导线短路):现象如下:可以看到,并没有认可指示灯亮。
2.按复位按键观察是否正常(为了方便截图,直接将开关用导线短路):可以看到,红色的D5,复位指示灯变红。
复位电路正常工作。
3.按触发中断按键,观察D18会不会一直亮,即,只要按一下触发中断按键,D18会长亮。
明显看到,即使中断触发按键已经松开,D18,依旧亮着。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生实验报告
学院:软件与通信工程学院
课程名称:单片机系统设计
专业班级:
姓名:
学号:
学生实验报告(1)
一、实验综述
1、实验目的及要求
【实验目的】
掌握外部中断原理,学习中断编程与程序调试方法
【内容及要求】
(1)熟悉uvision3的软件调试方法;
(2)完成c51语言编程
(3)练习uvision3与ISIS的联机仿真方法
【实验原理】
在编程软件配合下,要求实现如下功能:程序启动后,D1处于熄灯、LED1处于黑屏状态;单击K1,可使D1亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F后重新从1开始。
软件编程原理为:K1和K2的按键动作分别作为INT0和INT1的中断请求,在中断函数中进行指示灯与数码管的信息处理。
初始化后,主函数处于无限循环状态,等待中断请求
2、实验仪器、设备或软件
电脑, Keil uVision4, proteus7
二、实验过程(实验步骤、记录、数据、分析)
(1)在Keil uVision4中编写和编译C51程序,生成可执行文件;
(2)在uVision4中启动ISIS的仿真运行,并进行联机调试。
【实验代码】
#include<>
unsigned char
led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x58,0x5e,0x79,0x71};
unsigned char count=0;
sbit P0_4=P0^4;
void INT_0SRV() interrupt 0 {
P0_4 = ~P0_4;
}
void INT_1SRV() interrupt 2 {
count++;
if(count==16)
count = 1;
P2 = led_mod[count];
}
void main(){
P2=0x00;
P0_4=0x01;
EA=1;
EX0=1;
EX1=1;
IT1=1;
IT0=1;
while(1);
}
【实验原理图】
三、结论
1、实验结果
(1)程序启动后,D1处于熄灯,LED1处于黑屏状态
(2)单击K1,使D1亮灯状态反转一次
XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT1
13P3.4/T 014P3.7/RD
17
P3.6/WR 16P3.5/T 115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
AT89C51
D1
LED-GREEN
R1
10k
R2
100
0144306_翁飞
XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT1
13P3.4/T 014P3.7/RD
17
P3.6/WR 16P3.5/T 115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
AT89C51
D1
LED-GREEN
R1
10k
R2
100
0144306_翁飞
(3)单击K2,使LED1显示值加1,
.
.
. . .
(4)达到F后重新从1开始
2、分析讨论
由运行结果可以看出,按键K1产生外部中断0控制D1的状态,使指示灯D1由亮到暗一次变化;按键K2产生外部中断1使LED显示0~F不同数值。
四、指导教师评语及成绩:
评语:
成绩:指导教师签名:
批阅日期:。