|
/*三角牌遙控風(fēng)扇FS-40-101 5鍵紅外遙控器程序,可通用多種型號 數(shù)據(jù)總長度:46毫秒兩幀有效幀 12MH晶振 12MHz=12,000,000Hz,也就是1秒振蕩一千二百萬次 13微秒中斷一次
STC8G1K08A-36I-SOP8系列單片機(jī)是 STC 生產(chǎn)的單時鐘/機(jī)器周期(1T)的單片機(jī),是寬電壓/高速/高可靠/低功耗/強(qiáng)抗靜電/較強(qiáng)抗干擾的新一代 8051 單片機(jī),超級加密。指令代碼完全兼容傳統(tǒng) 8051。*/
//無自動休眠、無任意鍵喚醒、無減速鍵 芯片工作電壓:1.9V-5.5V 一幀12位,從低位到高位發(fā)射 發(fā)射順序:3位起始碼(110)、用戶碼C1C2(11)、指令碼0-6位,間隔約8ms重復(fù)發(fā)一次,至少發(fā)兩幀有效幀
//為“1”時:發(fā)射1.284ms高電平,不發(fā)射0.395ms低電平; 為“0”時:發(fā)射0.395ms高電平,不發(fā)射1.284ms低電平;各毫秒值與參考值近似也可以,參考紅外遙控發(fā)射芯片:BA5104。
單片機(jī)源程序如下:
#include "stc8.h"
sbit ir=P5^5;/*紅外發(fā)射管控制腳*/unsigned int count/*中斷計數(shù)*/, set_count; /*設(shè)定中斷次數(shù)*/
sbit key1=P3^0;sbit key2=P3^1;sbit key3=P3^2;sbit key4=P3^3;sbit key5=P5^4;/*5個按鍵*/
bit irflag;/*紅外發(fā)送標(biāo)志位*/unsigned char irdata,ircode,/*發(fā)送的紅外數(shù)據(jù)*/irqy=0xfb;/*3位起始碼+1位用戶碼*/
void delayms(unsigned int xms){unsigned int i,j;for(i=xms;i>0;i--) for(j=110;j>0;j--);}
void ir_sendbyte(char ws) //發(fā)送4位或8位紅外數(shù)據(jù)
{
unsigned char i;
for(i=0;i<ws;i++) //判斷4位或8位
{
if(ircode&0x01){ //判斷紅外編碼最低位,
set_count=95; //若為1則1.284ms的高電平
irflag=1; //啟動紅外發(fā)射二極管發(fā)射
count=0; //中斷計數(shù)清0
TR0=1; //開啟定時器0
while(count<set_count);//等待發(fā)送完
TR0=0; //關(guān)閉定時器0
set_count=35; //若為1則0.395ms的低電平
irflag=0; //低電平則不發(fā)射
count=0; //中斷計數(shù)清0
TR0=1; //開啟定時器0
while(count<set_count);//等待發(fā)送完
TR0=0; } //關(guān)閉定時器0
else { //否則
set_count=35; //為0則0.395ms的高電平
irflag=1; //啟動紅外發(fā)射二極管發(fā)射
count=0; //中斷計數(shù)清0
TR0=1; //開啟定時器0
while(count<set_count);//等待發(fā)送完
TR0=0; //關(guān)閉定時器0
set_count=95; //為0則1.284ms的低電平
irflag=0; //低電平則不發(fā)射
count=0; //中斷計數(shù)清0
TR0=1; //開啟定時器0
while(count<set_count);//等待發(fā)送完
TR0=0;} //關(guān)閉定時器0
ircode=ircode>>1; //將數(shù)據(jù)右移,即從低位到高位發(fā)送
}
}
void ir_send() //發(fā)送紅外數(shù)據(jù) 至少要發(fā)出兩幀紅外幀
{
ircode=irqy; //發(fā)送3位起始碼+1位C1用戶碼(1)
ir_sendbyte(4); //發(fā)送4位紅外數(shù)據(jù)
ircode=irdata; //發(fā)送1位C2用戶碼(1)+7位指令碼
ir_sendbyte(8); //發(fā)送8位紅外數(shù)據(jù)
set_count=550; /*延時4ms低電平*/
irflag=0; /*關(guān)閉紅外發(fā)射二極管發(fā)射*/
count=0; /*中斷計數(shù)先清0*/
TR0=1; /*開啟定時器0*/
while(count<set_count);/*等待發(fā)送完*/
TR0=0; //關(guān)閉定時器0
ircode=irqy; //發(fā)送3位起始碼+1位C1用戶碼(1)
ir_sendbyte(4); //發(fā)送4位紅外數(shù)據(jù)
ircode=irdata; //發(fā)送1位C2用戶碼(1)+7位指令碼
ir_sendbyte(8); //發(fā)送8位紅外數(shù)據(jù)
ir=1; //發(fā)射完了關(guān)閉紅外發(fā)射二極管
}
void timer0_init() //定時器初始化
{
TMOD=0x02; //定時0 8位自動重裝模式
TH0=0xf3; //設(shè)置定時初始值 13微秒
TL0=0xf3; //設(shè)置定時重載值 13微秒
EA=1; //全局中斷允許位。EA=1,打開全局中斷控制。
EX0=0; //外部中斷0允許位,1表示允許外部中斷0的中斷申請;
ET0=1; //定時/計數(shù)器0中斷允許位,1表示允許定時/計數(shù)器0的溢出中斷;
TR0=0; //關(guān)閉定時器0
count=0; //中斷計數(shù)先清0
irflag=0; //紅外發(fā)射標(biāo)志先置0
}
void keyscan()//關(guān)機(jī):0x81 定時:0x11 風(fēng)類:0x21 搖頭:0x09 彩燈:0xc3 開風(fēng)速:0x41 減速:無 無:0x05 無:0x63
{
if(key1==0){delayms(500);if(key1==0){irdata=0x41;/*用戶碼+指令碼*/ir_send();/*發(fā)送紅外編碼*/while(!key1);}} //開風(fēng)速
if(key2==0){delayms(500);if(key2==0){irdata=0x11;/*用戶碼+指令碼*/ir_send();/*發(fā)送紅外編碼*/while(!key2);}} //定時
if(key3==0){delayms(500);if(key3==0){irdata=0x81;/*用戶碼+指令碼*/ir_send();/*發(fā)送紅外編碼*/while(!key3);}} //關(guān)機(jī)
if(key4==0){delayms(500);if(key4==0){irdata=0x21;/*用戶碼+指令碼*/ir_send();/*發(fā)送紅外編碼*/while(!key4);}} //風(fēng)類
if(key5==0){delayms(500);if(key5==0){irdata=0x09;/*用戶碼+指令碼*/ir_send();/*發(fā)送紅外編碼*/while(!key5);}} //搖頭
}
void main()
{
P5M0=0;P5M1=0;P3M0=0;P3M1=0;/*設(shè)置準(zhǔn)雙向口模式*/timer0_init();//定時0初始化
while(1) { keyscan();/*按鍵檢測*/ }
}
void timer0() interrupt 1 //定時器0中斷
{
count++;if(irflag==1) ir=~ir;/*有發(fā)射標(biāo)志,則發(fā)射38khz的矩形波*/else ir=1;/*否則不發(fā)射,即相當(dāng)于發(fā)射編碼中的低電平*/
}
這個是參考波形圖
波形對比.png (236.25 KB, 下載次數(shù): 59)
下載附件
2023-3-15 17:31 上傳
這個是用線槽做的外殼參考圖
線槽改的外殼.jpg (2.93 MB, 下載次數(shù): 48)
下載附件
2023-3-24 12:33 上傳
這是焊接好的3+6鍵
焊接好的正面.jpg (3.49 MB, 下載次數(shù): 52)
下載附件
2023-3-24 12:34 上傳
背面走線
背面走線.jpg (3.44 MB, 下載次數(shù): 54)
下載附件
2023-3-24 12:34 上傳
安裝上鋰電池
注意:鋰電是4.2V的,不能與USB串口的5V電源共用,要不然電池會起鼓燃燒。
這里沒弄降壓電路,充電可另外用4.2V的充電器充。
按上鋰電池.jpg (3.47 MB, 下載次數(shù): 55)
下載附件
2023-3-24 12:34 上傳
另外弄了個3+6鍵、省電程序(掉電模式)、外部中斷喚醒,我就不發(fā)這里了。
就差畫PCB板、弄塑料外殼、充電電路… 也就基本像個正經(jīng)的遙控器了。
按鍵不會弄那種導(dǎo)電膠的軟按鍵
|
評分
-
查看全部評分
|