📄 main.lst
字号:
C51 COMPILER V7.07 MAIN 11/29/2008 23:08:07 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE main.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <c8051f310.h>
2 #include <intrins.h>
3 #include "Lcd.h"
4
5 sbit Lcd_EN=P2^2;
6 sbit Lcd_RW=P2^1;
7 sbit Lcd_RS=P2^0;
8 sbit Busy=P1^7;
9
10 sbit Led1=P2^7;
11 sbit Led2=P2^6;
12 sbit Led3=P2^5;
13
14 sbit Key1=P0^1;
15 sbit Key2=P0^0;
16
17 sbit Key3=P3^1;
18 sbit Key4=P3^2;
19 sbit Key5=P3^3;
20
21 unsigned char Key_Value=0;
22 unsigned char Need_to_Send=0;
23
24 unsigned char Present_State=0;
25 unsigned int Time_Out_Count=0;
26 unsigned int Recv_Out_Times=0;
27 unsigned int Recv_Time_Out=0;
28 unsigned int Work_Time_Out=0;
29
30 unsigned char Buf_Temp;
31 unsigned char Uart_Coun=0;
32 unsigned char Uart_Flag=0;
33 unsigned char delay_num=0;
34 //unsigned char x,y;
35 unsigned char serial_rx_buff[8];
36 unsigned char serial_tx_buff[8];
37 unsigned char LED_Count;
38 unsigned char Uart_Enable=0;
39 unsigned char Key_Enable=1;
40
41 //unsigned char KEY[2][3]={1,2,3,4,5,6};
42
43 void INIT_SYS_CLK(void)
44 {
45 1
46 1 OSCXCN = 0x67; //启动外部振荡器用 24 MHz 晶体 设置外部振荡器控制寄存器
47 1 while (!(OSCXCN & 0x80)); // 等待晶体稳定
48 1 CLKSEL = 0x01; //设置CLKSL0为1,选择外部振荡 设置时钟选择寄存器
49 1 OSCICN = 0x08; //选择外部振荡器作为系统时钟源 //使能丢失时钟检测器
50 1 }
51
52 void WDT_Init(void)
53 {
54 1 PCA0MD&= ~0x40; //禁止WDT
55 1 PCA0MD= 0x00;
C51 COMPILER V7.07 MAIN 11/29/2008 23:08:07 PAGE 2
56 1 }
57
58 //void SendChar(unsigned char chr)
59 //{
60 // SBUF0=chr; /*将接收到数据送出*/
61 // while(!TI0);
62 // TI0 = 0;
63 //}
64
65 void SendString (unsigned char *str, unsigned char strlen)
66 {
67 1 unsigned char m = 0;
68 1 do
69 1 {
70 2 SBUF0 = *(str + m);
71 2 while(!TI0);
72 2 TI0 = 0;
73 2 m ++;
74 2 }
75 1 while (m < strlen);
76 1 }
77
78 void Timer0_Init (void)
79 {
80 1 CKCON|=0x04;
81 1 TMOD|=0x1; //16Bit
82 1 TR0 = 0; // 停止定时器0
83 1 TH0 = (-SYSCLK/1000) >> 8; // 定时器1ms溢出
84 1 TL0 = -SYSCLK/1000;
85 1 TR0 = 1; // 启动定时器
86 1 IE|= 0x2; //定时器0中断允许
87 1 }
88
89 void Timer0_ISR (void) interrupt 1 //1ms
90 {
91 1 TH0 = (-SYSCLK/1000) >> 8;
92 1 TL0 = -SYSCLK/1000;
93 1 delay_num++;
94 1 Time_Out_Count++;
95 1 Recv_Time_Out++;
96 1 if (Recv_Time_Out>=1000)
97 1 {
98 2 Recv_Time_Out=0;
99 2 Recv_Out_Times++;
100 2 }
101 1 TF0=0;
102 1 }
103
104 void UATR0_ISR(void) interrupt 4
105 {
106 1 if(RI0)
107 1 {
108 2 RI0 = 0;
109 2 //Led2=~Led2;
110 2 Buf_Temp =SBUF0;
111 2 if (Uart_Coun<8)
112 2 {
113 3 serial_rx_buff[Uart_Coun]=Buf_Temp;
114 3 Uart_Coun++;
115 3 }
116 2 if (Uart_Coun >=8)
117 2 {
C51 COMPILER V7.07 MAIN 11/29/2008 23:08:07 PAGE 3
118 3 Uart_Flag=1;
119 3 Uart_Coun=0;
120 3 Led2=~Led2;
121 3 }
122 2 }
123 1 }
124
125 void RS232_Init (void)
126 {
127 1 SCON0 = 0x10; // SCON0: 8-bit variable bit rate
128 1 if (SYSCLK/BAUD_RATE/2/256 < 1)
129 1 {
130 2 TH1 = -(SYSCLK/BAUD_RATE/2);
131 2 CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
132 2 CKCON |= 0x08;
133 2 }
134 1 else if (SYSCLK/BAUD_RATE/2/256 < 4)
135 1 {
136 2 TH1 = -(SYSCLK/BAUD_RATE/2/4);
137 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
138 2 CKCON |= 0x09;
139 2 }
140 1 else if (SYSCLK/BAUD_RATE/2/256 < 12)
141 1 {
142 2 TH1 = -(SYSCLK/BAUD_RATE/2/12);
143 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
144 2 }
145 1 else
146 1 {
147 2 TH1 = -(SYSCLK/BAUD_RATE/2/48);
148 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
149 2 CKCON |= 0x02;
150 2 }
151 1
152 1 TL1 = TH1; // init Timer1
153 1 TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
154 1 TMOD |= 0x20;
155 1 TR1 = 1; // START Timer1
156 1 ES0 = 1;
157 1 TI0 = 0;
158 1 RI0 = 0;
159 1 }
160
161 void INIT_PORT (void)
162 {
163 1 XBR1 = 0x40 ; //XBARE位置1,交叉开关使能。
164 1 XBR0 = 0x09 ; //SYSCLK位置1:/SYSCLK连到端口引脚。URT0E置1,1:UART TX0, RX0连到端口引脚P0.4和P0.5。
-
165 1
166 1 P0MDIN = 0xf3 ; //端口0输入寄存器配置,p0.2,p0.3接外部晶振,数字输入置1
167 1 P0SKIP = 0x0c; //端口0跳过寄存器配置,p0.2,p0.3接外部晶振
168 1
169 1 P1MDIN = 0xff;
170 1 P1MDOUT = 0xff;
171 1
172 1 P0MDOUT |= 0x10;
173 1 P2MDOUT = 0xff ;//设置为推挽输出
174 1 }
175
176 void DetectBusy(void)
177 {
178 1 P1MDOUT = 0x00;
C51 COMPILER V7.07 MAIN 11/29/2008 23:08:07 PAGE 4
179 1 Lcd_EN = 0;
180 1 Lcd_RS = 0 ;
181 1 Lcd_RW = 1 ;
182 1 _nop_();
183 1 Lcd_EN = 1;
184 1 _nop_();
185 1 _nop_();
186 1 _nop_();
187 1 _nop_();
188 1 _nop_();
189 1 while(Busy==1) ; //Busy为P1.7
190 1 delay_num=0;
191 1 while(delay_num<2) //2ms
192 1 {;}
193 1 Lcd_EN = 0;
194 1 P1MDOUT = 0xff;
195 1 }
196
197 void LcdWriteCmd(unsigned char value)
198 {
199 1 Lcd_RS = 0 ; //写命令为0,写数据为1
200 1 Lcd_RW = 0 ; //写为0,读为1
201 1 P1 = value ;
202 1 Lcd_EN = 1; //EN高脉冲
203 1 _nop_();
204 1 Lcd_EN = 0;
205 1 }
206
207 void LcdWriteData(unsigned char value)
208 {
209 1 Lcd_RS = 1 ; //写命令为0,写数据为1
210 1 Lcd_RW = 0 ; //写为0,读为1
211 1 P1 = value ;
212 1 Lcd_EN = 1; //EN高脉冲
213 1 _nop_();
214 1 Lcd_EN = 0;
215 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -