18.lst
来自「单片机C语言程序设计实训100例」· LST 代码 · 共 167 行
LST
167 行
C51 COMPILER V8.08 18 08/12/2009 16:59:54 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 18
OBJECT MODULE PLACED IN 18.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 #define delay4us() {_nop_();_nop_();_nop_();_nop_();}
6
7 sbit RS = P2^0;
8 sbit RW = P2^1;
9 sbit E = P2^2;
10
11 sbit CS = P1^0;
12 sbit CLK = P1^1;
13 sbit DIO = P1^2;
14
15 uchar Display_Buffer[] = "0.00V";
16 uchar code Line1[] = "Current Voltage:";
17
18 void DelayMS(uint ms)
19 {
20 1 uchar i;
21 1 while(ms--)
22 1 {
23 2 for(i=0;i<120;i++);
24 2 }
25 1 }
26
27 bit LCD_Busy_Check()
28 {
29 1 bit result;
30 1 RS = 0;
31 1 RW = 1;
32 1 E = 1;
33 1 delay4us();
34 1 result = (bit)(P0&0x80);
35 1 E = 0;
36 1 return result;
37 1 }
38
39 void LCD_Write_Command(uchar cmd)
40 {
41 1 while(LCD_Busy_Check());
42 1 RS = 0;
43 1 RW = 0;
44 1 E = 0;
45 1 _nop_();
46 1 _nop_();
47 1 P0 = cmd;
48 1 delay4us();
49 1 E = 1;
50 1 delay4us();
51 1 E = 0;
52 1 }
53
54 void Set_Disp_Pos(uchar pos)
55 {
C51 COMPILER V8.08 18 08/12/2009 16:59:54 PAGE 2
56 1 LCD_Write_Command(pos | 0x80);
57 1 }
58
59 void LCD_Write_Data(uchar dat)
60 {
61 1 while(LCD_Busy_Check());
62 1 RS = 1;
63 1 RW = 0;
64 1 E = 0;
65 1 P0 = dat;
66 1 delay4us();
67 1 E = 1;
68 1 delay4us();
69 1 E = 0;
70 1 }
71
72 void LCD_Initialise()
73 {
74 1 LCD_Write_Command(0x38); DelayMS(1);
75 1 LCD_Write_Command(0x0c); DelayMS(1);
76 1 LCD_Write_Command(0x06); DelayMS(1);
77 1 LCD_Write_Command(0x01); DelayMS(1);
78 1 }
79
80 uchar Get_AD_Result()
81 {
82 1 uchar i,dat1=0,dat2=0;
83 1 CS = 0;
84 1 CLK = 0;
85 1 DIO = 1; _nop_(); _nop_();
86 1 CLK = 1; _nop_(); _nop_();
87 1 CLK = 0;DIO = 1; _nop_(); _nop_();
88 1 CLK = 1; _nop_(); _nop_();
89 1 CLK = 0;DIO = 1; _nop_(); _nop_();
90 1 CLK = 1;DIO = 1; _nop_(); _nop_();
91 1 CLK = 0;DIO = 1; _nop_(); _nop_();
92 1 for(i=0;i<8;i++)
93 1 {
94 2 CLK = 1; _nop_(); _nop_();
95 2 CLK = 0; _nop_(); _nop_();
96 2 dat1 = dat1 << 1 | DIO;
97 2 }
98 1 for(i=0;i<8;i++)
99 1 {
100 2 dat2 = dat2 << ((uchar)(DIO)<<i);
101 2 CLK = 1; _nop_(); _nop_();
102 2 CLK = 0; _nop_(); _nop_();
103 2 }
104 1 CS = 1;
105 1 return (dat1 == dat2) ? dat1:0;
106 1 }
107
108 void main()
109 {
110 1 uchar i;
111 1 uint d;
112 1 LCD_Initialise();
113 1 DelayMS(10);
114 1 while(1)
115 1 {
116 2 d = Get_AD_Result()*500.0/255;
117 2 Display_Buffer[0]=d/100+'0';
C51 COMPILER V8.08 18 08/12/2009 16:59:54 PAGE 3
118 2 Display_Buffer[2]=d/10%10+'0';
119 2 Display_Buffer[3]=d%10+'0';
120 2 Set_Disp_Pos(0x01);
121 2 i = 0;
122 2 while(Line1[i]!='\0')
123 2 {
124 3 LCD_Write_Data(Line1[i+1]);
125 3 }
126 2 Set_Disp_Pos(0x46);
127 2 i = 0;
128 2 while(Display_Buffer[i]!='\0')
129 2 {
130 3 LCD_Write_Data(Display_Buffer[i+1]);
131 3 }
132 2 }
133 1 }
134
135
136
137
138
139
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 403 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?