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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5102|回復: 0
收起左側

基于單片機的汽車尾燈控制系統程序設計

[復制鏈接]
ID:362076 發表于 2019-6-5 18:43 | 顯示全部樓層 |閱讀模式
不要問為什么這么簡單。在最初的要求中一個尾燈控制電路還要求有掉電存儲和檢測功能,也不知道用作什么的。

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


【設計說明】

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

設計使用的單片機型號為STC12C5202AD,包含的頭文件任意,因為沒使用片內的特殊資源。沒有安裝外部晶振,片內的晶振并不十分準確,我測試的時候大約在13MHz左右。

單片機源程序如下:
  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. //運行標志位
  11. bit flag_Key_Left=0;//按鍵執行標志位
  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:正常待機模式 1:左轉 2:右轉 3:雙閃 4:停止

  16. //運行數組
  17. char LCD1602_Buff[17];
  18. unsigned int T0_Cnt=0;

  19. /*
  20. 名稱:基于單片機的汽車尾燈控制系統設計
  21. 平臺:STC12C5202AD,使用內部RC振蕩器,大約為13MHz
  22. 說明:
  23.         設計包含4個獨立按鍵,兩個LED燈代表左右車尾燈。
  24.         使用PCF8574轉接板以IIC方式連接LCD1602到單片機。
  25.         時鐘電路選用DS1302,僅下載時設定時間。
  26. 功能設定:
  27.         待機狀態下,顯示當前系統時間;
  28.         按下左轉按鍵,左轉指示燈閃爍;
  29.         按下右轉按鍵,右轉指示燈閃爍;
  30.         按下緊急按鍵,兩指示燈均閃爍;
  31.         任意狀態下按住剎車按鍵,兩燈保持常量,松開后還原為原來狀態。
  32.         上述4種狀態均有文字提示。
  33.        
  34. 硬件制作:凌凈清河
  35. 程序/文檔:凌凈欣羽
  36. 新礦城學習基地#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';//先填充截斷符
  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';//先填充截斷符
  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;                //定時器時鐘1T模式
  92.         TMOD &= 0xF0;                //設置定時器模式
  93.         TL0 = 0x18;                //設置定時初值
  94.         TH0 = 0x02;                //設置定時初值
  95.         TF0 = 0;                //清除TF0標志
  96.         TR0 = 1;                //定時器0開始計時
  97. }

  98. void sys_init()
  99. {
  100.         //Ds1302Init();//首次上電寫入時間
  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黑下載附件…………
復制代碼

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一| av在线播放一区二区 | 天天搞天天操 | www国产成人免费观看视频,深夜成人网 | 国产精品久久久久久中文字 | 日韩2020狼一二三 | 无码一区二区三区视频 | 亚洲国产精品久久久久 | 99精品欧美一区二区三区综合在线 | 精品久久久久久久久久久久久久 | 一区二区精品 | 麻豆精品国产91久久久久久 | 国产成人在线视频免费观看 | 成人国产在线视频 | 91精品在线播放 | 成人免费看片又大又黄 | 国产欧美一区二区三区在线播放 | 国产真实精品久久二三区 | 欧美国产日韩一区 | 中文字幕高清av | 嫩草懂你的影院入口 | 日韩av在线中文字幕 | 一级黄色影片在线观看 | 久久宗合色 | av国产精品 | 亚洲成人精品在线观看 | 久久毛片网站 | 我要看一级片 | 日韩电影中文字幕在线观看 | 韩国毛片一区二区三区 | 紧缚调教一区二区三区视频 | 精品欧美一区免费观看α√ | 国产在线永久免费 | 久久99国产精一区二区三区 | 欧美jizzhd精品欧美巨大免费 | 日韩一区二区在线免费观看 | 人人爽人人草 | 日皮视频免费 | 红桃成人在线 | 成人在线观看免费观看 | 国产美女一区二区 |