欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC8G1K08-16PIN單片機為主控轉向中網燈主控程序 求指教
[打印本頁]
作者:
川蜀浪子
時間:
2020-11-9 19:56
標題:
STC8G1K08-16PIN單片機為主控轉向中網燈主控程序 求指教
/********使用STC8G1K08-16PIN為主控轉向流光燈,
1、上電掃描流光左右同時流光三次,日行燈亮。
2、接收到左或右轉向信號時相應方向流光一次,日行燈LED11 50%亮度。
3、斷開左或右轉向信號時,日行燈LED11 100%亮度。
4、鎖車左右同時接到信號時流光。*****/
#include <STC8G.H>
typedef unsigned char u8;
typedef unsigned int u16;
/********端口引腳定義*****/
sbit KEYL=P5^4; //設置左方向觸發信號
sbit KEYR=P5^5; //設置右方向觸發信號
sbit LED1=P3^2; //左方向流光燈設定
sbit LED2=P3^3;
sbit LED3=P3^4;
sbit LED4=P3^5;
sbit LED5=P3^6;
sbit LED6=P3^7; //右方向流光燈設定
sbit LED7=P1^0;
sbit LED8=P1^1;
sbit LED9=P1^6;
sbit LED10=P1^7;
sbit LED11=P3^1; //日行燈設定
bit signl=0; //觸發狀態標志
bit signr=0;
u8 count1=0; //開關消抖計數變量
u16 count2=0,count3=0; //LED延時計數變量
/********定時器初始化*****/
void Timer0Init() //10毫秒@11.0592MHz
{
AUXR &= 0x7F; //定時器時鐘12T模式
TMOD &= 0xF0; //設置定時器自動重裝模式
TL0 = 0x00; //設置定時初值
TH0 = 0xDC; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
}
/********上電掃描流光子函數*****/
void Led()
{
LED1=LED6=1; //LED1,LED6亮
count2++;
if(count2>=10) //0.1秒延時
LED1=LED6=LED2=LED7=1; //LED1、2,LED6、7亮
if(count2>=20)//0.2秒延時
LED1=LED6=0; LED2=LED7=LED3=LED8=1; //LED2、3,LED7、8亮
if(count2>=30)//0.3秒延時
LED1=LED6=LED2=LED7=0; LED3=LED8=LED4=LED9=1; //LED3、4,LED8、9亮
if(count2>=40)//0.4秒延時
LED1=LED6=LED2=LED7=LED3=LED8=0; LED4=LED9=LED5=LED10=1; //LED4、5,LED9、10亮
if(count2>=50)//0.5秒延時
LED1=LED6=LED2=LED7=LED3=LED8=LED4=LED9=0; LED5=LED10=1; //LED5,LED10亮
{
count2=60; //保持
LED1=LED6=LED2=LED7=LED3=LED8=LED4=LED9=LED5=LED10=0; //LED滅
}
}
/******主函數區******/
void main()
{
P3M0=0xFE;//設P3口為推挽輸出,P3.0為高阻輸入.
P3M1=0x01;
P1M0=0xC3;//設P1口為推挽輸出,
P1M1=0x00;
P5M0=0x00;//設P5.4、P5.5為準雙向口.
P5M1=0x00;
P3=0X01;
P1=0X3C;
KEYL =1; //不可以設低電平
KEYR =1;
Timer0Init();
Led();
Led();
Led();
LED11=1; //P5.5為高電平
while(1)
{
if(TF0==1)//定時器10毫秒溢出
{
TF0=0; //清0
/********掃描開關(觸發/復位)**************/
if(KEYL==1)//如P5.4為高電平
{
if(++count1>=2&&signl==0)//消抖計數和判斷判斷開關觸發狀態
signl=1;//觸發狀態標志置1
}
else //如P5.4為低電平
{
signl=0; //觸發狀態標志清0
count1=0; //消抖計數清0
}
if(KEYR==1)//如P5.5為高電平
{
if(++count1>=2&&signr==0)//消抖計數和判斷判斷開關觸發狀態
signr=1;//觸發狀態標志置1
}
else //如P5.5為低電平
{
signr=0; //觸發狀態標志清0
count1=0; //消抖計數清0
}
/********執行觸發/復位部分**************/
if(signl==1) //觸發狀態
{
count3=0; //計數3清0
LED11=0; //P3.1需PWM50%亮度 //P3.1輸出低電平 熄
LED1=1; //LED1亮
count2++;
if(count2>=10) //0.1秒延時
LED1=LED2=1; //LED1、2,亮
if(count2>=20)//0.2秒延時
LED1=0; LED2=LED3=1; //LED2、3,亮
if(count2>=30)//0.3秒延時
LED1=LED2=0; LED3=LED4=1; //LED3、4,亮
if(count2>=40)//0.4秒延時
LED1=LED2=LED3=0; LED4=LED5=1; //LED4、5,亮
if(count2>=50)//0.5秒延時
LED1=LED2=LED3=LED4=0; LED5=1; //LED5,亮
{
count2=60; //保持
LED1=LED2=LED3=LED4=LED5=0; //LED滅
}
}
else //復位狀態
{
count2=0; //計數2清0
LED1=LED2=LED3=LED4=LED5=0; //LED1~5熄
if(++count3>=100)//1秒延時
{
count3=100; //保持
LED11=1; //LED5亮
}
}
if(signr==1) //觸發狀態
{
count3=0; //計數3清0
LED11=0; //P3.1需PWM50%亮度 //P3.1輸出低電平 熄
LED6=1; //LED6亮
count2++;
if(count2>=10) //0.1秒延時
LED6=LED7=1; //LED6、7,亮
if(count2>=20)//0.2秒延時
LED6=0; LED7=LED8=1; //LED7、8,亮
if(count2>=30)//0.3秒延時
LED6=LED7=0; LED8=LED9=1; //LED8、9,亮
if(count2>=40)//0.4秒延時
LED6=LED7=LED8=0; LED9=LED10=1; //LED9、10,亮
if(count2>=50)//0.5秒延時
LED6=LED7=LED8=LED9=0; LED10=1; //LED10,亮
{
count2=60; //保持
LED6=LED7=LED8=LED9=LED10=0; //LED滅
}
}
else //復位狀態
{
count2=0; //計數2清0
LED6=LED7=LED8=LED9=LED10=0; //LED6~10熄
if(++count3>=100)//1秒延時
{
count3=100; //保持
LED11=1; //LED5亮
}
}
}
}
}
復制代碼
作者:
川蜀浪子
時間:
2020-11-10 10:06
那位大大幫忙看看這個程序需要怎樣修改一下,及怎樣加入PWM的調光功能。
作者:
川蜀浪子
時間:
2020-11-12 08:21
看看那位大神能指點一下雙輸入信號的思路。
作者:
lovexulu
時間:
2020-11-12 16:37
吐槽一句,這程序寫的真廢片子。
輸出選擇pwm端I/O,配置pwm。 硬件需要做些改動,不改硬件控制亮度,你估計要配置8路pwm 。不過stc8G1k08芯片只有3路。。。。
關于信號采集。。。我想應該是控制信號輸入,嚴謹寫法用中斷,不嚴謹嘛。輪詢就能行。至于雙路信號,最多不過4種狀態,case0~3,不香么。
另外,流光寫成子函數,傳遞調用參數不香么,多寫幾個花樣閃爍做成子函數。。。。。
還有,你想要的功能表達并不詳細,沒法給你具體解答。
作者:
川蜀浪子
時間:
2020-11-28 11:41
沒有人指點嗎?貼子都沉了。
作者:
51c_yang
時間:
2021-6-10 10:05
請問stc8G1k08的芯片,在keil中cpu選89c52的行嗎,還有這個頭文件就是“stc8G.h”嘛
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1