项目简介
基于新唐芯片MS51FB9AE芯片设计T10机种视窗板原理图PCB,并编写其对应数码显示功能程序。
项目实现
通过新唐芯片MS51FB9AE芯片,结合AD实现视窗板PCB绘制,结合数码管,实现数码显示功能。
具体步骤
通过IC规格书,设计对应IO控制对应功能,以 原理图 为例:
以 PCB图 为例:
以 数码管扫描 为例:
1void SegDisplay(u8 Num)
2{
3 switch(Num)
4 {
5 case 0:
6 SEG_A=0;
7 SEG_B=0;
8 SEG_C=0;
9 SEG_D=0;
10 SEG_E=0;
11 SEG_F=0;
12 SEG_G=1;
13 SEG_DOT=0;
14 break;
15 case 1:
16 SEG_A=1;
17 SEG_B=0;
18 SEG_C=0;
19 SEG_D=1;
20 SEG_E=1;
21 SEG_F=1;
22 SEG_G=1;
23 SEG_DOT=0;
24 break;
25 case 2:
26 SEG_A=0;
27 SEG_B=0;
28 SEG_C=1;
29 SEG_D=0;
30 SEG_E=0;
31 SEG_F=1;
32 SEG_G=0;
33 SEG_DOT=0;
34 break;
35 case 3:
36 SEG_A=0;
37 SEG_B=0;
38 SEG_C=0;
39 SEG_D=0;
40 SEG_E=1;
41 SEG_F=1;
42 SEG_G=0;
43 SEG_DOT=0;
44 break;
45 case 4:
46 SEG_A=1;
47 SEG_B=0;
48 SEG_C=0;
49 SEG_D=1;
50 SEG_E=1;
51 SEG_F=0;
52 SEG_G=0;
53 SEG_DOT=0;
54 break;
55 case 5:
56 SEG_A=0;
57 SEG_B=1;
58 SEG_C=0;
59 SEG_D=0;
60 SEG_E=1;
61 SEG_F=0;
62 SEG_G=0;
63 SEG_DOT=0;
64 break;
65 case 6:
66 SEG_A=0;
67 SEG_B=1;
68 SEG_C=0;
69 SEG_D=0;
70 SEG_E=0;
71 SEG_F=0;
72 SEG_G=0;
73 SEG_DOT=0;
74 break;
75 case 7:
76 SEG_A=0;
77 SEG_B=0;
78 SEG_C=0;
79 SEG_D=1;
80 SEG_E=1;
81 SEG_F=1;
82 SEG_G=1;
83 SEG_DOT=0;
84 break;
85 case 8:
86 SEG_A=0;
87 SEG_B=0;
88 SEG_C=0;
89 SEG_D=0;
90 SEG_E=0;
91 SEG_F=0;
92 SEG_G=0;
93 SEG_DOT=0;
94 break;
95 case 9:
96 SEG_A=0;
97 SEG_B=0;
98 SEG_C=0;
99 SEG_D=0;
100 SEG_E=1;
101 SEG_F=0;
102 SEG_G=0;
103 SEG_DOT=0;
104 break;
105 case 0x0a: //"NULL"
106 SEG_A=1;
107 SEG_B=1;
108 SEG_C=1;
109 SEG_D=1;
110 SEG_E=1;
111 SEG_F=1;
112 SEG_G=1;
113 SEG_DOT=1;
114 break;
115 default: //"--"
116 SEG_A=1;
117 SEG_B=1;
118 SEG_C=1;
119 SEG_D=1;
120 SEG_E=1;
121 SEG_F=1;
122 SEG_G=0;
123 SEG_DOT=0;
124 break;
125 }
126}
127
128
129void SegScan(void)
130{
131 MODEL_A=1;
132 SEAT_A1=1;
133 SEAT_A2=1;
134 WATER_A1=1;
135 WATER_A2=1;
136 if(LED_DC_BATTERY)
137 {
138 //_enadc=0; //close the ad
139 Flag_DC_Battery=1; //close the seg
140 }
141 else
142 {
143 //_enadc=1; //open the ad
144 Flag_DC_Battery=0; //open the seg
145 }
146
147 if((Temp_Seat_Value_H==0)&&(Temp_Seat_Value_L==0)&&(Temp_Seat_Value_H==0)&&(Temp_Seat_Value_L==0)&&(Mode==0))
148 {
149 Temp_Water_Value_H=8;
150 Temp_Water_Value_L=8;
151 Temp_Seat_Value_H=8;
152 Temp_Seat_Value_L=8;
153 Mode=0x7f;
154 }
155
156 if((Temp_Water_Value_H==0)&&(Temp_Water_Value_L==0))
157 {
158 Temp_Water_Value_H=0x0b;
159 Temp_Water_Value_L=0x0b;
160 }
161
162 if(((Temp_Seat_Value_H==0)&&(Temp_Seat_Value_L==2))||((Temp_Seat_Value_H==0)&&(Temp_Seat_Value_L==0)))
163 {
164 Temp_Seat_Value_H=0x0b;
165 Temp_Seat_Value_L=0x0b;
166 }
167
168 i++;
169 if(Flag_DC_Battery==0)
170 {
171 Water_Value_H=Temp_Water_Value_H;
172 Water_Value_L=Temp_Water_Value_L;
173 Seat_Value_H=Temp_Seat_Value_H;
174 Seat_Value_L=Temp_Seat_Value_L;
175 Mode &= 0xFF;
176 }
177 else
178 {
179 Water_Value_H=0x0a;
180 Water_Value_L=0x0a;
181 Seat_Value_H=0x0a;
182 Seat_Value_L=0x0a;
183 Mode &= 0x81;
184 }
185
186 switch(i)
187 {
188 case 1:
189 MODEL_A=1;
190 SegDisplay(Water_Value_H);
191 WATER_A1=0;
192 break;
193 case 2:
194 WATER_A1=1;
195 SegDisplay(Water_Value_L);
196 WATER_A2=0;
197 break;
198 case 3:
199 WATER_A2=1;
200 SegDisplay(Seat_Value_H);
201 SEAT_A1=0;
202 break;
203 case 4:
204 SEAT_A1=1;
205 SegDisplay(Seat_Value_L);
206 SEAT_A2=0;
207 break;
208 case 5:
209 SEAT_A2=1;
210 //SEG_A=0;
211 //SEG_B=0;
212 //SEG_C=0;
213 //SEG_D=0;
214 //SEG_E=0;
215 //SEG_F=0;
216 //SEG_G=0;
217 MODEL_A=0;
218 i=0;
219 default:
220 break;
221 }
222}
本文完整源码已上传本人gitee,点击查看。