📄 ex6-2.lst
字号:
C51 COMPILER V8.06 EX6_2 07/18/2007 20:30:13 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE EX6_2
OBJECT MODULE PLACED IN ex6-2.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE ex6-2.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 标题:范例 6-2
3 版本:1.0
4 Target:89S51
5 程序描述:数字电压表*/
6 /* **************************************************** */
7 #include <REGX51.H>
8 #define TIMER0_COUNT 0xDC11 /* 10000h-(11,059,200/(12*
9 FREQ))-17 */
10 /* LCD command */
11 #define DISPLAY_ON 56
12 #define CURSOR_OFF 12
13 #define CURSOR_RIGHT 6
14 #define CLEAR 1
15 #define CURSOR_HOME 2
16 #define GOTO_LINE_2 192
17 #define GOTO_LINE_1 128
18 /* LCD control lines */
19 #define ENABLE 1
20 #define DISABLE 0
21 #define READ 1
22 #define WRITE 0
23 #define COMMAND 0
24 #define DATA 1
25 #define rs P3_5
26 #define rw P3_4
27 #define enable P3_3
28 #define adc_in P0
29 #define adc_rd P2_0
30 #define adc_wr P2_1
31 static unsigned timer0_tick;
32 const char int2char[]="0123456789";
33 void delay_2ms(void) { /* 时间延迟函数 */
34 1 unsigned char i,j; /* 延迟2 ms */
35 1 for (i=0;i<3;i++)
36 1 for(j=0;j<255;j++)
37 1 ;
38 1 }
39 void write_LCD_command(unsigned command)
40 {
41 1 rw=WRITE;
42 1 rs=COMMAND;
43 1 enable=ENABLE;
44 1 P1=command;
45 1 enable=DISABLE;
46 1 rs=1;
47 1 rw=1;
48 1 delay_2ms();
49 1 }
50 void write_LCD_data(unsigned LCDdata)
51 {
52 1 rw=WRITE;
53 1 rs=DATA;
54 1 enable=ENABLE;
55 1 P1=LCDdata;
C51 COMPILER V8.06 EX6_2 07/18/2007 20:30:13 PAGE 2
56 1 enable=DISABLE;
57 1 rs=0;
58 1 rw=1;
59 1 delay_2ms();
60 1 }
61 void set_LCD(void)
62 {
63 1 write_LCD_command(DISPLAY_ON);
64 1 write_LCD_command(CURSOR_OFF);
65 1 write_LCD_command(CURSOR_RIGHT);
66 1 }
67 void clear_LCD()
68 {
69 1 write_LCD_command(CLEAR);
70 1 write_LCD_command(CURSOR_HOME);
71 1 }
72 display_LCD_string(char *p)
73 {
74 1 while(*p)
75 1 {
76 2 write_LCD_data(*p);
77 2 p++;
78 2 }
79 1 }
80 void gotoxy(unsigned x,unsigned y)
81 {
82 1 if(x==1)
83 1 write_LCD_command(GOTO_LINE_1+y);
84 1 else
85 1 write_LCD_command(GOTO_LINE_2+y);
86 1 }
87 void display_LCD_number(unsigned char number)
88 {
89 1 unsigned char x,y,i=2;
90 1 int z;
91 1 z=(int) number;
92 1 z=z<<1;
93 1 x=z/10;
94 1 y=z-x*10;
95 1 gotoxy(2,3);
96 1 write_LCD_data(int2char[y]);
97 1 z=x;
98 1 x=z/10;
99 1 y=z-x*10;
100 1 gotoxy(2,2);
101 1 write_LCD_data(int2char[y]);
102 1 gotoxy(2,1);
103 1 display_LCD_string(".");
104 1 z=x;
105 1 x=z/10;
106 1 y=z-x*10;
107 1 gotoxy(2,0);
108 1 write_LCD_data(int2char[y]);
109 1 gotoxy(2,4);
110 1 display_LCD_string("Volt");
111 1 }
112 static void timer0_isr(void) interrupt 1 using 1
113 {
114 1 TR0=0;
115 1 TL0=(TIMER0_COUNT & 0x00FF);
116 1 TH0=(TIMER0_COUNT >> 8);
117 1 TR0=1;
C51 COMPILER V8.06 EX6_2 07/18/2007 20:30:13 PAGE 3
118 1 timer0_tick++;
119 1 if (timer0_tick==200) {
120 2 adc_wr=0;
121 2 timer0_tick=0;
122 2 adc_wr=1;
123 2 }
124 1 }
125 static void int0_isr(void) interrupt 0 using 0
126 {
127 1 unsigned char voltage;
128 1 adc_in=0xFF;
129 1 adc_rd=0;
130 1 voltage=adc_in;
131 1 voltage=voltage <<1;
132 1 adc_rd=1;
133 1 gotoxy(2,0);
134 1 display_LCD_number(voltage);
135 1 }
136 static void timer0_initialize(void)
137 {
138 1 EA=0;
139 1 timer0_tick=0;
140 1 TR0=0;
141 1 TMOD &= 0XF0;
142 1 TMOD |=0x01;
143 1 TL0=(TIMER0_COUNT & 0x00FF);
144 1 TH0=(TIMER0_COUNT >> 8);
145 1 PT0=0;
146 1 ET0=1;
147 1 TR0=1;
148 1 EA=1;
149 1 }
150 void main (void) {
151 1 set_LCD();
152 1 clear_LCD();
153 1 display_LCD_string("welcome to use");
154 1 timer0_initialize();
155 1 IT0=1;
156 1 EX0=1;
157 1 while(1); /* 无穷循环 */
158 1 }
159
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 418 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -