久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5235|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)的汽車尾燈控制系統(tǒng)程序設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
不要問為什么這么簡單。在最初的要求中一個(gè)尾燈控制電路還要求有掉電存儲(chǔ)和檢測功能,也不知道用作什么的。

【設(shè)計(jì)亮點(diǎn)】
淘寶上常見的LCD1602的并口轉(zhuǎn)IIC轉(zhuǎn)接小板原本為在Arduino上使用而設(shè)計(jì)的,但是既然遵守IIC協(xié)議,并且只是PCF8574芯片通信,那么51也可以才對。經(jīng)過查找,在百度貼吧上找到了使用其驅(qū)動(dòng)LCD1602的程序,并且重新排版編寫使之清晰明了,工程中的LCD1602_IIC.c即為此轉(zhuǎn)接板的驅(qū)動(dòng)程序。
使用該轉(zhuǎn)接板,在刷新速度不高的情況下,大大節(jié)省了IO口的占用數(shù)量。那個(gè)轉(zhuǎn)接板的樣子大概是這樣的:



【設(shè)計(jì)說明】

設(shè)計(jì)包含4個(gè)獨(dú)立按鍵,兩個(gè)LED燈代表左右車尾燈。
使用PCF8574轉(zhuǎn)接板以IIC方式連接LCD1602到單片機(jī)。
時(shí)鐘電路選用DS1302,僅下載時(shí)設(shè)定時(shí)間。
功能設(shè)定:
    待機(jī)狀態(tài)下,顯示當(dāng)前系統(tǒng)時(shí)間;
    按下左轉(zhuǎn)按鍵,左轉(zhuǎn)指示燈閃爍;
    按下右轉(zhuǎn)按鍵,右轉(zhuǎn)指示燈閃爍;
    按下緊急按鍵,兩指示燈均閃爍;
    任意狀態(tài)下按住剎車按鍵,兩燈保持常量,松開后還原為原來狀態(tài)。
    上述4種狀態(tài)均有文字提示。

設(shè)計(jì)使用的單片機(jī)型號(hào)為STC12C5202AD,包含的頭文件任意,因?yàn)闆]使用片內(nèi)的特殊資源。沒有安裝外部晶振,片內(nèi)的晶振并不十分準(zhǔn)確,我測試的時(shí)候大約在13MHz左右。

單片機(jī)源程序如下:
  1. #include<STC12C2052AD.h>
  2. #include"LCD1602_IIC.c"
  3. #include"DS1302.c"

  4. sbit LED_Left=P3^0;
  5. sbit LED_Right=P3^1;

  6. sbit Key_Left=P3^7;
  7. sbit Key_Right=P1^0;
  8. sbit Key_Stop=P1^1;
  9. sbit Key_Emergency=P1^2;

  10. //運(yùn)行標(biāo)志位
  11. bit flag_Key_Left=0;//按鍵執(zhí)行標(biāo)志位
  12. bit flag_Key_Right=0;
  13. bit flag_Key_Stop=0;
  14. bit flag_Key_Emergency=0;
  15. unsigned char Flash_Mode=0;//閃爍模式選擇 0:正常待機(jī)模式 1:左轉(zhuǎn) 2:右轉(zhuǎn) 3:雙閃 4:停止

  16. //運(yùn)行數(shù)組
  17. char LCD1602_Buff[17];
  18. unsigned int T0_Cnt=0;

  19. /*
  20. 名稱:基于單片機(jī)的汽車尾燈控制系統(tǒng)設(shè)計(jì)
  21. 平臺(tái):STC12C5202AD,使用內(nèi)部RC振蕩器,大約為13MHz
  22. 說明:
  23.         設(shè)計(jì)包含4個(gè)獨(dú)立按鍵,兩個(gè)LED燈代表左右車尾燈。
  24.         使用PCF8574轉(zhuǎn)接板以IIC方式連接LCD1602到單片機(jī)。
  25.         時(shí)鐘電路選用DS1302,僅下載時(shí)設(shè)定時(shí)間。
  26. 功能設(shè)定:
  27.         待機(jī)狀態(tài)下,顯示當(dāng)前系統(tǒng)時(shí)間;
  28.         按下左轉(zhuǎn)按鍵,左轉(zhuǎn)指示燈閃爍;
  29.         按下右轉(zhuǎn)按鍵,右轉(zhuǎn)指示燈閃爍;
  30.         按下緊急按鍵,兩指示燈均閃爍;
  31.         任意狀態(tài)下按住剎車按鍵,兩燈保持常量,松開后還原為原來狀態(tài)。
  32.         上述4種狀態(tài)均有文字提示。
  33.        
  34. 硬件制作:凌凈清河
  35. 程序/文檔:凌凈欣羽
  36. 新礦城學(xué)習(xí)基地#2019
  37. */

  38. void delay(unsigned long i)
  39. {
  40.         while(i--);
  41. }

  42. void Time_Display()
  43. {
  44.         unsigned char i;
  45.         for(i=0;i<17;i++)
  46.         {
  47.                 LCD1602_Buff[i]='\0';//先填充截?cái)喾?br />
  48.         }
  49.         LCD1602_Buff[0]=' ';
  50.         LCD1602_Buff[1]=' ';
  51.         LCD1602_Buff[2]=' ';
  52.         LCD1602_Buff[3]=D_year[0]+'0';
  53.         LCD1602_Buff[4]=D_year[1]+'0';
  54.         LCD1602_Buff[5]=D_year[2]+'0';
  55.         LCD1602_Buff[6]=D_year[3]+'0';
  56.         LCD1602_Buff[7]='-';
  57.         LCD1602_Buff[8]=D_month[0]+'0';
  58.         LCD1602_Buff[9]=D_month[1]+'0';
  59.         LCD1602_Buff[10]='-';
  60.         LCD1602_Buff[11]=D_day[0]+'0';
  61.         LCD1602_Buff[12]=D_day[1]+'0';
  62.         LCD1602_Buff[13]=' ';
  63.         LCD1602_Buff[14]=' ';
  64.         LCD1602_Buff[15]=' ';
  65.         LCD1602_Print(0,0,LCD1602_Buff);
  66.         delay(10000);
  67.         for(i=0;i<17;i++)
  68.         {
  69.                 LCD1602_Buff[i]='\0';//先填充截?cái)喾?br />
  70.         }
  71.         LCD1602_Buff[0]=' ';
  72.         LCD1602_Buff[1]=' ';
  73.         LCD1602_Buff[2]=' ';
  74.         LCD1602_Buff[3]=' ';
  75.         LCD1602_Buff[4]=D_hour[0]+'0';
  76.         LCD1602_Buff[5]=D_hour[1]+'0';
  77.         LCD1602_Buff[6]=':';
  78.         LCD1602_Buff[7]=D_minute[0]+'0';
  79.         LCD1602_Buff[8]=D_minute[1]+'0';
  80.         LCD1602_Buff[9]=':';
  81.         LCD1602_Buff[10]=D_second[0]+'0';
  82.         LCD1602_Buff[11]=D_second[1]+'0';
  83.         LCD1602_Buff[12]=' ';
  84.         LCD1602_Buff[13]=' ';
  85.         LCD1602_Buff[14]=' ';
  86.         LCD1602_Buff[15]=' ';
  87.         LCD1602_Print(0,1,LCD1602_Buff);
  88. }

  89. void Timer0Init(void)                //5毫秒@13MHz
  90. {
  91.         AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
  92.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  93.         TL0 = 0x18;                //設(shè)置定時(shí)初值
  94.         TH0 = 0x02;                //設(shè)置定時(shí)初值
  95.         TF0 = 0;                //清除TF0標(biāo)志
  96.         TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
  97. }

  98. void sys_init()
  99. {
  100.         //Ds1302Init();//首次上電寫入時(shí)間
  101.         LED_Left=0;
  102.         LED_Right=0;
  103.         LCD1602_Light_Off();
  104.         LCD1602_Init();
  105.         LCD1602_Print(0,0,"     Ready!     ");
  106.         LCD1602_Light_On();
  107.         Timer0Init();
  108.         EA=1;
  109.         ET0=1;
  110.         LED_Left=1;
  111.         LED_Right=1;
  112. }

  113. void main()
  114. {
  115.         sys_init();
  116.         while(1)
  117.         {
  118.                 GetTime();
  119.                 if(Flash_Mode==0)Time_Display();
  120.                
  121.                 if(!Key_Left&&!flag_Key_Left)
  122.                 {
  123.                         delay(2000);
  124.                         if(!Key_Left)
  125.                         {
  126.                                 flag_Key_Left=1;
  127.                                 LCD1602_Print(0,0,"   Turn Left    ");
  128.                                 LCD1602_Print(0,1," LED_Left Flash ");
  129.                                 if(Flash_Mode==1)
  130.                                 {
  131.                                         Flash_Mode=0;
  132.                                         LED_Left=1;
  133.                                 }
  134.                                 else
  135.                                 {
  136.                                         LED_Right=1;
  137.                                         Flash_Mode=1;
  138.                                 }
  139.                         }
  140.                 }
  141.                
  142.                 if(!Key_Right&&!flag_Key_Right)
  143.                 {
  144.                         delay(2000);
  145.                         if(!Key_Right)
  146.                         {
  147.                                 flag_Key_Right=1;
  148.                                 LCD1602_Print(0,0,"   Turn Right   ");
  149.                                 LCD1602_Print(0,1," LED_Right Flash");
  150.                                 if(Flash_Mode==2)
  151.                                 {
  152.                                         Flash_Mode=0;
  153.                                         LED_Right=1;
  154.                                 }
  155.                                 else
  156.                                 {
  157.                                         LED_Left=1;
  158.                                         Flash_Mode=2;
  159.                                 }
  160.                         }
  161.                 }
  162.                
  163.                 if(!Key_Stop&&!flag_Key_Stop)
  164.                 {
  165.                         unsigned char Temp_Flash_Mode=0;
  166.                         delay(2000);
  167.                         if(!Key_Stop)
  168.                         {
  169.                                
  170.                                 flag_Key_Stop=1;
  171.                                 LCD1602_Print(0,0,"     Stop     ");
  172.                                 LCD1602_Print(0,1," LED_Stop Light ");
  173.                                 Temp_Flash_Mode=Flash_Mode;//模式備份
  174.                                 Flash_Mode=4;
  175.                                 LED_Left=0;
  176.                                 LED_Right=0;
  177.                         }
  178.                         while(!Key_Stop);
  179.                         LED_Left=1;
  180.                         LED_Right=1;
  181.                         Flash_Mode=Temp_Flash_Mode;//模式還原
  182.                         switch(Flash_Mode)//文字還原
  183.                         {
  184.                                 case 1:
  185.                                 LCD1602_Print(0,0,"   Turn Left    ");
  186.                                 LCD1602_Print(0,1," LED_Left Flash ");
  187.                                 break;
  188.                                 case 2:
  189.                                 LCD1602_Print(0,0,"   Turn Right   ");
  190.                                 LCD1602_Print(0,1," LED_Right Flash");
  191.                                 break;
  192.                                 case 3:
  193.                                 LCD1602_Print(0,0,"    Emergency   ");
  194.                                 LCD1602_Print(0,1,"  Double Flash  ");
  195.                                 break;
  196.                                 default:break;
  197.                         }
  198.                 }
  199.                
  200.                 if(!Key_Emergency&&!flag_Key_Emergency)
  201.                 {
  202.                         delay(2000);
  203.                         if(!Key_Emergency)
  204.                         {
  205.                                 flag_Key_Emergency=1;
  206.                                 LCD1602_Print(0,0,"    Emergency   ");
  207.                                 LCD1602_Print(0,1,"  Double Flash  ");
  208.                                 if(Flash_Mode==3)
  209.                                 {
  210.                                         Flash_Mode=0;
  211.                                         LED_Left=1;
  212.                                         LED_Right=1;
  213.                                 }
  214.                                 else
  215.                                 {
  216.                                         LED_Left=0;
  217.                                         LED_Right=0;
  218.                                         Flash_Mode=3;
  219. ……………………

  220. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
基于單片機(jī)的汽車尾燈控制系統(tǒng)設(shè)計(jì) 凌凈清河.7z (1.3 MB, 下載次數(shù): 44)



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www.国产一区 | av片免费 | 欧美高清性xxxxhdvideosex | 亚洲导航深夜福利涩涩屋 | 网络毛片| 国产成人精品一区二区三区 | 国产成人精品一区二区三区在线 | 一区二区三区视频在线观看 | 国产成人精品一区二区三区视频 | 九九亚洲 | 蜜桃在线播放 | 国产精品有限公司 | 日本在线免费看最新的电影 | 亚洲欧美激情视频 | 人人爽人人草 | 亚洲精品免费视频 | 国产成人麻豆免费观看 | 久久久久久久久久久一区二区 | 九色在线观看 | 成人在线播放网站 | 欧美老妇交乱视频 | 国产视频福利一区 | 国产精品一区二区三区99 | 午夜三区 | 欧美一区二区三区视频在线 | 国产一区免费视频 | 欧美一级二级视频 | 久久精品久久久久久 | 日韩伦理一区二区 | 国产精品一区一区三区 | 免费观看成人鲁鲁鲁鲁鲁视频 | 秋霞在线一区 | av网站免费在线观看 | 国产在线观看一区二区三区 | 亚洲一区二区在线视频 | 国产精品成人一区二区 | 91麻豆精品国产91久久久更新资源速度超快 | 天堂资源 | 国产高清91| 日韩一区二区成人 | 国产毛片在线看 |