|
經過幾天學習,將各種解碼做顯示程序根據慧凈師傅的程序改寫1602顯示
lADPD3IrqcwmzMTNA-jNAu4_750_1000.jpg_720x720q90g.jpg (72.4 KB, 下載次數: 106)
下載附件
2020-4-12 23:05 上傳
00000000紅外遙控器編碼o.png (147.12 KB, 下載次數: 101)
下載附件
2020-4-12 22:57 上傳
單片機程序如下:
- #include<reg52.h> //包含頭文件
- #include"LCD1602.h"
- //#include"delay_50us.h"
- //#include"delay_50ms.h"
- sbit IR=P3^2; //紅外接口標志
- //#define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換
- //sbit LATCH1=P2^6;//定義鎖存使能端口 段鎖存
- //sbit LATCH2=P2^7;// 位鎖存
- /*------------------------------------------------
- 全局變量聲明
- ------------------------------------------------*/
- //unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
- unsigned char irtime;//紅外用全局變量 ,num
- bit irpro_ok,irok;
- unsigned char IRcord[6];
- unsigned char irdata[33];
- char code Tab[16]="0123456789ABCDEF";
- char data TimeNum[]=" ";
- /*------------------------------------------------
- 函數聲明
- ------------------------------------------------*/
- //
- void Ir_work(void);
- void Ir_towork(void);
- void Ircordpro(void);
- /*------------------------------------------------
- 定時器0中斷處理
- ------------------------------------------------*/
- void tim0_isr (void) interrupt 1 using 1
- {
- irtime++; //用于計數2個下降沿之間的時間
- }
- /*------------------------------------------------
- 外部中斷0中斷處理
- ------------------------------------------------*/
- void EX0_ISR (void) interrupt 0 //外部中斷0服務函數
- {
- static unsigned char i; //接收紅外信號處理
- static bit startflag; //是否開始處理標志位
- if(startflag)
- {
- if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms
- i=0;
- irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1
- irtime=0;
- i++;
- if(i==33)
- {
- irok=1;
- i=0;
- }
- }
- else
- {
- irtime=0;
- startflag=1;
- }
- }
- /*------------------------------------------------
- 定時器0初始化
- ------------------------------------------------*/
- void TIM0init(void)//定時器0初始化
- {
- TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
- TH0=0x00; //重載值
- TL0=0x00; //初始化值
- ET0=1; //開中斷
- TR0=1;
- }
- /*------------------------------------------------
- 外部中斷0初始化
- ------------------------------------------------*/
- void EX0init(void)
- {
- IT0 = 1; //指定外部中斷0下降沿觸發,INT0 (P3.2)
- EX0 = 1; //使能外部中斷
- EA = 1; //開總中斷
- }
- /*------------------------------------------------
- 鍵值處理
- 注:分解顯示轉換值列表
- ------------------------------------------------*/
- void Ir_work(void)//紅外鍵值散轉程序
- {
- TimeNum[5] = Tab[IRcord[0]/16]; //處理客戶碼并顯示
- TimeNum[6] = Tab[IRcord[0]%16];
- TimeNum[8] = Tab[IRcord[1]/16]; //處理客戶碼并顯示
- TimeNum[9] = Tab[IRcord[1]%16];
- TimeNum[11] = Tab[IRcord[2]/16]; //處理數據碼并顯示
- TimeNum[12] = Tab[IRcord[2]%16];
- TimeNum[14] = Tab[IRcord[3]/16]; //處理數據反碼并顯示
- TimeNum[15] = Tab[IRcord[3]%16];
- TimeNum[17] = Tab[IRcord[4]/16]; //處理數據反碼并顯示
- TimeNum[18] = Tab[IRcord[4]%16];
- TimeNum[20] = Tab[IRcord[5]/16]; //處理數據反碼并顯示
- TimeNum[21] = Tab[IRcord[5]%16];
- irpro_ok=0;//處理完成標志
- }
- /************* *********/
- void Ir_towork(void)//紅外鍵值散轉程序
- {
-
- // PutStr(1,0,TimeNum);//顯示處理過后的碼值
- switch(IRcord[2])//判斷第三個數碼值
- {
- case 0x45:lcd_wcom(0x80+0x40);lcd_wdat(Tab[1]);break;//1 顯示相應的按鍵值
- case 0x46:lcd_wcom(0x81+0x40);lcd_wdat(Tab[2]);break;//2
- case 0x47:
- /***********循環顯示 I LIKE MCU! 只需要屏蔽lcd_wcom(0x82+0x40);lcd_wdat(Tab[3]);break;//3
- for(num=0;num<11;num++)
- {
- lcd_wcom(0x83+0x40);
- lcd_wdat(table[num]); //a//寫數據write_date(0x31); write_date('1');
- delayZ(200);
- // write_date('B');
- };break;
- *****************************************/
- lcd_wcom(0x82+0x40);lcd_wdat(Tab[3]);break;//3
- case 0x44:lcd_wcom(0x83+0x40);lcd_wdat(Tab[4]);break;//4
- case 0x40:lcd_wcom(0x84+0x40);lcd_wdat(Tab[5]);break;//5
- case 0x43:lcd_wcom(0x85+0x40);lcd_wdat(Tab[6]);break;//6
- case 0x07:lcd_wcom(0x86+0x40);lcd_wdat(Tab[7]);break;//7
- case 0x15:lcd_wcom(0x87+0x40);lcd_wdat(Tab[8]);break;//8
- case 0x09:lcd_wcom(0x88+0x40);lcd_wdat(Tab[9]);break;//9
- /********** **********/
- case 0x16:lcd_wcom(0x80+0x4A);lcd_wdat('%');break;//0
- case 0x19:lcd_wcom(0x80+0x4A);lcd_wdat('#');break;//100
- case 0x0D:lcd_wcom(0x80+0x4A);lcd_wdat('
- );break;//200
-
- case 0x0c:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[1]);break;//1 顯示相應的按鍵值
- case 0x18:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[2]);break;//2
- case 0x5e:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[3]);break;//3
- case 0x08:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[4]);break;//4
- case 0x1c:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[5]);break;//5
- case 0x5a:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[6]);break;//6
- case 0x42:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[7]);break;//7
- case 0x52:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[8]);break;//8
- case 0x4a:lcd_wcom(0x80+0x4B);lcd_wdat(Tab[9]);break;//9
- default:break;
- }
- irpro_ok=0;//處理完成標志
- }
- /*------------------------------------------------
- 紅外碼值處理
- ------------------------------------------------*/
- void Ircordpro(void)//紅外碼值處理函數
- {
- unsigned char i, j, k;
- unsigned char cord,value;
- k=1;
- for(i=0;i<4;i++) //處理4個字節
- {
- for(j=1;j<=8;j++) //處理1個字節8位
- {
- cord=irdata[k];
- if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差
- value|=0x80;
- if(j<8)
- {
- value>>=1;
- }
- k++;
- }
- IRcord[i]=value;
- value=0;
- // tablex(IRcord[2]);
- }
- irpro_ok=1;//處理完畢標志位置1
- }
- /*------------------------------------------------
- 主函數
- ------------------------------------------------*/
- void main(void)
- {
- lcd_init();
- EX0init(); //初始化外部中斷
- TIM0init();//初始化定時器
- // DataPort=0xfe; //取位碼 第一位數碼管選通,即二進制1111 1110
- // LATCH2=1; //位鎖存
- // LATCH2=0;
- lcd_wcom(0x80+0x46);
- lcd_wdat('@');//*"1",0*/
- while(1)//主循環
- {
- //uchar h;
- //h=IRcord[2];
- //tablex(table1[h]);
- lcd_wcom(0x80);lcd_wdat(TimeNum[5]);
- lcd_wcom(0x81);lcd_wdat(TimeNum[6]);
- lcd_wcom(0x82);lcd_wdat(TimeNum[8]);
- lcd_wcom(0x83);lcd_wdat(TimeNum[9]);
- lcd_wcom(0x84);lcd_wdat(TimeNum[11]);
- lcd_wcom(0x85);lcd_wdat(TimeNum[12]);
- lcd_wcom(0x86);lcd_wdat(TimeNum[14]);
- lcd_wcom(0x87);lcd_wdat(TimeNum[15]);
- lcd_wcom(0x88);lcd_wdat(TimeNum[18]);
- lcd_wcom(0x89);lcd_wdat(TimeNum[18]);
- lcd_wcom(0x8a);lcd_wdat(TimeNum[20]);
- lcd_wcom(0x8b);lcd_wdat(TimeNum[21]);
- if(irok) //如果接收好了進行紅外處理
- {
- Ircordpro();
- irok=0;
- }
- if(irpro_ok) //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等
- {
- Ir_work();
- Ir_towork();
- }
- }
- }
復制代碼 全部資料51hei下載地址:
慧凈.rar
(32.96 KB, 下載次數: 119)
2020-4-12 23:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|