久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6163|回復: 2
打印 上一主題 下一主題
收起左側

求教如何將51單片機紅外遙控器鍵碼顯示程序改成紅外控制數碼管0-99顯示

[復制鏈接]
跳轉到指定樓層
樓主
下面是51單片機紅外遙控lcd1602顯示鍵碼程序
#include<reg51.h>
#include<math.h>
#define   uchar   unsigned  char
#define   uint    unsigned   int
#define   ulong   unsigned  long
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x06,0xbf};//共陽極
ulong  num=0,qnum=0;
uchar  key0=0,ikey0=0,kkey=0;   //qnum為前一個鍵值,當為0時表示沒有前一個鍵值,ikey0表示當存在前一個鍵值下進行加減乘除運算
//uchar  num1,num2,num3,num4,num5,num6;  //key0表示當為1時,是數字鍵,為0時,是清零鍵,為2時,是運算鍵,為3時,等號鍵
void  delay(uint d)                    
{
     while(d-->0);
}

void  error()    //當數值溢出的時候                       
{   
     P2 = 0x00;
     P2 = 0xff;
     P0 = tab[10];
     delay(100);
     P2 = 0x00;
     P0 = 0xff;
}
void  display(ulong num0)   //顯示函數
{
     if(num0>999999&&num0<-99999)                      //當數值溢出時
          error();
     else if(num0>=0&&num0<=999999)                         //當數值為正數時
     {
          P2 = 0x00;
          dis1 = 1;     //顯示最高位,第一位
          P0 = tab[num0/100000];
          delay(100);
          dis1 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis2 = 1;       //第二位
          P0 = tab[(num0/10000)%10];
          delay(100);
          dis2 = 0;
          P0 = 0xff;


          P2 = 0x00;
          dis3 = 1;       //第三位
          P0 = tab[(num0/1000)%10];
          delay(100);
          dis3 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis4 = 1;         //第四位
          P0 = tab[(num0/100)%10];
          delay(100);
          dis4 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis5 = 1;        //第五位
          P0 = tab[(num0/10)%10];
          delay(100);
          dis5 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis6 = 1;        //顯示最低位,第六位
          P0 = tab[num0%10];
          delay(100);
          dis6 = 0;
          P0 = 0xff;
      }
      else                             //當數值為負數時
      {
          num0 = abs(num0);
          P2 = 0x00;
          dis1 = 1;     //顯示最高位,第一位
          P0 = tab[11];
          delay(100);
          dis1 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis2 = 1;       //第二位
          P0 = tab[(num0/10000)%10];
          delay(100);
          dis2 = 0;
          P0 = 0xff;


          P2 = 0x00;
          dis3 = 1;       //第三位
          P0 = tab[(num0/1000)%10];
          delay(100);
          dis3 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis4 = 1;         //第四位
          P0 = tab[(num0/100)%10];
          delay(100);
          dis4 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis5 = 1;        //第五位
          P0 = tab[(num0/10)%10];
          delay(100);
          dis5 = 0;
          P0 = 0xff;

          P2 = 0x00;
          dis6 = 1;        //顯示最低位,第六位
          P0 = tab[num0%10];
          delay(100);
          dis6 = 0;
          P0 = 0xff;         
      }
}

void  key()         //鍵盤掃描函數
{
     uchar  temp;
     P1 = 0xff;
     P1 = 0Xef;   //檢測第一行
     temp = P1;
     temp = temp&0x0f;
     if(P1!=0X0f)
     {
          delay(5);
          temp = P1;
          temp = temp&0x0f;
          if(P1!=0X0f)
          {
               temp = P1;

               switch(temp)
               {
                    case 0xe7:  key0 = 0; break;                  //-----清屏鍵
                    case 0xeb:  key0 = 1; num = num*10+0; kkey = 1; break;  //-------'0'
                    case 0xed:  key0 = 3; break;                  //-----等號鍵=
                    case 0xee:  key0 = 2; ikey0 = 10; break;      //------加號鍵+
               }

          while(temp!=0x0f)
          {
               temp = P1;
               temp = temp&0x0f;
          }
          //P0 = tab[h];
         }
     }


     P1 = 0xff;
     P1 = 0Xdf;   //檢測第二行
     temp = P1;
     temp = temp&0x0f;
     if(P1!=0X0f)
     {
          delay(5);
          temp = P1;
          temp = temp&0x0f;
          if(P1!=0X0f)
          {
               temp = P1;

               switch(temp)
               {
                    case 0xd7:  key0 = 1; num = num*10+1; kkey = 1; break;   //------'1'
                    case 0xdb:  key0 = 1; num = num*10+2; kkey = 1; break;   //------'2'
                    case 0xdd:  key0 = 1; num = num*10+3; kkey = 1; break;   //-------'3'
                    case 0xde:  key0 = 2; ikey0 = 11; break;       //-----減號鍵-
               }

          while(temp!=0x0f)
          {
               temp = P1;
               temp = temp&0x0f;
          }
          //P0 = tab[h];
         }
     }


     P1 = 0xff;
     P1 = 0Xbf;   //檢測第三行
     temp = P1;
     temp = temp&0x0f;
     if(P1!=0X0f)
     {
          delay(5);
          temp = P1;
          temp = temp&0x0f;
          if(P1!=0X0f)
          {
               temp = P1;

               switch(temp)
               {
                    case 0xb7:  key0 = 1; num = num*10+4; kkey = 1; break;    //-------'4'
                    case 0xbb:  key0 = 1; num = num*10+5; kkey = 1; break;    //-------'5'
                    case 0xbd:  key0 = 1; num = num*10+6; kkey = 1; break;    //-------'6'
                    case 0xbe:  key0 = 2; ikey0 = 12; break;        //------乘號鍵*
               }

          while(temp!=0x0f)
          {
               temp = P1;
               temp = temp&0x0f;
          }
          //P0 = tab[h];
         }
     }


     P1 = 0xff;
     P1 = 0X7f;   //檢測第四行
     temp = P1;
     temp = temp&0x0f;
     if(P1!=0X0f)
     {
          delay(5);
          temp = P1;
          temp = temp&0x0f;
          if(P1!=0X0f)
          {
               temp = P1;

               switch(temp)
               {
                    case 0x77:  key0 = 1; num = num*10+7; kkey = 1; break;     //-------'7'
                    case 0x7b:  key0 = 1; num = num*10+8; kkey = 1; break;     //--------'8'
                    case 0x7d:  key0 = 1; num = num*10+9; kkey = 1; break;     //--------'9'
                    case 0x7e:  key0 = 2; ikey0 = 13; break;         //-------除號鍵

               }

          while(temp!=0x0f)
          {
               temp = P1;
               temp = temp&0x0f;
          }
         }
     }

}

void  count()
{
     key();
     if(key0 == 0)         //清零
     {
          num = 0;qnum = 0;
          display(num);
     }
     else  if(key0 == 1)       //數字鍵,顯示數字
     {     
          display(num);

     }
     else if(key0 == 8)
     {
          display(qnum);
     }
     else if(key0 == 2)        //當為運算符號鍵時
     {
          qnum = num;
          num = 0;
          key0 = 8;

     }
     else if(key0 == 3)        //等號鍵
     {
          switch(ikey0)
               {
                    case 10:num = num + qnum;  key0 = 2; break;
                    case 11:num = qnum - num;  key0 = 2; break;
                    case 12:num = num * qnum;  key0 = 2; break;
                    case 13:num = qnum / num;  key0 = 2; break;
                    //default  break;
               }        
          //}
     }

}


void  main()
{    while(1)
     {   
          //display(num);
          count();
     }     
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2018-1-3 08:41 | 只看該作者
我有個例子程序,你看看,自己改。
/***************************************************************************
    程序功能:
        1、運行程序,按遙控器按鍵,在數碼管上顯示相應的控制碼(以16進制顯示);
        2、對特別的幾個鍵,有相應的現象出現:
        (1)電源鍵,使繼電器工作或斷開;
        (2)靜音鍵,使蜂鳴器響或不響;
        (3)快進鍵讓LED燈向右出現一次走馬燈現象;
        (4)快退鍵讓LED燈向左出現一次走馬燈現象;
        (5)按0~9,數碼管顯示所按的鍵號;
        (6)按其它鍵,不會改變已經按的數字鍵的顯示,表示看電視臺開關電源或靜音、快進快退,都不會
改變臺號。
    (7)其它鍵沒想好怎么以現有板產生相應功能,所以按下后,沒有特別現象,只有顯示其控制碼。
******************************************************************************/
#include "reg51.h"//頭文件:

#define LED8 P2//紅外遙控功能之一是讓LED燈亮,所以要將P2口改名

sbit hwx=P3^3;                //紅外接收數據引腳,也是外部中斷1的I/O口
sbit SMG_q = P1^0;        //定義數碼管陽級控制腳(千位)
sbit SMG_b = P1^1;        //定義數碼管陽級控制腳(百位)
sbit SMG_s = P1^2;        //定義數碼管陽級控制腳(十位)
sbit SMG_g = P1^3;        //定義數碼管陽級控制腳(個位)
sbit JDQ=P1^4;                //繼電器
sbit Beep =  P1^5 ;        //蜂鳴器

code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
                                                        0x88,0x8c,0xc6,0xa1,0x86,0x8e};       

unsigned char ly_disdate[4]={0,0,0,0};
unsigned char ly_lhj[4],i;
bit ly_flag=1;

void display();

void delay(void);

void Delay10ms(unsigned int c)
{
    unsigned char a,b;
    for(c;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

void main(void)
{
        EA=1;
        EX1=1;
        IT1=1;
        TMOD=0X10;
        JDQ=1;
        ly_flag=0;
        while(1){       
                if(ly_flag){
                        ly_flag=0;
                        if ((ly_lhj[2]==0x45))
                        {
                                JDQ=~JDQ;
                        }
                        if ((ly_lhj[2]==0x47))
                        {
                                Beep=~Beep;
                        }
                        if ((ly_lhj[2]==0x40))
                        {
                                LED8=0xfe;
                                for(i=0;i<8;i++)
                                {                                         
                                        Delay10ms(10);
                                        LED8=LED8<<1;
                                }
                                LED8=0xff;
                        }
                        if ((ly_lhj[2]==0x43))
                        {
                                LED8=0x7f;
                                for(i=0;i<8;i++)
                                {                                         
                                        Delay10ms(10);
                                        LED8=LED8>>1;
                                }
                                LED8=0xff;
                        }
                        if ((ly_lhj[2]==0x16))
                        {
                                ly_disdate[0]=0;                       
                        }
                        if ((ly_lhj[2]==0x0c))
                        {
                                ly_disdate[0]=1;                       
                        }                       
                        if ((ly_lhj[2]==0x18))
                        {
                                ly_disdate[0]=2;                       
                        }                       
                        if ((ly_lhj[2]==0x5e))
                        {
                                ly_disdate[0]=3;                       
                        }                       
                        if ((ly_lhj[2]==0x08))
                        {
                                ly_disdate[0]=4;                       
                        }                       
                        if ((ly_lhj[2]==0x1c))
                        {
                                ly_disdate[0]=5;                       
                        }                       
                        if ((ly_lhj[2]==0x5a))
                        {
                                ly_disdate[0]=6;                       
                        }                       
                        if ((ly_lhj[2]==0x42))
                        {
                                ly_disdate[0]=7;                       
                        }                       
                        if ((ly_lhj[2]==0x52))
                        {
                                ly_disdate[0]=8;                       
                        }                       
                        if ((ly_lhj[2]==0x4a))
                        {
                                ly_disdate[0]=9;                       
                        }                       
                        ly_disdate[2]=ly_lhj[2]/16;
                        ly_disdate[3]=ly_lhj[2]%16;
                }
                display();
        }               
}

        TL1=0;
        TH1=0;
        TR1=1;
        while(!hwx);
        TR1=0;       
        if(TH1<30||TH1>40)       
                return;

        TH1=0;
        TR1=1;
        while(hwx)
        {
                delay();
                if(TH1>22)
                        return;               
        }
        TR1=0;
        if(TH1<12)       
                return;

        for(i=0;i<4;i++)
        {
                for(ia=0;ia<8;ia++)
                {                               
                        while(!hwx);
                       
                        TH1=0;
                        TR1=1;       
                        while(hwx)
                        {
                                delay();
                                if(TH1>15)               
                                        return;               
                        }
                        TR1=0;

                        ly_lhj>>=1;
                        if(TH1>4)               
                                ly_lhj|=0x80;
                }
        }
        ly_flag=1;
        TF1=0;
}

void display()
{
        SMG_q=0;
        P0=table[ly_disdate[0]];       
        delay();                       
        P0=0XFF;                       
        SMG_q=1;               

        SMG_s=0;               
        P0=table[ly_disdate[2]];
        delay();                       
        P0=0XFF;                       
        SMG_s=1;               

        SMG_g=0;               
        P0=table[ly_disdate[3]];
        delay();                       
        P0=0XFF;                       
        SMG_g=1;               
}

void delay(void)//35.5us
{               
        unsigned char i=10;
        while(i--);
}
適用電路:










評分

參與人數 1黑幣 +5 收起 理由
線性代數 + 5

查看全部評分

回復

使用道具 舉報

板凳
ID:270556 發表于 2018-1-3 08:54 | 只看該作者
定義一個1ms的定時中斷,然后將欲顯示的內容在中斷中發給LED端口。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲啪啪| 91精品导航 | 免费的av网站 | 日日操夜夜操天天操 | 天天躁日日躁狠狠的躁天龙影院 | 国产精品亚洲欧美日韩一区在线 | 久久国产精品72免费观看 | 精品日韩在线 | 成人欧美一区二区三区黑人孕妇 | 日韩高清一区 | 中文字幕国产 | 天天拍夜夜爽 | 欧美激情欧美激情在线五月 | 日本在线免费看最新的电影 | 国产一区二区三区免费观看视频 | 天天看天天爽 | 成人国产精品色哟哟 | 亚洲精品亚洲人成人网 | 18性欧美| 精品九九九 | 成人毛片在线视频 | 我要看黄色录像一级片 | 欧美 中文字幕 | 成人综合视频在线观看 | 成人深夜福利网站 | 精品久久久久久久久久久久 | 91久久国产综合久久 | 国产激情一区二区三区 | 亚洲综合久久精品 | 日韩欧美一区二区三区四区 | a级大片 | 午夜影院免费体验区 | 精品av | 好姑娘高清在线观看电影 | 久久久久国产一区二区三区 | 亚洲欧美久久 | 亚洲视频手机在线 | 亚洲精品久久久久久一区二区 | 国产高清一区二区三区 | 国产激情视频在线观看 | 日本欧美国产 |