226 lines
9.7 KiB
Plaintext
226 lines
9.7 KiB
Plaintext
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TM1650
|
||
OBJECT MODULE PLACED IN .\Objects\tm1650.obj
|
||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\tm1650.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT
|
||
-END PRINT(.\Listings\tm1650.lst) TABS(2) OBJECT(.\Objects\tm1650.obj)
|
||
|
||
line level source
|
||
|
||
1 #include "tm1650.h"
|
||
2 #include "delay.h"
|
||
3 #include "timer.h"
|
||
4 // 往一个指定的数码管位写入指定的显示数据
|
||
5 // 共阴数码管段码表:
|
||
6 // const unsigned char TUBE_TABLE_0[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
|
||
- //共阴,0~9的数字
|
||
7 const unsigned char TUBE_TABLE_0[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77,
|
||
-0x7c, 0x39, 0x5e, 0x79, 0x71}; // 共阴,0~9~A~F
|
||
8 const unsigned char TUBE_TABLE_1[16]={0x01,0x21,0x30,0x18,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x0
|
||
-c,0x06,0x03};
|
||
9 // 产生IIC总线起始信号
|
||
10 static void TM1650_IIC_start(void)
|
||
11 {
|
||
12 1 scl = 1; // SCL=1
|
||
13 1 sda = 1; // SDA=1
|
||
14 1 Delay4us();
|
||
15 1 sda = 0; // SDA=0
|
||
16 1 Delay4us();
|
||
17 1 scl = 0; // SCL=0
|
||
18 1 }
|
||
19 // 产生IIC总线结束信号
|
||
20 static void TM1650_IIC_stop(void)
|
||
21 {
|
||
22 1 scl = 0; // SCL=0
|
||
23 1 sda = 0; // SDA=0
|
||
24 1 Delay4us();
|
||
25 1 scl = 1; // SCL=1
|
||
26 1 Delay4us();
|
||
27 1 sda = 1; // SDA=1
|
||
28 1 }
|
||
29 // 通过IIC总线发送一个字节
|
||
30 static void TM1650_IIC_write_byte(unsigned char dat)
|
||
31 {
|
||
32 1 unsigned char i;
|
||
33 1 scl = 0;
|
||
34 1 for (i = 0; i < 8; i++)
|
||
35 1 {
|
||
36 2 do
|
||
37 2 {
|
||
38 3 if (dat & 0x80)
|
||
39 3 sda = 1; // SDA=1
|
||
40 3 else
|
||
41 3 sda = 0;
|
||
42 3 } while (0);
|
||
43 2 dat <<= 1;
|
||
44 2 Delay2us();
|
||
45 2 scl = 1;
|
||
46 2 Delay2us();
|
||
47 2 scl = 0;
|
||
48 2 Delay2us();
|
||
49 2 }
|
||
50 1 }
|
||
51 // 通过IIC总线接收从机响应的ACK信号
|
||
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 2
|
||
|
||
52 static unsigned char TM1650_IIC_wait_ack(void)
|
||
53 {
|
||
54 1 unsigned char ack_signal = 0;
|
||
55 1 sda = 1; // SDA=1
|
||
56 1 Delay2us();
|
||
57 1 ack_signal = sda;
|
||
58 1 scl = 1;
|
||
59 1 Delay2us();
|
||
60 1 // if(sda == 0)
|
||
61 1 // ack_signal = 1; //如果读取到的是NACK信号
|
||
62 1 scl = 0;
|
||
63 1 Delay2us();
|
||
64 1 return ack_signal;
|
||
65 1 }
|
||
66
|
||
67 // 作用:设置显示参数
|
||
68 // 备注:这个操作不影响显存中的数据
|
||
69 // 用例:
|
||
70 // 设置亮度并打开显示:TM1650_cfg_display(TM1650_BRIGHTx)
|
||
71 // 关闭显示:TM1650_cfg_display(TM1650_DSP_OFF)
|
||
72 static void TM1650_cfg_display(unsigned char x)
|
||
73 {
|
||
74 1 TM1650_IIC_start();
|
||
75 1 TM1650_IIC_write_byte(0x48);
|
||
76 1 TM1650_IIC_wait_ack(); // 固定命令
|
||
77 1 TM1650_IIC_write_byte(x);
|
||
78 1 TM1650_IIC_wait_ack(); // 参数值
|
||
79 1 TM1650_IIC_stop();
|
||
80 1 }
|
||
81 // 在DIG1位上显示数字3: TM1650_print(TM1650_DIG1,TUBE_TABLE_0[3]);
|
||
82 void TM1650_print(unsigned char dig, unsigned char seg_data)
|
||
83 {
|
||
84 1
|
||
85 1 TM1650_IIC_start();
|
||
86 1 TM1650_IIC_write_byte(dig * 2 + 0x68);
|
||
87 1 TM1650_IIC_wait_ack(); // 显存起始地址为0x68
|
||
88 1 TM1650_IIC_write_byte(seg_data);
|
||
89 1 TM1650_IIC_wait_ack(); // 发送段码
|
||
90 1 TM1650_IIC_stop();
|
||
91 1 }
|
||
92 // 将显存数据全部刷为0,清空显示
|
||
93 static void TM1650_clear(void)
|
||
94 {
|
||
95 1 unsigned char a;
|
||
96 1 for (a = TM1650_DIG1; a <= TM1650_DIG4; a++)
|
||
97 1 {
|
||
98 2 TM1650_print(a, 0); // 将显存数据刷为0
|
||
99 2 }
|
||
100 1 }
|
||
101 // TM1650初始化
|
||
102 void TM1650_init(void)
|
||
103 {
|
||
104 1 sda = 1; // 释放SDA线
|
||
105 1 scl = 1; // 释放SCL线
|
||
106 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||
107 1 TM1650_clear(); // 将显存内容清0
|
||
108 1 }
|
||
109
|
||
110 void TM1650_printpogrun(u8 set,u8 mode) // 显示run
|
||
111 {
|
||
112 1 sda = 1; // 释放SDA线
|
||
113 1 scl = 1; // 释放SCL线
|
||
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 3
|
||
|
||
114 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||
115 1 TM1650_print(TM1650_DIG1, TUBE_TABLE_1[mode]);
|
||
116 1 Delay4us();
|
||
117 1 TM1650_print(TM1650_DIG2, 0x73);
|
||
118 1 Delay4us();
|
||
119 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]);
|
||
120 1 Delay4us();
|
||
121 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_1[mode+8]);
|
||
122 1 }
|
||
123 void TM1650_printpogstop(u8 set) // 显示run
|
||
124 {
|
||
125 1 sda = 1; // 释放SDA线
|
||
126 1 scl = 1; // 释放SCL线
|
||
127 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||
128 1 TM1650_print(TM1650_DIG1, 0x40);
|
||
129 1 Delay4us();
|
||
130 1 TM1650_print(TM1650_DIG2, 0x73);
|
||
131 1 Delay4us();
|
||
132 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]);
|
||
133 1 Delay4us();
|
||
134 1 TM1650_print(TM1650_DIG4, 0x40);
|
||
135 1 }
|
||
136 void TM1650_print_SMG1(u8 set) // 显示----页面0显示
|
||
137 {
|
||
138 1 sda = 1; // 释放SDA线
|
||
139 1 scl = 1; // 释放SCL线
|
||
140 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||
141 1 TM1650_print(TM1650_DIG1, 0x40);
|
||
142 1 Delay4us();
|
||
143 1 if (set > 99)
|
||
144 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||
145 1 else
|
||
146 1 TM1650_print(TM1650_DIG2, 0x00);
|
||
147 1 Delay4us();
|
||
148 1 if (set > 9)
|
||
149 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||
150 1 else
|
||
151 1 TM1650_print(TM1650_DIG3, 0x00);
|
||
152 1 Delay4us();
|
||
153 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||
154 1 }
|
||
155 void TM1650_print_SMG2(u16 set) // 显示----页面0显示
|
||
156 {
|
||
157 1 sda = 1; // 释放SDA线
|
||
158 1 scl = 1; // 释放SCL线
|
||
159 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||
160 1 TM1650_print(TM1650_DIG1, 0x48);
|
||
161 1 Delay4us();
|
||
162 1 if (set > 99)
|
||
163 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||
164 1 else
|
||
165 1 TM1650_print(TM1650_DIG2, 0x00);
|
||
166 1 Delay4us();
|
||
167 1 if (set > 9)
|
||
168 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||
169 1 else
|
||
170 1 TM1650_print(TM1650_DIG3, 0x00);
|
||
171 1 Delay4us();
|
||
172 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||
173 1 }
|
||
174 void TM1650_print_SMG3(u8 set) // 显示----页面0显示
|
||
175 {
|
||
C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 4
|
||
|
||
176 1 sda = 1; // 释放SDA线
|
||
177 1 scl = 1; // 释放SCL线
|
||
178 1 TM1650_cfg_display(TM1650_BRIGHT5); // 初始化为5级亮度,打开显示
|
||
179 1 TM1650_print(TM1650_DIG1, 0x49);
|
||
180 1 Delay4us();
|
||
181 1 if (set > 99)
|
||
182 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]);
|
||
183 1 else
|
||
184 1 TM1650_print(TM1650_DIG2, 0x00);
|
||
185 1 Delay4us();
|
||
186 1 if (set > 9)
|
||
187 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]);
|
||
188 1 else
|
||
189 1 TM1650_print(TM1650_DIG3, 0x00);
|
||
190 1 Delay4us();
|
||
191 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]);
|
||
192 1 }
|
||
|
||
|
||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||
CODE SIZE = 657 ----
|
||
CONSTANT SIZE = ---- ----
|
||
XDATA SIZE = ---- ----
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = 32 14
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = ---- ----
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|