📄 lcd12864.lst
字号:
C51 COMPILER V7.06 LCD12864 11/19/2006 14:04:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE lcd12864.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*****************************************************************/
2 /* */
-
3 /*名称: AD转换+LCD12864显示程序 */
-
-
4 /*功能: 1 AD转换,二进制转换成十进制 */
5 /* 2 显示英文,数字,符号,图片。 */
-
6 /*难度等级: 高 */
-
7 /* 作者: zengrenliang */
8 /* 版权: http://www.51kaifa.com */
9 /*编写日期: 2006.05.20 */
-
-
10 /*****************************************************************/
11
12 #include <reg52.h>
13 #include <string.h>
14
15 #define uchar unsigned char
16
17 /**********引脚定义*********/
18
19 sbit lck = P3^5;//锁存信号
20 sbit addr0 = P1^4;
21 sbit addr1 = P1^5;
22 sbit addr2 = P1^6;
23 sbit cs138 = P1^7;
24
25 /********常用命令及参数定义********/
26 #define DISPON 0x3f
27 #define DISPOFF 0x3e
28 #define DISPFIRST 0xc0
29 #define SETX 0x40
30 #define SETY 0xb8
31 #define LCDBUZY 0x80
32 #define L 0x00
33 #define R 0x40
34 #define LIMIT 0x80
35
36 /**********全局变量************/
37 uchar cbyte;
38 uchar data statu;
39 bit xy;
40
41 /**************函数******************/
42
43 void WrL(uchar x);
44 void WrR(uchar x);
45 void Lcmcls(void);
46 void Lcminit (void);
47 void Putpicture();
48 void delay(unsigned int time);
C51 COMPILER V7.06 LCD12864 11/19/2006 14:04:37 PAGE 2
49 void VtoH8x16change(uchar *hzbuf);
50 void Puthalf(uchar *strch,uchar row,uchar col);
51 void Wrdata(uchar x,uchar row,uchar col);
52 void Locatexy(uchar row,uchar col);
53 void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
54 uchar ADC0804();
55
56
57 extern uchar code char_Table[95][16];
58
59 extern unsigned char code picture[];
60
61 /***************微秒级延时*****************/
62 void delay(unsigned int time)
63 { unsigned int i;
64 1 for(i=0;i<time;i++);
65 1 }
66
67
68 /***********主程序***************/
69 void main(void)
70 { uchar i,j,k;
71 1 float voltage,decimal;
72 1 unsigned int intvolt,tofloat;
73 1
74 1 addr0 = 1;
75 1 addr1 = 0;
76 1 addr2 = 1;//ULN2003片选地址
77 1 P0 = 0x00;//断开继电器A,B
78 1 cs138 = 1;
79 1 cs138 = 0;//数据锁存到U18(74HC574)
80 1
81 1 Lcminit();//LCD初始化
82 1 Putpicture();//显示界面图片
83 1 while(1)
84 1 {
85 2
86 2 voltage = ADC0804();
87 2 voltage = voltage * 0.0391;//将二进制字节数据变成实际电压值 10/256 = 0.0196
88 2 intvolt = voltage;//取整数部分
89 2 tofloat = intvolt;
90 2 decimal = voltage - tofloat;//取小数部分
91 2 decimal = decimal * 100;//小数部分取两位
92 2 i = intvolt % 0x0a + '0';//整数部分个位
93 2 intvolt = decimal;
94 2 j = intvolt % 0x0a + '0';//小数部分低位
95 2 intvolt = intvolt / 0x0a;
96 2 k = intvolt % 0x0a + '0';//小数部分高位
97 2 vWrite8x16Character(&char_Table['V'-0x20][0],3,112,0);//显示电压单位
98 2 vWrite8x16Character(&char_Table[j-0x20][0],3,104,0);//显示小数低位
99 2 vWrite8x16Character(&char_Table[k-0x20][0],3,96,0); //显示小数高位
100 2 vWrite8x16Character(&char_Table['.'-0x20][0],3,88,0); //显示小数点
101 2 vWrite8x16Character(&char_Table[i-0x20][0],3,80,0);//显示整数位
102 2 delay(5000);
103 2 }
104 1 }
105
106 /*******************0804转换程序********************/
107 uchar ADC0804()
108 { uchar adc0804value;
109 1 addr0 = 1;
110 1 addr1 = 1;
C51 COMPILER V7.06 LCD12864 11/19/2006 14:04:37 PAGE 3
111 1 addr2 = 0;//输出AD0804片选地址。
112 1 cs138 = 1;
113 1 P0 = 0xff;//向ADC0804发任何数据,0804开始转换
114 1 WR = 0;
115 1 WR = 1;
116 1 delay(1000);//等待转换完成
117 1 RD = 0;
118 1 adc0804value=P0;//读取转换后的值
119 1 RD = 1;
120 1 cs138 = 0;
121 1 return(adc0804value);
122 1 }
123
124
125 //***********初始化LCD*******************/
126
127 void Lcminit (void)
128 {
129 1 cbyte=DISPOFF;
130 1 WrL(cbyte);
131 1 WrR(cbyte);
132 1 cbyte=DISPON;
133 1 WrL(cbyte);
134 1 WrR(cbyte);
135 1 cbyte=DISPFIRST;
136 1 WrL(cbyte);
137 1 WrR(cbyte);
138 1 Lcmcls();
139 1 Locatexy(0,0);
140 1 }
141
142
143 /***************LCD清屏********************/
144 void Lcmcls(void)
145 { uchar i,j;
146 1 for(i=0;i<8;i++){
147 2 delay(6);
148 2 for(j=0;j<LIMIT;j++){
149 3 delay(6);
150 3 Wrdata(0x0,i,j);
151 3 }
152 2 }
153 1 }
154
155 /**************写左区***************/
156
157 void WrL(uchar x)
158 {
159 1
160 1 P0=0xFF;//P0口送FF,准备读
161 1 lck = 0;
162 1 P1 = 0x2a;//ELCD=1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -