📄 tlc549lcd.lst
字号:
C51 COMPILER V7.50 TLC549LCD 04/10/2009 19:50:40 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TLC549LCD
OBJECT MODULE PLACED IN TLC549LCD.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE TLC549LCD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 * 文件名 : TLC549LCD.c
3 * 描述 : TLC549是一个新型的AD转换器,具有8位的分辨率,具有控制简单,体积小的优点。
4 工程当中的AD是要经过多次采集然后再计算出相对准确的值的。
5 这里的电压值通过液晶1602显示出来。
6 * 创建人 : 东流,2009年4月10日
7 * 版本号 : 2.0
8 * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
9 * 感谢“中国自动化资讯网”对本工作室的大力支持。
10 ***********************************************************************/
11 #include<reg52.h>
12 #include<intrins.h>
13 #define uchar unsigned char
14 #define uint unsigned int
15
16
17 sbit AD_Out = P3^2; //TLC549输出端
18 sbit CS = P1^0; //TLC549片选信号
19 sbit AD_In = P1^1; //TLC549输入端
20
21 //这三个引脚参考资料
22 sbit E=P2^7; //1602使能引脚
23 sbit RW=P2^6; //1602读写引脚
24 sbit RS=P2^5; //1602数据/命令选择引脚
25
26 /********************************************************************
27 * 名称 : delay()
28 * 功能 : 延时,延时时间大概为140US。
29 * 输入 : 无
30 * 输出 : 无
31 ***********************************************************************/
32
33 void delay()
34 {
35 1 int i,j;
36 1 for(i=0; i<=10; i++)
37 1 for(j=0; j<=2; j++)
38 1 ;
39 1 }
40
41 /********************************************************************
42 * 名称 : Convert(uchar In_Date)
43 * 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
44 * 输入 : 1602资料上的值
45 * 输出 : 送到1602的值
46 ***********************************************************************/
47 uchar Convert(uchar In_Date)
48 {
49 1 uchar i, Out_Date = 0, temp = 0;
50 1 for(i=0; i<8; i++)
51 1 {
52 2 temp = (In_Date >> i) & 0x01;
53 2 Out_Date |= (temp << (7 - i));
54 2 }
55 1 return Out_Date;
C51 COMPILER V7.50 TLC549LCD 04/10/2009 19:50:40 PAGE 2
56 1 }
57 /********************************************************************
58 * 名称 : enable(uchar del)
59 * 功能 : 1602命令函数
60 * 输入 : 输入的命令值
61 * 输出 : 无
62 ***********************************************************************/
63
64 void enable(uchar del)
65 {
66 1 P0 = Convert(del);
67 1 RS = 0;
68 1 RW = 0;
69 1 E = 0;
70 1 delay();
71 1 E = 1;
72 1 delay();
73 1 }
74
75 /********************************************************************
76 * 名称 : write(uchar del)
77 * 功能 : 1602写数据函数
78 * 输入 : 需要写入1602的数据
79 * 输出 : 无
80 ***********************************************************************/
81
82 void write(uchar del)
83 {
84 1 P0 = Convert(del);
85 1 RS = 1;
86 1 RW = 0;
87 1 E = 0;
88 1 delay();
89 1 E = 1;
90 1 delay();
91 1 }
92
93 /********************************************************************
94 * 名称 : L1602_init()
95 * 功能 : 1602初始化,请参考1602的资料
96 * 输入 : 无
97 * 输出 : 无
98 ***********************************************************************/
99 void L1602_init(void)
100 {
101 1 enable(0x01);
102 1 enable(0x38);
103 1 enable(0x0c);
104 1 enable(0x06);
105 1 enable(0xd0);
106 1 }
107
108 /********************************************************************
109 * 名称 : L1602_char(uchar hang,uchar lie,char sign)
110 * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
111 L1602_char(1,5,'b')
112 * 输入 : 行,列,需要输入1602的数据
113 * 输出 : 无
114 ***********************************************************************/
115 void L1602_char(uchar hang,uchar lie,char sign)
116 {
117 1 uchar a;
C51 COMPILER V7.50 TLC549LCD 04/10/2009 19:50:40 PAGE 3
118 1 if(hang == 1) a = 0x80;
119 1 if(hang == 2) a = 0xc0;
120 1 a = a + lie - 1;
121 1 enable(a);
122 1 write(sign);
123 1 }
124
125 /********************************************************************
126 * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
127 * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
128 L1602_string(1,5,"ab cd ef;")
129 * 输入 : 行,列,需要输入1602的数据
130 * 输出 : 无
131 ***********************************************************************/
132 void L1602_string(uchar hang,uchar lie,uchar *p)
133 {
134 1 uchar a;
135 1 if(hang == 1) a = 0x80;
136 1 if(hang == 2) a = 0xc0;
137 1 a = a + lie - 1;
138 1 enable(a);
139 1 while(1)
140 1 {
141 2 if(*p == '\0') break;
142 2 write(*p);
143 2 p++;
144 2 }
145 1 }
146
147
148
149 /********************************************************************
150 * 名称 : AD_Change(void)
151 * 功能 : TLC549驱动程序,在“视频及教程”中有讲解。
152 * 输入 : 无
153 * 输出 : temp (电压值)
154 ***********************************************************************/
155 uchar AD_Change(void)
156 {
157 1 uchar i,temp = 0;
158 1 CS = 0;
159 1 _nop_();
160 1 _nop_();
161 1 _nop_();
162 1 _nop_();
163 1 for(i=0; i<8; i++)
164 1 {
165 2 AD_In = 1;
166 2 _nop_();
167 2 _nop_();
168 2 temp = temp << 1;
169 2 if(AD_Out == 1) temp += 1;
170 2 AD_In = 0;
171 2 _nop_();
172 2 _nop_();
173 2 }
174 1 CS = 1;
175 1 return temp;
176 1 }
177
178 /********************************************************************
179 * 名称 : Main()
C51 COMPILER V7.50 TLC549LCD 04/10/2009 19:50:40 PAGE 4
180 * 功能 : 主函数
181 * 输入 : 无
182 * 输出 : 无
183 ***********************************************************************/
184 void Main(void)
185 {
186 1 uint i = 0,temp;
187 1 uint j;
188 1 L1602_init();
189 1 L1602_string(1,1,"AD(TLC549) TEST ");
190 1 L1602_string(2,1," 0.00V ");
191 1 P2 = 0x00;
192 1 P1 = 0xff;
193 1 while(1)
194 1 {
195 2 temp = AD_Change();
196 2 j = temp * 2; //这里取的是一个大概的值。真实电压应为 temp * 5 / 256, 得出的数为 "x.xx"。
197 2 L1602_char(2,6,j/100%10+48);
198 2 L1602_char(2,8,j/10%10+48);
199 2 L1602_char(2,9,j%10+48);
200 2 }
201 1 }
202
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 384 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -