?? digital-v-lcd.lst
字號:
C51 COMPILER V8.08 DIGITAL_V_LCD 11/17/2008 19:55:28 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DIGITAL_V_LCD
OBJECT MODULE PLACED IN digital-V-LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE digital-V-LCD.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 //Editor: zhangmin
3 //Version: V1.0
4 //Description: LCD1602顯示數字電壓表,精度:0.01V
5 //Date:2008.11.11
6 //CPU:35%
7 /**********************************************************
8 頭文件定義
9 **********************************************************/
10
11 #include<at89x51.h>
12
13 #include<intrins.h>
14
15 /**********************************************************
16 自變量定義
17 **********************************************************/
18 #define uchar unsigned char
19 #define uint unsigned int
20 //#define INTERVAL 20 //定義采樣周期
21 sbit RS=P3^4; //LCD數據/指令選擇端
22 sbit RW=P3^3; //LCD讀寫選擇端
23 sbit E=P3^2; //LCD使能信號,從低到高有效
24 sbit busyFlag=P2^7; //LCD讀忙標志位
25 sbit dataIn=P1^1; //TLC2543控制字輸入端
26 sbit dataOut=P1^0; //TLC2543數據輸出
27 sbit CS=P1^2; //TLC2543片選端
28 sbit CLK=P1^3; //TLC2543時鐘信號輸入端
29 //bit ADFlag; //是否進行采樣標志
30 /**********************************************************
31 函數名稱: delay
32 函數描述: 延時ms (11.0592MHz)
33 入口參數: uint i
34 **********************************************************/
35
36 void delay(uint i)
37 {
38 1 uchar a;
39 1 while(i--)
40 1 {
41 2 for(a=0;a<250;a++)
42 2 {
43 3 _nop_();_nop_();_nop_();_nop_();
44 3 }
45 2 }
46 1 }
47 /**********************************************************
48 函數名稱: delayAD
49 函數描述: AD轉換時間延時us (11.0592MHz)
50 入口參數: uint i
51 **********************************************************/
52 void delayAD(uint i)
53 {
54 1 while(--i);
55 1 }
C51 COMPILER V8.08 DIGITAL_V_LCD 11/17/2008 19:55:28 PAGE 2
56
57 /**********************************************************
58 函數名稱: adConvert
59 函數描述: TLC2543驅動程序
60 入口參數: 轉換地址
61 返回值: 轉換結果 uint ad
62 **********************************************************/
63 uint adConvert(uchar port)
64 {
65 1 uint ad=0;
66 1 uchar i;
67 1 CS=0;
68 1 CLK=0;
69 1 port<<=4;
70 1 for(i=0;i<12;i++)
71 1 {
72 2 if(dataOut)
73 2 ad|=0x01;
74 2 dataIn=(bit)(port&0x80);
75 2 CLK=1; //時鐘上升沿,讀入一個字符
76 2 delayAD(3); //采樣時間
77 2 CLK=0; //下降沿,輸出一個字符
78 2 delayAD(3); //轉換時間
79 2 port<<=1; //移出下一個字符
80 2 ad<<=1; //移出下一位空間
81 2 }
82 1 CS=1;
83 1 ad>>=1;
84 1 return (ad);
85 1 }
86
87
88 /**********************************************************
89 函數名稱: dataConvert
90 函數描述: AD轉換數據處理,精度0.01
91 入口參數: uint adRusult
92 **********************************************************/
93 /*uint dataConvert(uint adResult)
94 {
95 uint data;
96 uchar hundredBit,tenBit,oneBit;
97 data=adResult*1.0/4096*500; //設置精度為0.01,AD參考電壓為5V
98 oneBit=data%10; //個位數
99 tenBit=(data/10)%10; //十位數
100 hundredBit=(data/100)%10; // 百位數
101 }
102
103
104 //以下是LCD1602驅動程序
105
106 /**********************************************************
107 函數名稱: testBusy
108 函數描述: LCD檢測是否忙碌函數
109 入口參數: 無
110 **********************************************************/
111
112
113 uchar testBusy(void)
114 {
115 1 bit flag;
116 1 P2=0xff;
117 1 RS=0; //選擇指令端
C51 COMPILER V8.08 DIGITAL_V_LCD 11/17/2008 19:55:28 PAGE 3
118 1 RW=1; //選擇讀取
119 1 E=1; //使能端由低到高有效
120 1 if (busyFlag==1) flag=1;
121 1 else flag=0;
122 1 E=0;
123 1 return flag;
124 1 }
125
126
127 /**********************************************************
128 函數名稱: writeCommand
129 函數描述: LCD寫入指令函數
130 入口參數: 指令參數command
131 **********************************************************/
132
133 void writeCommand(uchar command)
134 { while(testBusy());
135 1
136 1 RS=0; //選擇指令端
137 1 RW=0; //選擇寫入
138 1 E=1; //下降沿讀入
139 1 P2=command;
140 1 E=0;
141 1 }
142
143 /**********************************************************
144 函數名稱: writeData
145 函數描述: LCD寫入數據函數
146 入口參數: 指令參數writedata
147 **********************************************************/
148
149 void writeData(uchar writedata)
150 {
151 1 while(testBusy());
152 1 RS=1; //選擇數據端
153 1 RW=0; //選擇寫入
154 1 E=1;
155 1 P2=writedata;
156 1 E=0;
157 1 }
158
159 /**********************************************************
160 函數名稱: initialLcd1602()
161 函數描述: LCD寫入指令函數
162 入口參數: 無
163 **********************************************************/
164
165
166 void initialLcd1602(void)
167 {
168 1
169 1 /*delay(100);
170 1 writeCommand(0x38);
171 1 delay(10);
172 1 writeCommand(0x38);
173 1 delay(10);
174 1 writeCommand(0x38);
175 1 delay(10); */ //初次使用
176 1
177 1 writeCommand(0x38); //設置顯示格式為:8位,雙行顯示,5X7點陣
178 1 writeCommand(0x80);
179 1 writeCommand(0x01);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -