单片机控制led灯亮和灭,led灯初始状态从左到右两个灯间隔一个灯循环亮灭,然后从右到左循环亮灭,,当按下按键,led灯全亮,然后全灭。然后再恢复循环。
二、实验过程
(一)实验项目的方案分析
1.设计原理
STC12C5A60S2单片机内部包括微处理器、存储器(存放程序指令或数据的ROM、RAM等)、输入/输出口(I/O口)及其他功能部件如定时/计数器、中断系统等。它们通过地址总线、数据总线和控制总线连接起来。
本实验充分利用了8051芯片的I/O引脚。系统已采用STC12C5A60S2系列单片机为中心器件来设计数码管显示系统,实现数码管循环显示。
2.器件配置清单
表1器件配置表
名称
型号
数值
数量
面包板
MB-102
165*55*
(二)实验项目的硬件电路设计
通过Proteus仿真电路软件搭建电路
(三)实验项目的程序设计
1、C51程序编写
2、keil软件调试截图
通过Keil软件进行C51控制程序的编写,通过不断调试修改,最终的调试好的Keil
调试无措的Keil程序
(四)实验项目的虚拟仿真
打开Keil C软件将上面程序输入,调试无误后编译输出".hex"文件,打开Proteus软件,将之前编译好的".hex"文件加入到芯片中,开始运行仿真。
(五)实验项目的实际验证电路及验证结果
将单片机C51程序编译无误后,生成HEX文件,通过STC-ISP下载到单片机中,下载的软件界面搭建的实际

main()
{
// CLK_CKDIVR=0x00;
CLK_Init();
IO_Init();
led_on=0;
//timer1_init();
EXTI_DeInit();?/初始化外部中断IO口
_asm("rim");
while(1)
{
cbi(PA_ODR,4);
}
}
@far @interrupt void TIM1_UPD_OVF_IRQHandler(void)
{
TIM1_SR1 = 0x00; // 清除更新标志
}
@far @interrupt void EXTI0 (void)//外部中断子函数
{
if(PA_on)
{ sbi(PA_ODR,4);PA_on=0;}//PA4为灯亮
else
{ cbi(PA_ODR,4);PA_on=1;}//PA4为灯灭
EXTI_CR1=0x00 ;
}
不懂再追问,你只需要把主程序里面的灯定为一个状态,外部中断里面再定一个状态。要亮2次,加个延时,就行了。
定时器让LED引脚输出高低变化的电平,在主函数里判断按键是否按下,如果按下就让LED引脚保持并关闭定时中断。
第二种方法是 主函数里让LED引脚输出高低变化电平,按键用外部中断。
是不是按一下开关触发中断,使LED闪烁,再按一下,LED熄灭?
LED EQU P1.0
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXT0
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-41667)
MOV TL0,#LOW(65536-41667)
SETB ET0
SETB EA
SETB EX0
SETB IT0
CLR A
SJMP $
EXT0:
CPL TR0
RETI
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-41667)
MOV TL0,#LOW(65536-41667)
SETB TR0
INC A
CJNE A,#4,T0E
CLR A
CPL LED
T0E:
RETI
END
单片机外部中断按键控制led的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机外部中断按键控制led