当前位置:首页 > 光电技术实验指导书
五、参考程序
;*************
功能说明 **************
;用STC的MCU的IO方式控制74HC595驱动8位数码管。
;红外接收程序。适用于市场上用量最大的NEC编码。查询方式, Timer0十六位自动重装, 100us
;应用层查询 B_IR_Press标志为,则已接收到一个键码放在IR_code中, ;数码管左起4位显示用户码, 最右边两位显示数据, 均为十六进制.
;******************************************/
;/************************** 用户定义宏 *******************************/ Fosc_KHZ 率
STACK_POIRTER EQU
Timer0_Reload DIS_DOT DIS_
;*************************************************************** ;***************************************************************
8
EQU
(65536 - (Fosc_KHZ+5)/10);Timer 0 中断频率, 10000次/秒
020H
0D0H
;堆栈开始地址
EQU
22118
;22118KHZ, 用户只需要改动这个值以适应自己实际的频
EQU
DIS_BLACK EQU EQU
010H 011H
AUXR DATA 08EH P4 DATA 0C0H P5 DATA 0C8H P0M1 P0M0 P1M1 P1M0 P2M1 P2M0 P3M1 P3M0 P4M1 P4M0 P5M1 P5M0 P6M1 P6M0 P7M1 P7M0
DATA 0x93 DATA 0x94 DATA 0x91 DATA 0x92 DATA 0x95 DATA 0x96 DATA 0xB1 DATA 0xB2 DATA 0xB3 DATA 0xB4 DATA 0xC9 DATA 0xCA DATA 0xCB DATA 0xCC DATA 0xE1 DATA 0xE2
; P0M1.n,P0M0.n =00--->Standard, 01--->push-pull ; ; ; ; ; ; ; ; ;
=10--->pure input, 11--->open drain =10--->pure input, 11--->open drain =10--->pure input, 11--->open drain =10--->pure input, 11--->open drain =10--->pure input, 11--->open drain =10--->pure input, 11--->open drain =10--->pure input, 11--->open drain
; P1M1.n,P1M0.n =00--->Standard, 01--->push-pull ; P2M1.n,P2M0.n =00--->Standard, 01--->push-pull ; P3M1.n,P3M0.n =00--->Standard, 01--->push-pull ; P4M1.n,P4M0.n =00--->Standard, 01--->push-pull ; P5M1.n,P5M0.n =00--->Standard, 01--->push-pull ; P6M1.n,P6M0.n =00--->Standard, 01--->push-pull
;*************
IO口定义
**************/ //pin 14 SER //pin 12 RCLk
data input store (latch) clock
P_HC595_SER BIT P4.0 ; P_HC595_RCLK BIT P5.4 ; P_HC595_SRCLK BIT P4.3 ;
;************* Flag0
//pin 11 SRCLK Shift data clock
本地变量声明 **************/ DATA 20H BIT
Flag0.0 ;
1ms标志
B_1ms LED8
DATA 30H ; 显示缓冲 30H ~ 37H 9
display_index DATA 38H
cnt_1ms
;************* P_IR_RX
P_IR_RX_temp B_IR_Sync
; 显示位索引
DATA 39H ;
红外接收程序变量声明 ************** BIT P3.6 ;定义红外接收输入IO口
BIT Flag0.1 BIT Flag0.2
;用户不可操作, Last sample ;用户不可操作, 已收到同步标志
IR_SampleCnt DATA 3AH ;用户不可操作, 采样计数 IR_BitCnt IR_UserH IR_UserL IR_data
DATA 3BH ;用户不可操作, 编码位数
DATA 3CH ;用户不可操作, 用户码(地址)高字节
DATA 3DH ;用户不可操作, 用户码(地址)低字节
DATA 3EH ;用户不可操作, 数据原码 DATA 3FH ;用户不可操作, 数据移位
IR_DataShit
B_IR_Press IR_code UserCodeH UserCodeL
BIT Flag0.3 ;用户使用, 按键动作发生
DATA 40H ;用户使用, 红外键码 DATA 41H ;用户使用, 用户码高字节 DATA 42H ;用户使用, 用户码低字节
;*********************************
;******************************************************************* ;*******************************************************************
ORG LJMP
000BH
;1 Timer0 interrupt
F_Timer0_Interrupt
10
ORG LJMP
0000H
;reset
F_Main
;******************************************************************* ;*******************************************************************
;******************** 主程序 **************************/
MOV MOV
SP, #STACK_POIRTER PSW, #0
;选择第0组R0~R7
ORG
A
P0M1, A P0M0, A P1M1, A P1M0, A P2M1, A P2M0, A P3M1, A P3M0, A P4M1, A P4M0, A P5M1, A P5M0, A P6M1, A P6M0, A P7M1, A P7M0, A
;设置为准双向口 ;设置为准双向口 ;设置为准双向口 ;设置为准双向口 ;设置为准双向口 ;设置为准双向口 ;设置为准双向口 ;设置为准双向口
0100H
;reset
F_Main:
CLR MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
USING 0 ;选择第0组R0~R7
11
共分享92篇相关文档