欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于單片機的汽車尾燈控制系統程序設計
[打印本頁]
作者:
凌凈清河
時間:
2019-6-5 18:43
標題:
基于單片機的汽車尾燈控制系統程序設計
不要問為什么這么簡單。在最初的要求中一個尾燈控制電路還要求有掉電存儲和檢測功能,也不知道用作什么的。
【設計亮點】
淘寶上常見的LCD1602的并口轉IIC轉接小板原本為在Arduino上使用而設計的,但是既然遵守IIC協議,并且只是PCF8574芯片通信,那么51也可以才對。經過查找,在百度貼吧上找到了使用其驅動LCD1602的程序,并且重新排版編寫使之清晰明了,工程中的LCD1602_IIC.c即為此轉接板的驅動程序。
使用該轉接板,在刷新速度不高的情況下,大大節省了IO口的占用數量。那個轉接板的樣子大概是這樣的:
QQ截圖20190605182904.png
(128.02 KB, 下載次數: 60)
下載附件
2019-6-5 18:41 上傳
【設計說明】
設計包含4個獨立按鍵,兩個LED燈代表左右車尾燈。
使用PCF8574轉接板以IIC方式連接LCD1602到單片機。
時鐘電路選用DS1302,僅下載時設定時間。
功能設定:
待機狀態下,顯示當前系統時間;
按下左轉按鍵,左轉指示燈閃爍;
按下右轉按鍵,右轉指示燈閃爍;
按下緊急按鍵,兩指示燈均閃爍;
任意狀態下按住剎車按鍵,兩燈保持常量,松開后還原為原來狀態。
上述4種狀態均有文字提示。
設計使用的單片機型號為STC12C5202AD,包含的頭文件任意,因為沒使用片內的特殊資源。沒有安裝外部晶振,片內的晶振并不十分準確,我測試的時候大約在13MHz左右。
單片機源程序如下:
#include<STC12C2052AD.h>
#include"LCD1602_IIC.c"
#include"DS1302.c"
sbit LED_Left=P3^0;
sbit LED_Right=P3^1;
sbit Key_Left=P3^7;
sbit Key_Right=P1^0;
sbit Key_Stop=P1^1;
sbit Key_Emergency=P1^2;
//運行標志位
bit flag_Key_Left=0;//按鍵執行標志位
bit flag_Key_Right=0;
bit flag_Key_Stop=0;
bit flag_Key_Emergency=0;
unsigned char Flash_Mode=0;//閃爍模式選擇 0:正常待機模式 1:左轉 2:右轉 3:雙閃 4:停止
//運行數組
char LCD1602_Buff[17];
unsigned int T0_Cnt=0;
/*
名稱:基于單片機的汽車尾燈控制系統設計
平臺:STC12C5202AD,使用內部RC振蕩器,大約為13MHz
說明:
設計包含4個獨立按鍵,兩個LED燈代表左右車尾燈。
使用PCF8574轉接板以IIC方式連接LCD1602到單片機。
時鐘電路選用DS1302,僅下載時設定時間。
功能設定:
待機狀態下,顯示當前系統時間;
按下左轉按鍵,左轉指示燈閃爍;
按下右轉按鍵,右轉指示燈閃爍;
按下緊急按鍵,兩指示燈均閃爍;
任意狀態下按住剎車按鍵,兩燈保持常量,松開后還原為原來狀態。
上述4種狀態均有文字提示。
硬件制作:凌凈清河
程序/文檔:凌凈欣羽
新礦城學習基地#2019
*/
void delay(unsigned long i)
{
while(i--);
}
void Time_Display()
{
unsigned char i;
for(i=0;i<17;i++)
{
LCD1602_Buff[i]='\0';//先填充截斷符
}
LCD1602_Buff[0]=' ';
LCD1602_Buff[1]=' ';
LCD1602_Buff[2]=' ';
LCD1602_Buff[3]=D_year[0]+'0';
LCD1602_Buff[4]=D_year[1]+'0';
LCD1602_Buff[5]=D_year[2]+'0';
LCD1602_Buff[6]=D_year[3]+'0';
LCD1602_Buff[7]='-';
LCD1602_Buff[8]=D_month[0]+'0';
LCD1602_Buff[9]=D_month[1]+'0';
LCD1602_Buff[10]='-';
LCD1602_Buff[11]=D_day[0]+'0';
LCD1602_Buff[12]=D_day[1]+'0';
LCD1602_Buff[13]=' ';
LCD1602_Buff[14]=' ';
LCD1602_Buff[15]=' ';
LCD1602_Print(0,0,LCD1602_Buff);
delay(10000);
for(i=0;i<17;i++)
{
LCD1602_Buff[i]='\0';//先填充截斷符
}
LCD1602_Buff[0]=' ';
LCD1602_Buff[1]=' ';
LCD1602_Buff[2]=' ';
LCD1602_Buff[3]=' ';
LCD1602_Buff[4]=D_hour[0]+'0';
LCD1602_Buff[5]=D_hour[1]+'0';
LCD1602_Buff[6]=':';
LCD1602_Buff[7]=D_minute[0]+'0';
LCD1602_Buff[8]=D_minute[1]+'0';
LCD1602_Buff[9]=':';
LCD1602_Buff[10]=D_second[0]+'0';
LCD1602_Buff[11]=D_second[1]+'0';
LCD1602_Buff[12]=' ';
LCD1602_Buff[13]=' ';
LCD1602_Buff[14]=' ';
LCD1602_Buff[15]=' ';
LCD1602_Print(0,1,LCD1602_Buff);
}
void Timer0Init(void) //5毫秒@13MHz
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設置定時器模式
TL0 = 0x18; //設置定時初值
TH0 = 0x02; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
}
void sys_init()
{
//Ds1302Init();//首次上電寫入時間
LED_Left=0;
LED_Right=0;
LCD1602_Light_Off();
LCD1602_Init();
LCD1602_Print(0,0," Ready! ");
LCD1602_Light_On();
Timer0Init();
EA=1;
ET0=1;
LED_Left=1;
LED_Right=1;
}
void main()
{
sys_init();
while(1)
{
GetTime();
if(Flash_Mode==0)Time_Display();
if(!Key_Left&&!flag_Key_Left)
{
delay(2000);
if(!Key_Left)
{
flag_Key_Left=1;
LCD1602_Print(0,0," Turn Left ");
LCD1602_Print(0,1," LED_Left Flash ");
if(Flash_Mode==1)
{
Flash_Mode=0;
LED_Left=1;
}
else
{
LED_Right=1;
Flash_Mode=1;
}
}
}
if(!Key_Right&&!flag_Key_Right)
{
delay(2000);
if(!Key_Right)
{
flag_Key_Right=1;
LCD1602_Print(0,0," Turn Right ");
LCD1602_Print(0,1," LED_Right Flash");
if(Flash_Mode==2)
{
Flash_Mode=0;
LED_Right=1;
}
else
{
LED_Left=1;
Flash_Mode=2;
}
}
}
if(!Key_Stop&&!flag_Key_Stop)
{
unsigned char Temp_Flash_Mode=0;
delay(2000);
if(!Key_Stop)
{
flag_Key_Stop=1;
LCD1602_Print(0,0," Stop ");
LCD1602_Print(0,1," LED_Stop Light ");
Temp_Flash_Mode=Flash_Mode;//模式備份
Flash_Mode=4;
LED_Left=0;
LED_Right=0;
}
while(!Key_Stop);
LED_Left=1;
LED_Right=1;
Flash_Mode=Temp_Flash_Mode;//模式還原
switch(Flash_Mode)//文字還原
{
case 1:
LCD1602_Print(0,0," Turn Left ");
LCD1602_Print(0,1," LED_Left Flash ");
break;
case 2:
LCD1602_Print(0,0," Turn Right ");
LCD1602_Print(0,1," LED_Right Flash");
break;
case 3:
LCD1602_Print(0,0," Emergency ");
LCD1602_Print(0,1," Double Flash ");
break;
default:break;
}
}
if(!Key_Emergency&&!flag_Key_Emergency)
{
delay(2000);
if(!Key_Emergency)
{
flag_Key_Emergency=1;
LCD1602_Print(0,0," Emergency ");
LCD1602_Print(0,1," Double Flash ");
if(Flash_Mode==3)
{
Flash_Mode=0;
LED_Left=1;
LED_Right=1;
}
else
{
LED_Left=0;
LED_Right=0;
Flash_Mode=3;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于單片機的汽車尾燈控制系統設計 凌凈清河.7z
(1.3 MB, 下載次數: 44)
2019-6-5 20:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1