📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 05/31/2008 19:14:38 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C_H\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\main.lst) OBJECT(main.obj)
line level source
1 #include "Includes.h"
2
3
4 unsigned char datTem[2]={0,0}; //温度值储存 datTem[1]高8位 datTem[0]低8位
5 unsigned char key=0; //键盘扫描键值
6 unsigned char uart_receive_date=0; //串口接收数据
7 bit flag=0;
8
9 unsigned char code uart_transmit[]={"uart transmit"};
10 unsigned char code spi_transmit[]={"SPI transmit"};
11
12 void send_char_uart( unsigned char date); //串口发送
13 void com_init(); //串口初始化
14
15 /*********************LCD初始化后显示"hello"****************************************/
16 void hello(void)
17 {
18 1 unsigned char X[14]={"Hello everyone"},a=0x80,i;
19 1 WriteCommandLCM(0x01,1);
20 1 for(i=0;i<14;i++,a++){
21 2 display_lcm(X[i],a);
22 2 Delay_Xms(5); Delay_Xms(5);
23 2 }
24 1 for(i=0;i<200;i++){
25 2 Delay_Xms(5); Delay_Xms(5);
26 2 }
27 1 WriteCommandLCM(0x01,1);
28 1 }
29 /***************显示温度************/
30 void temp_view(unsigned char *ddate)
31 {
32 1 unsigned int temp1=0,temp0=0,a,b,c,g,h,i,j,z;
33 1 if((ddate[0]==0xFF)&&(ddate[1]==0xFF)){ ddate[0]=0;ddate[1]=0;}
34 1 z=ddate[1]&0xF0;
35 1 if(z>0) //正负温度符号判断显示
36 1 display_lcm('-',0xc0);
37 1 else
38 1 display_lcm('+',0xc0);
39 1 if(z==0){ //正温度处理
40 2 temp1= ((ddate[1]&0x0F)<<4)+((ddate[0]&0xF0)>>4);
41 2 temp0=(ddate[0]&0x0F)*625;
42 2 }
43 1 else { //负温度处理
44 2 temp1= (((~ddate[1])&0x0F)<<4)+(((~ddate[0]+8)&0xF0)>>4);
45 2 temp0=((~ddate[0]+1)&0x0F)*625;
46 2 }
47 1 a=(temp1%1000)/100;
48 1 display_lcm(a+'0',0xc1);
49 1 b=(temp1%100)/10;
50 1 display_lcm(b+'0',0xc2);
51 1 c=(temp1%10)/1;
52 1 display_lcm(c+'0',0xc3);
53 1
54 1 display_lcm('.',0xc4); // 显示小数点
55 1
C51 COMPILER V7.50 MAIN 05/31/2008 19:14:38 PAGE 2
56 1 g=(temp0%10000)/1000;
57 1 display_lcm(g+'0',0xc5);
58 1 h=(temp0%1000)/100;
59 1 display_lcm(h+'0',0xc6);
60 1 i=(temp0%100)/10;
61 1 display_lcm(i+'0',0xc7);
62 1 j=(temp0%10)/1;
63 1 display_lcm(j+'0',0xc8);
64 1
65 1 }
66
67 /***************主函数***********************************/
68 void main()
69 {
70 1 unsigned char baiwei=0,gewei=0,shiwei=0;
71 1 unsigned int shifen=0,baifen=0,qianfen=0,wanfen=0;
72 1
73 1 LCMInit();
74 1 com_init();
75 1 hello();
76 1 do{
77 2 temp_view(datTem);
78 2 key=keyscan();
79 2
80 2
81 2 if(uart_receive_date!=0) display_lcm(uart_receive_date,0x8f);
82 2
83 2 baiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%1000/100)+48;
84 2 shiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%100/10)+48;
85 2 gewei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%10/1)+48;
86 2 shifen=(((datTem[0]&0x0F)*625)%10000/1000)+48;
87 2 baifen=(((datTem[0]&0x0F)*625)%1000/100)+48;
88 2 qianfen=(((datTem[0]&0x0F)*625)%100/10)+48;
89 2 wanfen=(((datTem[0]&0x0F)*625)%10/1)+48;
90 2
91 2
92 2 switch(key-'A')
93 2 {
94 3 case 0: {key=0;SPI_Transmit('A');} break;
95 3 case 1: {key=0;SPI_Transmit('B');} break;
96 3 case 2: {key=0;SPI_Transmit('C');} break;
97 3 case 3: {key=0;SPI_Transmit('D');} break;
98 3 case 4: {key=0;SPI_Transmit('E');} break;
99 3 case 5: {key=0;SPI_Transmit('F');} break;
100 3 case 6: { key=0; //G串口通信
101 4 diaplay_string(uart_transmit,13);
102 4 send_char_uart(baiwei);
103 4 send_char_uart(shiwei);
104 4 send_char_uart(gewei);
105 4 send_char_uart('.');
106 4 send_char_uart(shifen);
107 4 send_char_uart(baifen);
108 4 send_char_uart(qianfen);
109 4 send_char_uart(wanfen);
110 4 send_char_uart(' ');
111 4 WriteCommandLCM(0x01,1);
112 4 } break;
113 3 case 7: {key=0;SPI_Transmit('G');} break;
114 3 default : {} break;
115 3 if(uart_receive_date!=0) display_lcm(uart_receive_date,0x8f);
116 3 uart_receive_date=0;
117 3 }
C51 COMPILER V7.50 MAIN 05/31/2008 19:14:38 PAGE 3
118 2 }while(1);
119 1 }
120
121 /************************************************
122 UART 串口通信程序
123 *************************************************/
124 /*************串口初始化*********************/
125 void com_init()
126 {
127 1 TMOD=0x20; //定时器1方式2
128 1 TH1=0xfd; //波特率9600
129 1 TL1=0xfd;
130 1 SCON=0x50; //串口工作方式1,允许接收
131 1 PCON= 0x00; // 波特率不倍增
132 1 TR1=1; //启动定时
133 1 IE=0x91; //开串口中断 等效于 EA=1;ES=1;EX0=1
134 1 }
135
136
137 /*************向串口发送一个字符*********************/
138 void send_char_uart( unsigned char date)
139 {
140 1 EA=0;
141 1 SBUF=date;
142 1 while(TI==0);
143 1 TI= 0 ;
144 1 EA=1;
145 1 }
146
147 /*************串口中断函数*********************/
148 void Uart_receive(void) interrupt 4 //串口中断接收
149 {
150 1 EA=0;
151 1 if(RI)
152 1 {
153 2 uart_receive_date=SBUF;
154 2 key=uart_receive_date;
155 2 RI=0;
156 2 }
157 1 else TI=0; //发送中断。则无操作
158 1 EA=1;
159 1 }
160 /*************INT1中断函数*********************/
161 void SPI_INT0(void) interrupt 0
162 {
163 1 EA=0;
164 1 while(MOSI==0){
165 2 if(flag==0){ datTem[1]=SPI_Receive(); flag=~flag;}
166 2 else {datTem[0]=SPI_Receive(); flag=~flag;}
167 2 }
168 1 EA=1;
-
-
-
-
-
169 1 }
170 /************************************************
171 THE END OF FILE
172 *************************************************/
C51 COMPILER V7.50 MAIN 05/31/2008 19:14:38 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1105 ----
CONSTANT SIZE = 41 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 36
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -