📄 led.lst
字号:
C51 COMPILER V7.50 LED 08/30/2005 17:12:03 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN LED.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE LED.c LARGE OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 /*
2 注:CH452工作电压为5V,为保证电平兼容,本程序测试也是在5V工作环境中完成
3 */
4 /*
5 调用方法
6
7
8 第一步调用CH452_Init();
9 第二步调用显示如:[CH452_Disp(1,0,2,2);//第一个芯片,第二个数码管,显示2不显示小数点
10 CH452_Disp(1,1,3,4);//第一个芯片,第三个数码管,显示4要显示小数点
11 CH452_Disp(2,0,1,1);//第二个芯片,第一个数码管,示示1,不显示小数点
12 ]
13 第三步可调用左移、右移、复位等
14 [
15 CH452_LL(1);//左移一个数码位
16 CH452_LR(2);//右移一个数码位
17 CH452_Rest();//选中芯片复位
18 CH452_Init();//初始化:复位2个芯片两个芯片并开显示
19 还可单独复位一个芯片
20 1、CH452CS=1;//选择芯片
21 2、CH452_Rest();复位芯片
22 注:复位过后必需要开显示
23 3、CH452_Write(CH452_SYSON1);
24 ]
25
26 */
27 //------------------头文件--------------------------
28 #include "Main.h"
29
30 sbit I2C_SDA=P3^6;//I2C定义
31 sbit I2C_SCK=P3^7;
32 //---------------------------------------------
33
34 /* CH452的常用命令码 */
35 #define CH452_NOP 0x0000 // 空操作
36 #define CH452_RESET 0x0201 // 复位
37 #define CH452_LEVEL 0x0100 // 加载光柱值
38 #define CH452_CLR_BIT 0x0180 // 段位清0
39 #define CH452_SET_BIT 0x01C0 // 段位置1
40 #define CH452_SLEEP 0x0202 // 进入睡眠状态
41 #define CH452_LEFTMOV 0x0300 //设置移动方式-作移
42 #define CH452_LEFTCYC 0x0301 //设置移动方式-左循
43 #define CH452_RIGHTMOV 0x0302 //设置移动方式-右移
44 #define CH452_RIGHTCYC 0x0303 //设置移动方式-右循
45 #define CH452_SELF_BCD 0x0380 //自定义BCD码
46 #define CH452_SYSOFF 0x0400 //关显示、键盘
47 #define CH452_SYSON1 0x0401 //开显示
48 #define CH452_SYSOFF1 0x0400 //关显示
49 #define CH452_SYSON2 0x0403 //开显示、键盘
50 #define CH452_SYSON2W 0x0423 //开显示、键盘, 真正2线接口
51 #define CH452_DSP 0x0500 //设置默认显示方式
52 #define CH452_BCD 0x0580 //设置BCD译码方式
53 #define CH452_TWINKLE 0x0600 //设置闪烁控制
54 #define CH452_GET_KEY 0x0700 // 获取按键
55 #define CH452_DIG0 0x0800 //数码管位0显示
C51 COMPILER V7.50 LED 08/30/2005 17:12:03 PAGE 2
56 #define CH452_DIG1 0x0900 //数码管位1显示
57 #define CH452_DIG2 0x0a00 //数码管位2显示
58 #define CH452_DIG3 0x0b00 //数码管位3显示
59 #define CH452_DIG4 0x0c00 //数码管位4显示
60 #define CH452_DIG5 0x0d00 //数码管位5显示
61 #define CH452_DIG6 0x0e00 //数码管位6显示
62 #define CH452_DIG7 0x0f00 //数码管位7显示
63
64 unsigned char CH452CS=1; //芯片选择,默认为第一个芯片
65 //-------------------------------------------------
66 /*//I2C接口函数
67 void I2cStart(void)
68 {
69 I2C_SCK=0;
70 I2C_SDA=1;
71 I2C_SCK=1;
72 _nop_();
73 _nop_();
74 _nop_();
75
76 I2C_SDA=0;
77 _nop_();
78 _nop_();
79 _nop_();
80 _nop_();
81
82 I2C_SCK=0;
83 I2C_SDA=1;
84 }
85
86 void I2cStop(void)
87 {
88 I2C_SCK=0;
89 I2C_SDA=0;
90 I2C_SCK=1;
91 _nop_();
92 _nop_();
93 _nop_();
94
95 I2C_SDA=1;
96 _nop_();
97 _nop_();
98 _nop_();
99
100 I2C_SCK=0;
101 }
102 */
103 //-------------------------CH452操作开始--------------------------
104 void CH452_I2c_WrByte(unsigned char c) //写一个字节数据
105 {
106 1 unsigned char i;
107 1 for(i=0;i!=8;i++)
108 1 {
109 2 if(c&0x80) {I2C_SDA=1;}
110 2 else {I2C_SDA=0;}
111 2 I2C_SCK=1;
112 2 c<<=1;
113 2 _nop_();
114 2 _nop_();
115 2 _nop_();
116 2 _nop_();
117 2 I2C_SCK=0;
C51 COMPILER V7.50 LED 08/30/2005 17:12:03 PAGE 3
118 2
119 2 _nop_();
120 2 _nop_();
121 2 _nop_();
122 2 _nop_();
123 2 }
124 1 _nop_();
125 1 _nop_();
126 1 I2C_SDA=1;
127 1 I2C_SCK=1;
128 1 _nop_();
129 1 _nop_();
130 1 _nop_();
131 1 _nop_();
132 1 I2C_SCK=0;
133 1 _nop_();
134 1 _nop_();
135 1
136 1 }
137 //-------------------写命令------------------------
138 void CH452_Write(unsigned short command)
139 {
140 1
141 1 I2cStart();
142 1 if(CH452CS==1)
143 1 {
144 2 CH452_I2c_WrByte(((unsigned char)(command>>7)&0x3E)|0x60);
145 2 }
146 1 else if(CH452CS==2)
147 1 {
148 2 CH452_I2c_WrByte(((unsigned char)(command>>7)&0x3E)|0x40);
149 2 }
150 1 CH452_I2c_WrByte((unsigned char)command);
151 1 I2cStop();
152 1 }
153
154 //-----------------------CH452复位--------------------------
155 void CH452_Rest()
156 {
157 1 I2cStart();
158 1 if(CH452CS==1)
159 1 {
160 2 CH452_I2c_WrByte(((unsigned char)(CH452_RESET>>7)&0x3E)|0x60);
161 2 }
162 1 else if(CH452CS==2)
163 1 {
164 2 CH452_I2c_WrByte(((unsigned char)(CH452_RESET>>7)&0x3E)|0x40);
165 2 }
166 1 CH452_I2c_WrByte((unsigned char)CH452_RESET);
167 1 I2cStop();
168 1
169 1
170 1 }
171 //-------------------------CH452左移-------------------------
172 /*
173 void CH452_LL(uchar i)
174 {
175
176 uchar j;
177 for(j=0;j<i;j++)
178 {
179 I2cStart();
C51 COMPILER V7.50 LED 08/30/2005 17:12:03 PAGE 4
180 if(CH452CS==1)
181 {
182 CH452_I2c_WrByte(((unsigned char)(CH452_LEFTMOV>>7)&0x3E)|0x60);
183
184 }
185 else if(CH452CS==2)
186 {
187 CH452_I2c_WrByte(((unsigned char)(CH452_LEFTMOV>>7)&0x3E)|0x40);
188
189 }
190 CH452_I2c_WrByte((unsigned char)CH452_LEFTMOV);
191 I2cStop();
192
193 }
194
195
196
197 }
198 //------------------------CH452右移-------------------------
199 void CH452_LR(uchar i)
200 {
201
202 uchar j;
203 for(j=0;j<i;j++)
204 {
205 I2cStart();
206 if(CH452CS==1)
207 {
208 CH452_I2c_WrByte(((unsigned char)(CH452_RIGHTMOV>>7)&0x3E)|0x60);
209 }
210 else if(CH452CS==2)
211 {
212 CH452_I2c_WrByte(((unsigned char)(CH452_RIGHTMOV>>7)&0x3E)|0x40);
213 }
214 CH452_I2c_WrByte((unsigned char)CH452_RIGHTMOV);
215 I2cStop();
216
217 }
218
219
220 }
221 void CH452_RR(uchar i)
222 {
223
224 uchar j;
225 for(j=0;j<i;j++)
226 {
227 I2cStart();
228 if(CH452CS==1)
229 {
230 CH452_I2c_WrByte(((unsigned char)(CH452_RIGHTCYC>>7)&0x3E)|0x60);
231 }
232 else if(CH452CS==2)
233 {
234 CH452_I2c_WrByte(((unsigned char)(CH452_RIGHTCYC>>7)&0x3E)|0x40);
235 }
236 CH452_I2c_WrByte((unsigned char)CH452_RIGHTCYC);
237 I2cStop();
238
239 }
240
241
C51 COMPILER V7.50 LED 08/30/2005 17:12:03 PAGE 5
242 }
243 */
244 //--------------------------CH452初始化------------------------
245 void CH452_Init(void)
246 {
247 1
248 1 CH452CS=1;
249 1 CH452_Rest();
250 1 CH452_Write(CH452_SYSON1);
251 1 CH452CS=2;
252 1 CH452_Rest();
253 1 CH452_Write(CH452_SYSON1);
254 1 }
255 //-------------------------CH452显示----------------------
256 //chip CH452的芯片选择:如果只有一片则chip为1,如果有两片则可为1,2
257 //dot 数码管显示的小数点,如果为1则显示,如果为0则不显示
258 //bi 数码管选择(可为1-8)
259 //dat 显示的数值(可为1-16)显示为1-9,a-f
260 void CH452_Disp(uchar chip,uchar dot,uchar bi,uchar dat)
261 {
262 1
263 1 uint temp=0;
264 1 if(chip==1)
265 1 {
266 2 CH452CS=1;
267 2 }
268 1 else if(chip==2)
269 1 {
270 2 CH452CS=2;
271 2 }
272 1 if(dot==1)
273 1 {
274 2 temp |=0x0080;
275 2 }
276 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -