⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led12灯大循环程序.asm

📁 这是对LED灯显示的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
//这是专为谢积广设计的12LED灯大循环显示称序
//MCU使用STC12C2052 DIP封装
//时钟=4MHZ
//设计师:	杨本雄
//联系电话:26735990	13602675760
//email: yangbx@szonline.net
//公司名称: 深圳市雄洋电子科技有限公司
//编制时间	2006年04月4日	修改时间:	2006年04月04日
//*************************************************************************
//编程说明:
//系统工作模式
;	1.对码模式
;	2.工作模式
;  对码模式的操作:
;		1) 和主机连好联线
;		2) 启动主机"呼叫器对码"进入对码模式
;		3) 呼叫器监测到对码接口的起始位后指示灯快闪2秒提示,声音"嘟!--嘟!"2声提示
;		4) 对码完成后,关闭指示灯和声音提示,进入工作模式
//  工作模式的操作:
//		1) 单击"呼叫"键,"嘟!"声提示,指示灯慢闪5秒提示,同时封锁"呼叫"键,禁止再触发
//		2) 单击"消除"键,"嘟!"声提示,同时重新开启"呼叫"键,允许再触发
//****************************************************
//修改说明

//特别注意:
//烧录时,选择低功耗模式和高功耗模式实际上对休眠电流没多大影响
//烧录时,一定要使能看门狗,否则不能唤醒
//****************************************************
//寄存器定义
IPH							EQU		0B7H		//中断级别控制寄存器
AUXR						EQU		8EH			//T0,T1
P1M0						EQU		91H			//端口P1模式控制寄存器
P1M1						EQU		92H			//端口P1模式控制寄存器
P3M0						EQU		0B1H		//端口P3模式控制寄存器
P3M1						EQU		0B2H		//端口P3模式控制寄存器
WDT_CONTR					EQU		0E1H		//看门狗
IDLE_CLK					EQU		0C7H

//PCON						EQU		087H
//#include<reg51.h>
LED1						BIT		P1.0
LED2						BIT		P1.1
LED3						BIT		P1.2
LED4						BIT		P1.3
LED5						BIT		P1.4
LED6						BIT		P1.5
LED7						BIT		P1.6
LED8						BIT		P1.7

LED9						BIT		P3.0
LED10						BIT		P3.1
LED11						BIT		P3.2		//工作指示灯
LED12						BIT		P3.3		//
INPUT						BIT		P3.4		//
BUZZ						BIT		P3.5		//

//							BIT		P3.7		//板上RF模块D1


TI_FLAG						BIT		20H.0		//

T_MS_OVER_FLAG				BIT		22H.0
RECV_COMD_FLAG				BIT	 	22H.1
T_500MS_OVER_FLAG			BIT		22H.2
RD_INPUT_FLAG				BIT		22H.3
T_S_OVER_FLAG				BIT		22H.4

RECV_RS232_POINT			EQU		23H

PORT3_REG					EQU		24H
SIM_LED_REG_H				EQU		25H			//
SIM_LED_REG_L				EQU		26H
FLASH_TIME_REG				EQU		27H
P3_STATUS_REG				EQU		28H
WORK_MODE_REG				EQU		29H
TEMP5						EQU		2AH
TEMP6						EQU		2BH

T_100MS_TIMER				EQU		2CH
T_500MS_TIMER				EQU		2DH
T_MS_TIMER					EQU		2EH
T_S_TIMER					EQU		2FH

SYSTEM_STATUS				EQU		30H			//系统LED当前显示状态

RECV_COMD_BUFF				EQU		35H			//接收命令缓冲区

SP_POINT					EQU		50H			//堆栈区:60H-7FH


			                ORG     0000H
			                AJMP    BEGIN

			                ORG     0003H
			                AJMP    BEGIN

			                ORG     000BH
			                AJMP    T0_INT

							ORG     0023H
			                AJMP    SERIES_PG



			                ORG     0030H

BEGIN:						CLR		EA

							CLR		BUZZ							//关闭蜂鸣器

							CLR		T_500MS_OVER_FLAG
							MOV		WDT_CONTR,#00000000B			//关闭看门狗

							MOV     SP,#SP_POINT
							MOV		PCON,#00000000B					//PCON地址=87H
			                										//SMOD=PCON.7=1,串口波特率加倍
			                										//SMOD0=PCON.6=1
			                										//LVDF=PCON.5=1
			                										//POF=PCON.4=1
			                										//GF1=PCON.3=1
			                										//GF0=PCON.2=1
			                										//PD=PCON.1=1,进入掉电模式,即POWER DOWN
			                										//IDL=PCON.0=1,进入休眠模式,IDL
			                MOV     PSW,#00H
			                MOV		TCON,#00000101B					//外部中断都使用下降沿触发方式,但本程序没用到
			                MOV     TMOD,#21H            			//T1为自动重装波特率发生器
			                										//T0为16位定时器
			                MOV     SCON,#50H						//

			                MOV		TH0,#43H						//T0定时器基本定时=100mS
							MOV		TL0,#33H						//实际调试值,勿更改!!!!

			                //时钟=4MHz时
			                /*
			                MOV     TL1,#0F3H       				//设置波特率=9600
			                MOV     TH1,#0F3H						//
							*/
							
			                //时钟=4.9152MHz时
			                MOV     TL1,#0F0H       				//设置波特率=9600
			                MOV     TH1,#0F0H						//
			                
			                //时钟=11.0592MHz时
			                /*
			                MOV     TL1,#0CDH       				//设置波特率=9600
			                MOV     TH1,#0CDH						//
			                */

			                MOV		P1M0,#00000000B					//将P1口设置为高阻输入模式
			                MOV		P1M1,#11111111B
			                //MOV		P1,#00000000B
			                MOV		P3M0,#00010000B					//将P3口相应为设置为高阻输入模式
			                MOV		P3M1,#11100011B
							
			                MOV		IPH,#00010000B					//
			                MOV		AUXR,#01000000B					//T0x12=AUXR.7=1,定时T0输入时钟不12分频
			                										//T1x12=AUXR.6=1,定时T1输入时钟不12分频
			                										//UART_M0x6=AUXR.5=1,串口速度加倍
			                										//EADCI=AUXR.4=1,允许A/D中断
			                										//ESPI=AUXR.3=1,允许SPI中断
			                										//ELVDI=AUXR.2=1,允许低压中断

			                MOV     20H,#00H
			                MOV     21H,#00H
			                MOV     22H,#00H
			                
			                //*********工作暂存器初始化*******************
							MOV		SYSTEM_STATUS,#0
							MOV		WORK_MODE_REG,#0
			                //********************************************
							
							//***************标志初始化*******************
							CLR		RD_INPUT_FLAG
							SETB	T_MS_OVER_FLAG
							//********************************************
			                
			                MOV		IP,#00010000B
			                MOV     IE,#10010010B					//EA=IE.7=1,开总中断
			                										//ET2=IE.5=0,禁止定时器2溢出或捕获中断
			                										//ES=IE.4=1,允许串行口中断
			                										//ET1=IE.3=0,禁止T1定时中断,用作波特率发生器
			                										//EX1=IE.2=0,禁止外部中断1
			                										//ET0=IE.1=1,允许T0定时中断
			                										//EX0=IE.0=0,禁止外部中断0
			                SETB    REN

			                //*********初始化定时器1**********************
			                MOV		T_500MS_TIMER,#4
							CLR		T_500MS_OVER_FLAG
			                SETB	TR0
			                //********************************************

			                //*********初始化定时器2**********************
			                SETB	TR1									//
			                //********************************************

			                MOV		IDLE_CLK,#00000000B
							
							LCALL	START_DISP_PG
							
							MOV		PORT3_REG,#10011100B
							MOV		A,PORT3_REG
							MOV		P3,A
							
							MOV		P3_STATUS_REG,#00000000B
							
;**************************************************************************************************
MAIN:      					LCALL	READ_SET_MODE_PG

							LCALL	DRIVER_LED_MODE1_PG			//完整
							LCALL	DRIVER_LED_MODE3_PG			//全闪
							LCALL	DRIVER_LED_MODE4_PG			//逐亮
							
							LCALL	READ_INPUT_PG

							LJMP	MAIN
;**************************************************************************************************
READ_SET_MODE_PG:			MOV		A,P3
							ANL		A,#00001100B
							CJNE	A,P3_STATUS_REG,READ_SET_MODE_PG1						
							RET
		
READ_SET_MODE_PG1:			MOV		P3_STATUS_REG,A

							JNB		ACC.2,READ_SET_MODE_PG2
							JNB		ACC.3,READ_SET_MODE_PG3
							
//P6=1,P7=1
							MOV		P1,#00000000B				//先灭
							MOV		A,#11111100B
							ANL		P3,A
							MOV		T_MS_TIMER,#10
							CLR		T_MS_OVER_FLAG
							
							MOV		WORK_MODE_REG,#0			//P6=1,P7=1 模式1
							MOV		SYSTEM_STATUS,#0

							/*							
							//*************测试*****************************
							MOV		DPTR,#Mode1
							LCALL	SEND_TO_RS232
							//**********************************************
							*/
							RET									//完整模式

READ_SET_MODE_PG2:			JNB		ACC.3,READ_SET_MODE_PG4
							//P6=0,P7=1 模式2							
							MOV		P1,#0FFH					//全亮模式
							SETB	P3.0
							SETB	P3.1
							
							MOV		WORK_MODE_REG,#1			//P6=0,P7=1 模式2
							MOV		SYSTEM_STATUS,#0
							
							MOV		T_MS_TIMER,#0
							CLR		T_MS_OVER_FLAG
							
							/*
							//*************测试*****************************
							MOV		DPTR,#Mode2
							LCALL	SEND_TO_RS232
							//**********************************************
							*/
							
							RET
							
							//P6=1,P7=0 模式3
READ_SET_MODE_PG3:			MOV		SIM_LED_REG_H,#00000011B
							MOV		P1,#11111111B
							MOV		SIM_LED_REG_L,#11111111B
							SETB	P3.0
							SETB	P3.1
							SETB	PORT3_REG.0
							SETB	PORT3_REG.1
							
							MOV		T_MS_TIMER,#0
							MOV		WORK_MODE_REG,#2			//P6=1,P7=0 模式3
							MOV		SYSTEM_STATUS,#0
							
							SETB	T_MS_OVER_FLAG				//全闪模式
							
							/*
							//*************测试*****************************
							MOV		DPTR,#Mode3
							LCALL	SEND_TO_RS232
							//**********************************************
							*/
							
							RET

READ_SET_MODE_PG4:			MOV		P1,#00000000B				//逐亮模式
							CLR		P3.0
							CLR		P3.1
							
							MOV		T_MS_TIMER,#10
							CLR		T_MS_OVER_FLAG
							
							MOV		SIM_LED_REG_H,#00000000B
							MOV		SIM_LED_REG_L,#10000000B	//注意:P1.7=LED1
							
							MOV		WORK_MODE_REG,#3			//P6=0,P7=0 模式4
							MOV		SYSTEM_STATUS,#0
							
							/*
							//*************测试*****************************
							MOV		DPTR,#Mode4
							LCALL	SEND_TO_RS232
							//**********************************************
							*/
							
							RET
;**************************************************************************************************
//模式1 完整模式驱动LED
DRIVER_LED_MODE1_PG:		MOV		A,WORK_MODE_REG
							CJNE	A,#0,DRIVER_LED_MODE1_PG00
							LJMP	DRIVER_LED_MODE1_PG01
DRIVER_LED_MODE1_PG00:		RET

DRIVER_LED_MODE1_PG01:		JB		T_MS_OVER_FLAG,DRIVER_LED_MODE1_PG0
							RET
							
DRIVER_LED_MODE1_PG0:		MOV		A,SYSTEM_STATUS
							CJNE	A,#0,DRIVER_LED_MODE1_PG1
							//全亮2秒
							MOV		P1,#0FFH
							MOV		A,#00000011B
							ORL		A,PORT3_REG
							MOV		PORT3_REG,A
							MOV		P3,A
							MOV		T_MS_TIMER,#30
							CLR		T_MS_OVER_FLAG
							
							MOV		SIM_LED_REG_H,#00000011B
							MOV		SIM_LED_REG_L,#11111111B
							MOV		FLASH_TIME_REG,#8					//闪烁8次
							
							MOV		SYSTEM_STATUS,#1
							
							RET

DRIVER_LED_MODE1_PG1:		CJNE	A,#1,DRIVER_LED_MODE1_PG2
							//全闪3秒,频率=3Hz
							DJNZ	FLASH_TIME_REG,DRIVER_LED_MODE1_PG1_1
							
							MOV		P1,#00000000B
							MOV		A,#11111100B
							ANL		P3,A
							
							MOV		T_MS_TIMER,#2
							CLR		T_MS_OVER_FLAG
							
							MOV		SIM_LED_REG_H,#00000000B
							MOV		SIM_LED_REG_L,#10000000B	//注意:P1.7=LED1
							
							MOV		SYSTEM_STATUS,#2
							
							RET
							
DRIVER_LED_MODE1_PG1_1:		MOV		A,SIM_LED_REG_L
							CPL		A
							MOV		SIM_LED_REG_L,A
							MOV		P1,A
							MOV		A,SIM_LED_REG_H
							CPL		A
							ANL		A,#00000011B
							MOV		SIM_LED_REG_H,A

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -