|
還有這個(gè)你- /**********************************************************
- 315M無(wú)線(xiàn)解碼51程序
- 無(wú)線(xiàn)碼寬電平脈沖時(shí)間1.8ms,低電平脈沖時(shí)間600us,
- 同步碼低電平時(shí)間18.6ms lcd1602顯示碼值
- MCU:STC12C5a60s2,11.0591MHzOSC,
- 大數(shù)碼管實(shí)驗(yàn)板調(diào)試通過(guò)
- ***************************************************/
-
- #include <stc12c5a60s2.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define _rlcar_(RX) CY=RX&0X80//RX帶進(jìn)位左移1位,數(shù)據(jù)放入ACC
- sbit WUXIAN=P3^3;
- sbit led=P1^3;
- sbit lcdrs=P3^6;
- sbit lcdrw=P3^5;
- sbit lcden=P3^7;
- sbit beep=P1^7;//蜂鳴器
- uchar code Tab[]={'0','1','2','3','4','5','6','7','8',//大寫(xiě)
- '9','A','B','C','D','E','F'};
- uchar code Tab1[]="315M WU XIAN JMA";//315無(wú)線(xiàn)解碼
- uchar code Tab2[]="MA ZHI:";//碼值
- uchar disp[8];
- uchar bdata wx_data0,wx_data1,wx_data2; //存儲(chǔ)24位無(wú)線(xiàn)數(shù)據(jù)
- uchar data wx_code0,wx_code1,wx_code2;
- uchar data wx_count,wxcount_buf; //低電平時(shí)間計(jì)數(shù)器
- uchar data wx_bit; //無(wú)線(xiàn)碼位數(shù)
- uchar data t_10ms;
- uchar data t_50ms;
- bit tb_flag; //同步碼接收成功標(biāo)志
- bit wx_ok; //無(wú)線(xiàn)碼接收成功標(biāo)志
- bit wx_sta; //無(wú)線(xiàn)信號(hào)輸入腳的高低電平狀態(tài)
- void write_dat(uchar dat);
- void display();//顯示函數(shù);
- void irwork();//數(shù)據(jù)分離
- void decode();
- void delay(uint z) //延時(shí)子程序
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=220;y>0;y--);
- }
- void write_com(uchar com)//定義一個(gè)帶參數(shù)的寫(xiě)命令子程序
- {
- lcdrs=0; //1602的rs為0時(shí),接收命令,為1時(shí)接收數(shù)據(jù)
- P0=com;//把void write_com(uchar com)中的COM中的數(shù)據(jù)給P0口
- delay(2);
- lcden=1;
- delay(2);
- lcden=0;
- delay(2);
- }
- void init_1602()//定義一個(gè)初始化子程序
- {
- uchar i;
- lcden=0;
- lcdrw=0;
- write_com(0x38);//調(diào)用 write_com子程序并把0x38賦給P0口,顯示模式打開(kāi)
- // write_com(0x0f);//調(diào)用 write_com子程序并把“開(kāi)顯示,顯示光標(biāo),光標(biāo)閃爍”指令碼賦給P0口
- write_com(0x06);//調(diào)用 write_com子程序并把“地址指針加1,整屏不移動(dòng)”指令碼賦給P0口
- //write_com(0x80+0x10);//數(shù)據(jù)指針初始化,讓指針指向可顯示的最右端
- write_com(0x80);//數(shù)據(jù)指針初始化,讓指針指向最左端,顯示從第一行開(kāi)始
- write_com(0x01);//調(diào)用 write_com子程序并把"清零指"令碼賦給P0口
- write_com(0x0c);//不顯示光標(biāo)
- write_com(0x81);
- for(i=0;i<16;i++)
- {
- write_dat(Tab1[i]);
- delay(2);
- }
- write_com(0x80+0x40);
- for(i=0;i<7;i++)
- {
- write_dat(Tab2[i]);
- delay(2);
- }
- }
-
- void write_dat(uchar dat)//定義一個(gè)帶參數(shù)的寫(xiě)數(shù)據(jù)子程序
- {
- lcdrs=1; //1602的rs為0時(shí),接收命令,為1時(shí)接收數(shù)據(jù)
- P0=dat;//把void write_shu(uchar shu)中的COM中的數(shù)據(jù)給P0口
- delay(2);
- lcden=1;
- delay(2);
- lcden=0;
- delay(2);
- }
- void mcu_initialize()
- {
- WDT_CONTR=0x00; //關(guān)閉看門(mén)狗
- AUXR=0; //定時(shí)器0和1設(shè)為傳統(tǒng)8051速度,12分頻
- // P0=0;
- TR0=0;
- TH0 = 0xa4;//11.0592M //100us中斷一次
- TL0 = 0x00;
- //TH0=0x9c;//12M//100us中斷一次
- //TL0=0x00;
- TMOD|=0x02; //設(shè)置T0為自動(dòng)裝入的8位定時(shí)器
- ET0=1; //允許T0中斷
- EA=1;
- TR0=1; //啟動(dòng)T0
- }
- void main()
- {
- mcu_initialize();
- init_1602();
- while(1)
- {
-
-
- }
- }
- void decode()
- {
- if(WUXIAN)
- { //檢測(cè)無(wú)線(xiàn)I/O口為高
- if(!wx_sta)
- {
- wx_sta=1; //無(wú)線(xiàn)信號(hào)從低變高
- wxcount_buf=wx_count;
- if(tb_flag)
- { //同步碼標(biāo)志為1
- if((0x02<wxcount_buf)&&(wxcount_buf<0x08))
- { //低電平脈寬范圍在200us到800us之間
- CY=1;
- }
- else
- if((0x0d<wxcount_buf)&&(wxcount_buf<0x14))
- { //低電平脈寬范圍在1.3ms到2ms之間
- CY=0;
- }
- else
- { //干擾碼
- loop2:wx_count=0;
- wx_bit=0;
- wxcount_buf=0;
- tb_flag=0;
- return;
- }
- _rlcar_(wx_data0);//移位寄存器,接收一位數(shù)據(jù)
- wx_data0=ACC;
- _rlcar_(wx_data1);
- wx_data1=ACC;
- _rlcar_(wx_data2);
- wx_data2=ACC;
- if(++wx_bit==24)
- { //接收完24位碼,接收成功標(biāo)志wx_ok置1
- tb_flag=0;
- wx_bit=0;
- wx_ok=1;
- wx_code0=wx_data0;
- wx_code1=wx_data1;
- wx_code2=wx_data2;
- irwork();
- display();
- // P0=wx_code0; //p1口接LED顯示數(shù)據(jù)
- }
- }
- else
- {
- if((0x87<wxcount_buf)&&(wxcount_buf<0xc8))
- tb_flag=1;//抵電平脈寬范圍在13.5ms到20ms之間,把同步碼標(biāo)志置1
- else
- goto loop2;
- }
- }
- }
- else
- {
- if(wx_sta)
- {
- wx_count=0; //無(wú)線(xiàn)信號(hào)從高變低,清零低電平脈寬計(jì)數(shù)器
- wx_sta=0;
- }
- else
- wx_count++; //無(wú)線(xiàn)信號(hào)為低電平,低電平脈寬計(jì)數(shù)器加1
- }
- }
- void irwork()//數(shù)據(jù)分離
- {
- disp[0]=wx_code0/16;//取高四位
- disp[1]=wx_code0%16;//取低四位
- disp[2]=wx_code1/16;//取高四位
- disp[3]=wx_code1%16;//取低四位
- disp[4]=wx_code2/16;//取高四位
- disp[5]=wx_code2%16;//取低四位
- // disp[6]=ircode[3]/16;//取高四位
- // disp[7]=ircode[3]%16;//取低四位
- }
- void display()//顯示函數(shù)
- {
- write_com(0x80+0x48);
- write_dat(Tab[disp[0]]);
- write_dat(Tab[disp[1]]);
- write_dat(Tab[disp[2]]);
- write_dat(Tab[disp[3]]);
- write_dat(Tab[disp[4]]);
- write_dat(Tab[disp[5]]);
- // write_dat(Tab[disp[6]]);
- // write_dat(Tab[disp[7]]);
- }
- void timer0_isr() interrupt 1
- {
- decode();
- if(++t_10ms>=100)
- { //P3.7口接的LED以0.5s的速度閃爍
- t_10ms=0;
- if(++t_50ms>=50)
- {
- led=!led;
- t_50ms=0;
- }
- }
-
- }
復(fù)制代碼 都試試吧 |
評(píng)分
-
查看全部評(píng)分
|