📄 ht1621.lst
字号:
C51 COMPILER V9.01 HT1621 05/20/2012 12:25:30 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE HT1621
OBJECT MODULE PLACED IN .\list\HT1621.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HT1621.c BROWSE DEBUG OBJECTEXTEND PRINT(.\list\HT1621.lst) OBJECT(.\list\H
-T1621.obj)
line level source
1
2 /*------------------------------------------------------------------*/
3 /* --- STC MCU International Limited -------------------------------*/
4 /* --- STC 1T Series MCU RC Demo -----------------------------------*/
5 /* --- Mobile: (86)13922805190 -------------------------------------*/
6 /* --- Fax: 86-755-82944243 ----------------------------------------*/
7 /* --- Tel: 86-755-82948412 ----------------------------------------*/
8 /* --- Web: www.STCMCU.com -----------------------------------------*/
9 /* If you want to use the program or the program referenced in the */
10 /* article, please specify in which data and procedures from STC */
11 /*------------------------------------------------------------------*/
12
13
14 /************* 功能说明 **************
15
16 红外接收程序。适用于市场上用量最大的HT6121/6122及其兼容IC的编码。
17
18 对于用户码与User_code定义不同的遥控器,程序会将用户码一起从串口输出。
19
20 使用模拟串口发送监控显示编码,显示内容为ASCII码和中文。
21
22 本接收程序基于状态机的方式,占用CPU的时间非常少。
23
24 HEX文件在本目录的/list里面。
25
26 ******************************************/
27
28
29 /************* 用户系统配置 **************/
30
31 #define MAIN_Fosc 12000000L //定义主时钟, 模拟串口和红外接收会自动适应。5~36MHZ
32
33 #define D_TIMER0 125 //选择定时器时间, us, 红外接收要求在60us~250us之间
34
35 #define User_code 0xFD02 //定义红外接收用户码
36
37
38 /************* 以下宏定义用户请勿修改 **************/
39 #include "reg51.H"
40 #define uchar unsigned char
41 #define uint unsigned int
42
43 #define freq_base (MAIN_Fosc / 1200)
44 #define Timer0_Reload (65536 - (D_TIMER0 * freq_base / 10000))
45
46
47
48
49 /************* 本地常量声明 **************/
50
51
52
53 /************* 本地变量声明 **************/
54 sbit P_TXD1 = P3^1; //定义模拟串口发送脚,打印信息用
C51 COMPILER V9.01 HT1621 05/20/2012 12:25:30 PAGE 2
55 sbit P_IR_RX = P1^0; //定义红外接收输入端口
56
57 bit P_IR_RX_temp; //Last sample
58 bit B_IR_Sync; //已收到同步标志
59 uchar IR_SampleCnt; //采样计数
60 uchar IR_BitCnt; //编码位数
61 uchar IR_UserH; //用户码(地址)高字节
62 uchar IR_UserL; //用户码(地址)低字节
63 uchar IR_data; //数据原码
64 uchar IR_DataShit; //数据反码
65
66 bit B_IrUserErr; //User code error flag
67 bit B_IR_Press; //Key press flag,include repeat key.
68 uchar IR_code; //IR code 红外键码
69
70
71 /************* 本地函数声明 **************/
72 void Tx1Send(uchar dat);
73 uchar HEX2ASCII(uchar dat);
74 void InitTimer(void);
75 void PrintString(unsigned char code *puts);
76
77
78
79 /************* 外部函数和变量声明 *****************/
80
81
82
83 /********************* 主函数 *************************/
84 void main(void)
85 {
86 1 InitTimer(); //初始化Timer
87 1
88 1 PrintString("****** STC系列MCU红外接收程序 2010-12-10 ******\r\n"); //上电后串口发送一条提示信息
89 1
90 1 while(1)
91 1 {
92 2 if(B_IR_Press) //有IR键按下
93 2 {
94 3 PrintString("红外码: 0x"); //提示红外键码
95 3 Tx1Send(HEX2ASCII(IR_code >> 4)); //键码高半字节
96 3 Tx1Send(HEX2ASCII(IR_code)); //键码低半字节
97 3 if(B_IrUserErr) //用户码错误,则发送用户码
98 3 {
99 4 Tx1Send(' '); //发空格
100 4 Tx1Send(' '); //发空格
101 4 PrintString("用户码: 0x"); //提示用户码
102 4 Tx1Send(HEX2ASCII(IR_UserH >> 4)); //用户码高字节的高半字节
103 4 Tx1Send(HEX2ASCII(IR_UserH)); //用户码高字节的低半字节
104 4 Tx1Send(HEX2ASCII(IR_UserL >> 4)); //用户码低字节的高半字节
105 4 Tx1Send(HEX2ASCII(IR_UserL)); //用户码低字节的低半字节
106 4 }
107 3 Tx1Send(0x0d); //发回车
108 3 Tx1Send(0x0a); //发回车
109 3 B_IR_Press = 0; //清除IR键按下标志
110 3 }
111 2 }
112 1 }
113
114
115 /********************* 十六进制转ASCII函数 *************************/
116 uchar HEX2ASCII(uchar dat)
C51 COMPILER V9.01 HT1621 05/20/2012 12:25:30 PAGE 3
117 {
118 1 dat &= 0x0f;
119 1 if(dat <= 9) return (dat + '0'); //数字0~9
120 1 return (dat - 10 + 'A'); //字母A~F
121 1 }
122
123
124
125
126 //*******************************************************************
127 //*********************** IR Remote Module **************************
128
129 //*********************** IR Remote Module **************************
130 //this programme is used for Receive IR Remote (HT6121).
131
132 //data format: Synchro,AddressH,AddressL,data,/data, (total 32 bit).
133
134 //send a frame(85ms), pause 23ms, send synchro of another frame, pause 94ms
135
136 //data rate: 108ms/Frame
137
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -