📄 mcs51-项目开发经典.lst
字号:
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/10/2008 19:58:27 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MCS51__钅靠猒_____
OBJECT MODULE PLACED IN MCS51-项目开发经典.OBJ
COMPILER INVOKED BY: E:\Program Files\Keilu2\C51\BIN\C51.EXE MCS51-项目开发经典.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //=================================================================================================
2 // 项目名:MCS51-项目开发经典
3 // 硬件文件名:51Studay.DDB
4 // 程序组目录名:MCS51-项目开发经典
5 // 开始时间:2007年5月21日
6 // 完成时间:2007年6月10日
7 //-------------------------------------------------------------------------------------------------
8 // 程序中用到哪些C51标准函数,就需要把该函数对应的头文件包含进来
9 //-------------------------------------------------------------------------------------------------
10 #include <intrins.h>
11 #include <string.h>
12 #include <absacc.h>
13 #include <reg52.h>
14 //-------------------------------------------------------------------------------------------------
15 // 为提高书写效率做以下宏定义
16 //-------------------------------------------------------------------------------------------------
17 #define uchar unsigned char
18 #define uint unsigned int
19 #define ulong unsigned long
20 #define CLOSE 1
21 #define OPEN 0
22 //-------------------------------------------------------------------------------------------------
23 // HD7279操控位及指令宏定义
24 //-------------------------------------------------------------------------------------------------
25 sbit CS_7279 = P1^0;
26 sbit CLK_7279 = P1^1;
27 sbit DATA_7279= P1^2;
28 sbit KEY_7279 = P1^3;
29
30 // HD7279指令宏定义:不带数据的纯指令
31 #define HD7279_RESET 0xa4 //复位,相当于重新上电
32 #define HD7279_TEST 0xbf //测试,点亮全部LED并闪烁
33 #define HD7279_RL 0xa1 //左移1位
34 #define HD7279_RR 0xa0 //右移1位
35 #define HD7279_RLC 0xa3 //循环左移
36 #define HD7279_RRC 0xa2 //循环右移
37 // HD7279指令宏定义:带有数据的指令
38 #define HD7279_DECODE0 0x80 //译码方式0
39 #define HD7279_DECODE1 0xc8 //译码方式1
40 #define HD7279_UNDECODE 0x90 //译码方式2: 不译码
41 #define HD7279_FLASH 0x88 //闪烁指令,后跟8位数据 D8|D7|D6|D5|D4|D3|D2|D1,某位置0则该位闪烁
42 #define HD7279_HIDE 0x98 //消隐指令,后跟8位数据 D8|D7|D6|D5|D4|D3|D2|D1,某位置0则该位消隐
43 #define HD7279_SEGON 0xe0 //单段亮
44 #define HD7279_SEGOFF 0xc0 //单段灭
45 #define HD7279_READ_KEY 0x15 //读按键代码,读出的数值对应按下的键,无键按下时数值为0xff.
46
47 //=================================================================================================
48 #define TEST_74HC595 1
49 #define TEST_24C02 2
50 #define TEST_93C46 3
51 #define SET_SD2000 4
52 #define READ_SD2000 5
53 #define TEST_18B20 6
54 #define TEST_HD7279 7
55 #define TEST_BIT_IO 8
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/10/2008 19:58:27 PAGE 2
56 #define TEST_TLC2543 9
57 #define TEST_TLC5617 10
58 #define TEST_PWM_DA 11
59 #define TEST_L297 12
60 #define TEST_DC_MOTOR 13
61 #define TEST_LCM 14
62
63 //-------------------------------------------------------------------------------------------------
64 // 操作UART串口相关的全局变量
65 //-------------------------------------------------------------------------------------------------
66 uchar idata uart_buffer[40];//串口接收缓冲区,可接收字符串的最大长度为40
67 uchar uart_buffer_address;//串口接收缓冲区地址计数器
68 bit uart_receive_start; //串口接收启动
69 bit uart_receive_ok; //串口接收(UART0)中断里已接收完整消息标志
70 bit kaiguan;
71 //-------------------------------------------------------------------------------------------------
72 // 键盘扫描相关的全局变量
73 //-------------------------------------------------------------------------------------------------
74 uchar key_value_previous;
75 uchar key_press_counter;
76 uchar key_value_main;
77 uchar key_press_timer;
78 //-------------------------------------------------------------------------------------------------
79 uchar t1_delay_time;//50毫秒计数器累加变量,在T2中断里累加
80 bit i2c_response_signal;//I2C总线应答信号
81 uint idata temporary_data[10];//临时数据
82 uchar idata test_command;//存储串口接收的测试命令
83 uchar idata weizhi;
84 uint motor_speed_delay;
85 //-------------------------------------------------------------------------------------------------
86 // 函数声明
87 //-------------------------------------------------------------------------------------------------
88 void init_cpu(void);
89 void ctrl_74hc595(uchar led_display_data);
90 void HD7279_LongDelay(void);
91 void HD7279_ShortDelay(void);
92 void HD7279_SendByte(uchar out_byte);
93 uchar HD7279_ReceiveByte(void);
94 uchar HD7279_GetKey(void);
95 void HD7279_ShowData(uchar Position,uchar ShowData,bit Have_DP);
96 void HD7279_Showflash(uchar Position_flash);
97 void HD7279_Initial(void);
98
99 void uart_byte_out(uchar uart_data_out);
100 void uart_string_out(char * char_array);
101 void uart_data_decimalist_out(uint data_to_out);
102 void uart_newline(uchar newline_number);
103 void uart_space(uchar space_number);
104
105 uchar change_bcd_to_hex(uchar shu);
106 uchar change_hex_to_bcd(uchar shu);
107 uchar change_askii_to_hex(uchar askii);
108 uchar change_hex_to_askii(uchar data_hex);
109
110 void get_data(uchar * how_much_data);
111 char * strstr(char * haystack, char * needle);
112
113 //=================================================================================================
114 //===================== ================================================
115 //===================== 主程序 ================================================
116 //===================== ================================================
117 //=================================================================================================
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/10/2008 19:58:27 PAGE 3
118 void main (void)
119 { uchar i;
120 1 init_cpu();
121 1 HD7279_Initial();
122 1 key_value_main=0xff;
123 1 HD7279_SendByte( HD7279_RESET );//复位
124 1
125 1 wqyloop:
126 1 for(i=0;i<10;i++) //数码管测试
127 1 { HD7279_ShowData(1,i,1);
128 2 HD7279_ShowData(2,i,1);
129 2 HD7279_ShowData(3,i,1);
130 2 HD7279_ShowData(4,i,1);
131 2 HD7279_ShowData(5,i,1);
132 2 HD7279_ShowData(6,i,1);
133 2 HD7279_ShowData(7,i,1);
134 2 HD7279_ShowData(8,i,1);
135 2 for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
136 2 }
137 1 HD7279_ShowData(1,1,1);
138 1 for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
139 1 HD7279_ShowData(2,2,1);
140 1 for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
141 1 HD7279_ShowData(3,3,1);
142 1 for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
143 1 HD7279_ShowData(4,4,1);
144 1 for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
145 1 HD7279_ShowData(5,5,1);
146 1 for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
147 1
148 1 HD7279_Showflash(3);
149 1 for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
150 1
151 1
152 1 if(key_value_main!=0xff)//如果有按键触发则如下
153 1 {uart_string_out("You have pushed the button S");
154 2 uart_byte_out(change_hex_to_askii(key_value_main));
155 2 uart_newline(1);
156 2 key_value_main=0xff;//使用完本次触发的键值后必须清空键值,否则主程序认为在连续触发该键
157 2 }
158 1
159 1 goto wqyloop;
160 1
161 1 }//The end of main()
162
163 //########################## 主程序结束 #########################################################
164 //########################## 子程序开始 #########################################################
165
166 //=================================================================================================
167 // 函数功能:CPU初始化函数
168 // 串口波特率可以由T1或T2产生,本例中用T1产生波特率
169 // T2用于50毫秒精确定时
170 // T0用于PWM控制中频率的时基
171 //=================================================================================================
172 void init_cpu(void)
173 {
174 1 TMOD=0x12;//T1为16位计数器,T0为8位自动重装载计数器
175 1
176 1 ET1=1;
177 1 TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
178 1 TL1=0x00;
179 1 TR1=1;//T1开始定时
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/10/2008 19:58:27 PAGE 4
180 1
181 1
182 1 T2CON=0x30;//定时器T2工作于波特率发生器方式
183 1 RCAP2H=0xff;//11.0592M晶振,9600bps初值
184 1 RCAP2L=0xdc;
185 1 TH2=0xff;
186 1 TL2=0xdc;
187 1 //RCAP2H=0xfe;//11.0592M晶振,1200bps初值
188 1 //RCAP2L=0xe0;
189 1 //TH2=0xfe;
190 1 //TL2=0xe0;
191 1 TR2=1;//允许T2中断
192 1
193 1 ES=1; //串口中断允许
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -