www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式云IOT技術圈
[導讀]本節(jié)小項目,意在“人機界面”與“過程控制”如何關聯(lián)的練習。


微信公眾號:嵌入式開發(fā)圈
關注可了解更多的教程。問題或建議,請公眾號留言;
如果你覺得本文對你有幫助,歡迎贊賞

本節(jié)小項目,意在“人機界面”與“過程控制”如何關聯(lián)的練習。
? ?? ? 程序功能如下:
? ?? ?(1)數(shù)碼管顯示的格式是“S.D.CC”。其中S是代表3檔速度,能顯示的數(shù)字范圍是“1、2、3”,分別代表“慢、中、快”3檔速度。D代表方向,往右跑顯示符號“r”(right的首字母),往左跑顯示符號“L”(Left的首字母)。CC代表計數(shù)器,跑馬燈每跑完一次,計數(shù)器自動加1,范圍是0到99。
? ?? ?(2)【速度】按鍵K1。每按一次【速度】按鍵K1,速度檔位顯示的數(shù)字在“1、2、3”之間切換。
? ?? ?(3)【方向】按鍵K2。跑馬燈上電后默認處于“往右跑”的方向,默認顯示字符“r”。每按一次【方向】按鍵K2,跑馬燈就在“往右跑”與“往左跑”兩個方向之間切換,顯示的字符在“r、L”之間切換。
? ?? ?(4)【啟動暫?!堪存IK3。上電后,按下【啟動暫?!堪存IK3啟動之后,跑馬燈處于“啟動”狀態(tài),4個LED燈挨個依次循環(huán)的變亮,給人“跑”起來的感覺,此時再按一次【啟動暫?!堪存IK3,則跑馬燈處于“暫?!睜顟B(tài),接著又按一次【啟動暫停】按鍵K3,跑馬燈又變回“啟動”狀態(tài)。因此,【啟動暫?!堪存IK3是專門用來切換“啟動”和“暫停”這兩種狀態(tài)。
? ?? ? 代碼如下:

 1#include "REG52.H"  2  3#define KEY_FILTER_TIME??25  4  5#define SCAN_TIME??1  6#define VOICE_TIME???50  7  8#define RUN_TIME_SLOW????500 //“慢”檔速度的時間參數(shù)  9#define RUN_TIME_MIDDLE??300 //“中”檔速度的時間參數(shù)  10#define RUN_TIME_FAST????100 //“快”檔速度的時間參數(shù)  11  12void T0_time();  13void SystemInitial(void) ;  14void Delay(unsigned long u32DelayTime) ;  15void PeripheralInitial(void) ;  16  17void KeyScan(void);  18void KeyTask(void);  19void RunTask(void); //跑馬燈的任務函數(shù)  20  21void VoiceScan(void);  22void DisplayScan(void);  23void DisplayTask(void);  24void Wd1(void); //窗口1。  25void BeepOpen(void);  26void BeepClose(void);  27  28sbit?KEY_INPUT1?=?P2?^ 2;  29sbit?KEY_INPUT2?=?P2?^ 1;  30sbit?KEY_INPUT3?=?P2?^ 0;  31  32sbit?P1_0?=?P1?^ 0;  33sbit?P1_1?=?P1?^ 1;  34sbit?P1_2?=?P1?^ 2;  35sbit?P1_3?=?P1?^ 3;  36  37sbit?P3_4?=?P3?^ 4;  38  39//4個跑馬燈的輸出口  40sbit?P1_4?=?P1?^ 4;  41sbit?P1_5?=?P1?^ 5;  42sbit?P1_6?=?P1?^ 6;  43sbit?P3_3?=?P3?^ 3;  44  45  46//數(shù)碼管轉換表  47code unsigned char Cu8DigTable[]?=  48{  49 0x3f, //0???????序號0  50 0x06, //1???????序號1  51 0x5b, //2???????序號2  52 0x4f, //3???????序號3  53 0x66, //4???????序號4  54 0x6d, //5???????序號5  55 0x7d, //6???????序號6  56 0x07, //7???????序號7  57 0x7f, //8???????序號8  58 0x6f, //9???????序號9  59 0x00, //不顯示??序號10  60 0x40, //橫杠-???序號11  61 0x38, //字符L???序號12  62 0x70, //字符r???序號13  63};  64  65volatile unsigned char vGu8ScanTimerFlag?= 0;  66volatile unsigned int vGu16ScanTimerCnt?= 0;  67  68volatile unsigned char vGu8BeepTimerFlag?= 0;  69volatile unsigned int vGu16BeepTimerCnt?= 0;  70  71unsigned char Gu8Wd?= 0; //窗口選擇變量。人機交互程序框架的支點。  72unsigned char Gu8WdUpdate?= 0; //整屏更新變量。  73  74unsigned char Gu8PartUpdate_1?= 0; //局部1的更新變量,  75unsigned char Gu8PartUpdate_2?= 0; //局部2的更新變量  76unsigned char Gu8PartUpdate_3?= 0; //局部3的更新變量,  77  78volatile unsigned char vGu8Display_Righ_4?= 0;  79volatile unsigned char vGu8Display_Righ_3?= 0;  80volatile unsigned char vGu8Display_Righ_2?= 0;  81volatile unsigned char vGu8Display_Righ_1?= 0;  82  83volatile unsigned char vGu8Display_Righ_Dot_4?= 1; //需要顯示的小數(shù)點  84volatile unsigned char vGu8Display_Righ_Dot_3?= 1; //需要顯示的小數(shù)點  85volatile unsigned char vGu8Display_Righ_Dot_2?= 0;  86volatile unsigned char vGu8Display_Righ_Dot_1?= 0;  87  88volatile unsigned char vGu8KeySec?= 0;  89  90unsigned char Gu8RunCounter?= 0; //計數(shù)器,范圍是0到99  91  92unsigned char Gu8RunStep?= 0; //運行的步驟  93unsigned char Gu8RunStart?= 0; //控制跑馬燈啟動的總開關  94  95unsigned char Gu8RunStatus?= 0; //標識跑馬燈當前的狀態(tài)。0代表停止,1代表啟動,2代表暫停。  96unsigned char Gu8RunDirection?= 0; //標識跑馬燈當前的方向。0代表往右跑,1代表往左跑。  97unsigned char Gu8RunSpeed?= 1; //當前的速度檔位。1代表“慢”,2代表“中”,3代表“快”。  98unsigned int Gu16RunSpeedTimeDate?= 0; //承接各速度檔位的時間參數(shù)的變量  99 100volatile unsigned char vGu8RunTimerFlag?= 0; //用于控制跑馬燈跑動速度的定時器 101volatile unsigned int vGu16RunTimerCnt?= 0; 102 103void main() 104{ 105 SystemInitial(); 106 Delay(10000); 107 PeripheralInitial(); 108 109 while(1) 110 { 111 KeyTask(); //按鍵的任務函數(shù) 112 DisplayTask(); //數(shù)碼管顯示的上層任務函數(shù) 113 RunTask(); //跑馬燈的任務函數(shù) 114 } 115} 116 117void RunTask(void) //跑馬燈的任務函數(shù),放在主函數(shù)內 118{ 119 if(0 ==?Gu8RunStart) //如果是停止的狀態(tài) 120 { 121 return; //如果是停止的狀態(tài),退出當前函數(shù),不掃描余下代碼。 122 } 123 124 switch(Gu8RunStep) //屢見屢愛的switch又來了 125 { 126 case 0: 127 vGu8RunTimerFlag?= 0; 128 vGu16RunTimerCnt?= 0; //定時器清零 129 Gu8RunStep?= 1; //切換到下一步,啟動 130 131 break; 132 133 case 1: 134 if(1 ==?Gu8RunStatus?&& 0 ==?vGu16RunTimerCnt) //當前處于“啟動”狀態(tài),并且定時器等于0 135 { 136 P1_4?= 0; //第1個燈亮 137 P1_5?= 1; //第2個燈滅 138 P1_6?= 1; //第3個燈滅 139 P3_3?= 1; //第4個燈滅 140 141 vGu8RunTimerFlag?= 0; 142 vGu16RunTimerCnt?=?Gu16RunSpeedTimeDate; //速度時間參數(shù)變量的大小,決定了速度 143 vGu8RunTimerFlag?= 1; //啟動定時器 144 145//靈活切換“步驟變量” 146 if(0 ==?Gu8RunDirection) //往右跑 147 { 148 Gu8RunStep?= 2; 149 } 150 else //往左跑 151 { 152 if(Gu8RunCounter?< 99) 153 { 154 Gu8RunCounter++; //往左邊跑完一次,運行的計數(shù)器自加1 155 } 156 157 Gu8PartUpdate_3?= 1; //局部3的更新變量,更新顯示計數(shù)器 158 159 Gu8RunStep?= 4; 160 } 161 162 } 163 164 break; 165 166 case 2: 167 if(1 ==?Gu8RunStatus?&& 0 ==?vGu16RunTimerCnt) //當前處于“啟動”狀態(tài),并且定時器等于0 168 { 169 P1_4?= 1; //第1個燈滅 170 P1_5?= 0; //第2個燈亮 171 P1_6?= 1; //第3個燈滅 172 P3_3?= 1; //第4個燈滅 173 174 vGu8RunTimerFlag?= 0; 175 vGu16RunTimerCnt?=?Gu16RunSpeedTimeDate; //速度時間參數(shù)變量的大小,決定了速度 176 vGu8RunTimerFlag?= 1; //啟動定時器 177 178//靈活切換“步驟變量” 179 if(0 ==?Gu8RunDirection) //往右跑 180 { 181 Gu8RunStep?= 3; 182 } 183 else //往左跑 184 { 185 Gu8RunStep?= 1; 186 } 187 } 188 189 break; 190 191 case 3: 192 if(1 ==?Gu8RunStatus?&& 0 ==?vGu16RunTimerCnt) //當前處于“啟動”狀態(tài),并且定時器等于0 193 { 194 P1_4?= 1; //第1個燈滅 195 P1_5?= 1; //第2個燈滅 196 P1_6?= 0; //第3個燈亮 197 P3_3?= 1; //第4個燈滅 198 199 vGu8RunTimerFlag?= 0; 200 vGu16RunTimerCnt?=?Gu16RunSpeedTimeDate; //速度時間參數(shù)變量的大小,決定了速度 201 vGu8RunTimerFlag?= 1; //啟動定時器 202 203//靈活切換“步驟變量” 204 if(0 ==?Gu8RunDirection) //往右跑 205 { 206 Gu8RunStep?= 4; 207 } 208 else //往左跑 209 { 210 Gu8RunStep?= 2; 211 } 212 } 213 214 break; 215 216 case 4: 217 if(1 ==?Gu8RunStatus?&& 0 ==?vGu16RunTimerCnt) //當前處于“啟動”狀態(tài),并且定時器等于0 218 { 219 P1_4?= 1; //第1個燈滅 220 P1_5?= 1; //第2個燈滅 221 P1_6?= 1; //第3個燈滅 222 P3_3?= 0; //第4個燈亮 223 224 vGu8RunTimerFlag?= 0; 225 vGu16RunTimerCnt?=?Gu16RunSpeedTimeDate; //速度時間參數(shù)變量的大小,決定了速度 226 vGu8RunTimerFlag?= 1; //啟動定時器 227 228//靈活切換“步驟變量” 229 if(0 ==?Gu8RunDirection) //往右跑 230 { 231 if(Gu8RunCounter?< 99) 232 { 233 Gu8RunCounter++; //往右邊跑完一次,運行的計數(shù)器自加1 234 } 235 236 Gu8PartUpdate_3?= 1; //局部3的更新變量,更新顯示計數(shù)器 237 238 Gu8RunStep?= 1; 239 } 240 else //往左跑 241 { 242 Gu8RunStep?= 3; 243 } 244 } 245 246 break; 247 248 } 249 250} 251 252void KeyTask(void) //按鍵的任務函數(shù) 253{ 254 if(0 ==?vGu8KeySec) 255 { 256 return; 257 } 258 259 switch(vGu8KeySec) 260 { 261 case 1: //【速度】按鍵K1 262 switch(Gu8Wd) //在某個窗口下 263 { 264 case 1: //窗口1。 265 266 //每按一次K1按鍵,Gu8RunSpeed就在1、2、3三者之間切換, 267//并且根據(jù)Gu8RunSpeed的數(shù)值,對Gu16RunSpeedTimeDate賦值 268//不同的速度時間參數(shù),從而控制速度檔位。 269 270 if(1 ==?Gu8RunSpeed) 271 { 272 Gu8RunSpeed?= 2; //“中”檔 273 Gu16RunSpeedTimeDate?=?RUN_TIME_MIDDLE; //賦值“中”檔的時間參數(shù) 274 } 275 else if(2 ==?Gu8RunSpeed) 276 { 277 Gu8RunSpeed?= 3; //“快”檔 278 Gu16RunSpeedTimeDate?=?RUN_TIME_FAST; //賦值“快”檔的時間參數(shù) 279 } 280 else 281 { 282 Gu8RunSpeed?= 1; //“慢”檔 283 Gu16RunSpeedTimeDate?=?RUN_TIME_SLOW; //賦值“慢”檔的時間參數(shù) 284 } 285 286 Gu8PartUpdate_1?= 1; //局部1的更新變量,更新顯示“速度” 287 288 vGu8BeepTimerFlag?= 0; 289 vGu16BeepTimerCnt?=?VOICE_TIME; //蜂鳴器發(fā)出“滴”一聲 290 vGu8BeepTimerFlag?= 1; 291 break; 292 } 293 294 vGu8KeySec?= 0; 295 break; 296 297 case 2: //【方向】按鍵K2 298 299 switch(Gu8Wd) //在某個窗口下 300 { 301 case 1: //窗口1。 302 303 //每按一次K2按鍵,Gu8RunDirection就在0和1之間切換,從而控制方向 304 if(0 ==?Gu8RunDirection) 305 { 306 Gu8RunDirection?= 1; 307 } 308 else 309 { 310 Gu8RunDirection?= 0; 311 } 312 313 Gu8PartUpdate_2?= 1; //局部2更新顯示,更新顯示“方向” 314 315 vGu8BeepTimerFlag?= 0; 316 vGu16BeepTimerCnt?=?VOICE_TIME; //蜂鳴器發(fā)出“滴”一聲 317 vGu8BeepTimerFlag?= 1; 318 break; 319 } 320 321 vGu8KeySec?= 0; 322 break; 323 324 case 3: //【啟動暫?!堪存IK3 325 switch(Gu8Wd) //在某個窗口下 326 { 327 case 1: //窗口1。 328 if(0 ==?Gu8RunStatus) //當跑馬燈處于“停止”狀態(tài)時 329 { 330 Gu8RunStep?= 0; //運行步驟從0開始 331 Gu8RunStart?= 1; //總開關“打開”。 332 Gu8RunStatus?= 1; //狀態(tài)切換到“啟動”狀態(tài) 333 } 334 else if(1 ==?Gu8RunStatus) //當跑馬燈處于“啟動”狀態(tài)時 335 { 336 Gu8RunStatus?= 2; //狀態(tài)切換到“暫?!睜顟B(tài) 337 } 338 else //當跑馬燈處于“暫停”狀態(tài)時 339 { 340 Gu8RunStatus?= 1; //狀態(tài)切換到“啟動”狀態(tài) 341 } 342 343 vGu8BeepTimerFlag?= 0; 344 vGu16BeepTimerCnt?=?VOICE_TIME; //蜂鳴器發(fā)出“滴”一聲 345 vGu8BeepTimerFlag?= 1; 346 break; 347 } 348 349 vGu8KeySec?= 0; 350 break; 351 } 352} 353 354void DisplayTask(void) //數(shù)碼管顯示的上層任務函數(shù) 355{ 356 switch(Gu8Wd) //以窗口選擇Gu8Wd為支點,去執(zhí)行對應的窗口顯示函數(shù)。又一次用到switch語句 357 { 358 case 1: 359 Wd1(); //窗口1。 360 break; 361 } 362} 363 364void Wd1(void) //窗口1。 365{ 366//需要借用的中間變量,用來拆分數(shù)據(jù)位。 367 static unsigned char Su8Temp_4,?Su8Temp_3,?Su8Temp_2,?Su8Temp_1; //需要借用的中間變量 368 369 if(1 ==?Gu8WdUpdate) //如果需要整屏更新 370 { 371 Gu8WdUpdate?= 0; //及時清零,只更新一次顯示即可,避免一直進來更新顯示 372 373//屬于靜態(tài)數(shù)據(jù),起“裝飾”作用,切換窗口后只掃描一次的代碼。 374 vGu8Display_Righ_Dot_4?= 1; //顯示小數(shù)點 375 vGu8Display_Righ_Dot_3?= 1; //顯示小數(shù)點 376 vGu8Display_Righ_Dot_2?= 0; 377 vGu8Display_Righ_Dot_1?= 0; 378 379 Gu8PartUpdate_1?= 1; //局部1更新顯示 380 Gu8PartUpdate_2?= 1; //局部2更新顯示 381 Gu8PartUpdate_3?= 1; //局部3更新顯示 382 } 383 384 if(1 ==?Gu8PartUpdate_1) //局部1更新顯示,速度 385 { 386 Gu8PartUpdate_1?= 0; //及時清零,只更新一次顯示即可,避免一直進來更新顯示 387 388 Su8Temp_4?=?Gu8RunSpeed; 389 390 vGu8Display_Righ_4?=?Su8Temp_4; //過渡需要顯示的數(shù)據(jù)到底層驅動變量 391 } 392 393 if(1 ==?Gu8PartUpdate_2) //局部2更新顯示,方向 394 { 395 Gu8PartUpdate_2?= 0; //及時清零,只更新一次顯示即可,避免一直進來更新顯示 396 397 if(0 ==?Gu8RunDirection) //往右跑 398 { 399 Su8Temp_3?= 13; //數(shù)碼管的字模轉換表序號13代表顯示字符“r” 400 } 401 else 402 { 403 Su8Temp_3?= 12; //數(shù)碼管的字模轉換表序號12代表顯示字符“L” 404 } 405 406 vGu8Display_Righ_3?=?Su8Temp_3; //過渡需要顯示的數(shù)據(jù)到底層驅動變量 407 } 408 409 if(1 ==?Gu8PartUpdate_3) //局部3更新顯示,計數(shù)器 410 { 411 Gu8PartUpdate_3?= 0; //及時清零,只更新一次顯示即可,避免一直進來更新顯示 412 413 Su8Temp_2?=?Gu8RunCounter?% 100 / 10; //提取十位 414 Su8Temp_1?=?Gu8RunCounter?% 10 / 1; //提取個位 415 416 vGu8Display_Righ_2?=?Su8Temp_2; //過渡需要顯示的數(shù)據(jù)到底層驅動變量 417 vGu8Display_Righ_1?=?Su8Temp_1; //過渡需要顯示的數(shù)據(jù)到底層驅動變量 418 } 419 420} 421 422 423void KeyScan(void) //按鍵底層的驅動掃描函數(shù),放在定時中斷函數(shù)里 424{ 425 static unsigned char Su8KeyLock1; 426 static unsigned int Su16KeyCnt1; 427 static unsigned char Su8KeyLock2; 428 static unsigned int Su16KeyCnt2; 429 static unsigned char Su8KeyLock3; 430 static unsigned int Su16KeyCnt3; 431 432 433 if(0 !=?KEY_INPUT1) 434 { 435 Su8KeyLock1?= 0; 436 Su16KeyCnt1?= 0; 437 } 438 else if(0 ==?Su8KeyLock1) 439 { 440 Su16KeyCnt1++; 441 442 if(Su16KeyCnt1?>=?KEY_FILTER_TIME) 443 { 444 Su8KeyLock1?= 1; 445 vGu8KeySec?= 1; 446 } 447 } 448 449 if(0 !=?KEY_INPUT2) 450 { 451 Su8KeyLock2?= 0; 452 Su16KeyCnt2?= 0; 453 } 454 else if(0 ==?Su8KeyLock2) 455 { 456 Su16KeyCnt2++; 457 458 if(Su16KeyCnt2?>=?KEY_FILTER_TIME) 459 { 460 Su8KeyLock2?= 1; 461 vGu8KeySec?= 2; 462 } 463 } 464 465 if(0 !=?KEY_INPUT3) 466 { 467 Su8KeyLock3?= 0; 468 Su16KeyCnt3?= 0; 469 } 470 else if(0 ==?Su8KeyLock3) 471 { 472 Su16KeyCnt3++; 473 474 if(Su16KeyCnt3?>=?KEY_FILTER_TIME) 475 { 476 Su8KeyLock3?= 1; 477 vGu8KeySec?= 3; 478 } 479 } 480 481} 482 483void DisplayScan(void) //數(shù)碼管底層的驅動掃描函數(shù),放在定時中斷函數(shù)里 484{ 485 static unsigned char Su8GetCode; 486 static unsigned char Su8ScanStep?= 1; 487 488 if(0 ==?vGu16ScanTimerCnt) 489 { 490 491 492 P0?= 0x00; 493 P1_0?= 1; 494 P1_1?= 1; 495 P1_2?= 1; 496 P1_3?= 1; 497 498 switch(Su8ScanStep) 499 { 500 case 1: 501 Su8GetCode?=?Cu8DigTable[vGu8Display_Righ_1]; 502 503 if(1 ==?vGu8Display_Righ_Dot_1) 504 { 505 Su8GetCode?=?Su8GetCode?| 0x80; 506 } 507 508 P0?=?Su8GetCode; 509 P1_0?= 0; 510 P1_1?= 1; 511 P1_2?= 1; 512 P1_3?= 1; 513 break; 514 515 case 2: 516 Su8GetCode?=?Cu8DigTable[vGu8Display_Righ_2]; 517 518 if(1 ==?vGu8Display_Righ_Dot_2) 519 { 520 Su8GetCode?=?Su8GetCode?| 0x80; 521 } 522 523 P0?=?Su8GetCode; 524 P1_0?= 1; 525 P1_1?= 0; 526 P1_2?= 1; 527 P1_3?= 1; 528 break; 529 530 case 3: 531 Su8GetCode?=?Cu8DigTable[vGu8Display_Righ_3]; 532 533 if(1 ==?vGu8Display_Righ_Dot_3) 534 { 535 Su8GetCode?=?Su8GetCode?| 0x80; 536 } 537 538 P0?=?Su8GetCode; 539 P1_0?= 1; 540 P1_1?= 1; 541 P1_2?= 0; 542 P1_3?= 1; 543 break; 544 545 case 4: 546 Su8GetCode?=?Cu8DigTable[vGu8Display_Righ_4]; 547 548 if(1 ==?vGu8Display_Righ_Dot_4) 549 { 550 Su8GetCode?=?Su8GetCode?| 0x80; 551 } 552 553 P0?=?Su8GetCode; 554 P1_0?= 1; 555 P1_1?= 1; 556 P1_2?= 1; 557 P1_3?= 0; 558 break; 559 560 } 561 562 Su8ScanStep++; 563 564 if(Su8ScanStep?> 4) 565 { 566 Su8ScanStep?= 1; 567 } 568 569 vGu8ScanTimerFlag?= 0; 570 vGu16ScanTimerCnt?=?SCAN_TIME; 571 vGu8ScanTimerFlag?= 1; 572 } 573} 574 575void VoiceScan(void) //蜂鳴器的驅動函數(shù) 576{ 577 578 static unsigned char Su8Lock?= 0; 579 580 if(1 ==?vGu8BeepTimerFlag?&&?vGu16BeepTimerCnt?> 0) 581 { 582 if(0 ==?Su8Lock) 583 { 584 Su8Lock?= 1; 585 BeepOpen(); 586 } 587 else 588 { 589 590 vGu16BeepTimerCnt--; 591 592 if(0 ==?vGu16BeepTimerCnt) 593 { 594 Su8Lock?= 0; 595 BeepClose(); 596 } 597 598 } 599 } 600} 601 602void BeepOpen(void) 603{ 604 P3_4?= 0; 605} 606 607void BeepClose(void) 608{ 609 P3_4?= 1; 610} 611 612void T0_time() interrupt?1 613{ 614 VoiceScan(); //蜂鳴器的驅動函數(shù) 615 KeyScan(); //按鍵底層的驅動掃描函數(shù) 616 DisplayScan(); //數(shù)碼管底層的驅動掃描函數(shù) 617 618 if(1 ==?vGu8ScanTimerFlag?&&?vGu16ScanTimerCnt?> 0) 619 { 620 vGu16ScanTimerCnt--; 621 } 622 623 if(1 ==?vGu8RunTimerFlag?&&?vGu16RunTimerCnt?> 0) //用于控制跑馬燈跑動速度的定時器 624 { 625 vGu16RunTimerCnt--; 626 } 627 628 TH0?= 0xfd; //此參數(shù)可根據(jù)具體的時間來修改,盡量確保每定時中斷一次接近1ms 629 TL0?= 0x40; //此參數(shù)可根據(jù)具體的時間來修改,盡量確保每定時中斷一次接近1ms 630} 631 632void SystemInitial(void) 633{ 634 P0?= 0x00; 635 P1_0?= 1; 636 P1_1?= 1; 637 P1_2?= 1; 638 P1_3?= 1; 639 640 TMOD?= 0x01; 641 TH0?= 0xfd; //此參數(shù)可根據(jù)具體的時間來修改,盡量確保每定時中斷一次接近1ms 642 TL0?= 0x40; //此參數(shù)可根據(jù)具體的時間來修改,盡量確保每定時中斷一次接近1ms 643 EA?= 1; 644 ET0?= 1; 645 TR0?= 1; 646 647//上電初始化一些關鍵的數(shù)據(jù) 648 649 Gu8Wd?= 1; //窗口1。開機默認處于正常工作的窗口 650 Gu8WdUpdate?= 1; //整屏更新變量 651//跑馬燈處于初始化的狀態(tài) 652 P1_4?= 0; //第1個燈亮 653 P1_5?= 1; //第2個燈滅 654 P1_6?= 1; //第3個燈滅 655 P3_3?= 1; //第4個燈滅 656 657//根據(jù)當前的速度檔位Gu8RunSpeed,來初始化速度時間參數(shù)Gu16RunSpeedTimeDate 658 if(1 ==?Gu8RunSpeed) 659 { 660 Gu16RunSpeedTimeDate?=?RUN_TIME_SLOW; //賦值“慢”檔的時間參數(shù) 661 } 662 else if(2 ==?Gu8RunSpeed) 663 { 664 Gu16RunSpeedTimeDate?=?RUN_TIME_MIDDLE; //賦值“中”檔的時間參數(shù) 665 } 666 else 667 { 668 Gu16RunSpeedTimeDate?=?RUN_TIME_FAST; //賦值“快”檔的時間參數(shù) 669 } 670 671} 672 673void Delay(unsigned long u32DelayTime) 674{ 675 for(;?u32DelayTime?> 0;?u32DelayTime--); 676} 677 678void PeripheralInitial(void) 679{ 680 681}


長期商務合作服務:



免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉