1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      hd7279鍵盤顯示芯片c51代碼

      更新時間: 2006-03-17 11:05:58來源: 粵嵌教育瀏覽量:4351

      注意:經我的實驗hd7279的耐壓性能不是太好,不要超過5.5v。

      /************************************************************************************/
      /* */
      /* S A G E T E C H . P R O P R I E T A R Y */
      /* */
      /* COPYRIGHT (c) 2005 BY SAGE TECH. CHINA. */
      /* -- ALL RIGHTS RESERVED -- */
      /* */
      /* File Name: HD7279Atest.c */
      /* Author: sagestar */
      /* Created: 2005 */
      /* Modified: no */
      /* Revision: V1.0 */
      /************************************************************************************/
      /*程序作用:測試Sage Tech.開發板(MCP300)中hd7279鍵盤顯示芯片是否能正常工作 */
      /*程序功能:按下1號鍵顯示0、1、2、3,按下2號鍵顯示c、d、e、f,按下3號鍵顯示4、5、6、7 */
      /* 按下4號鍵顯示8、9、a、b,按下0號鍵點亮4個LED燈 */
      /************************************************************************************/
      #include <reg51.h> /*定義頭文件*/
      /************************************************************************************/
      typedef unsigned char BYTE; /*自定義字節類型*/
      /************************************************************************************/
      #define Set_Bit(BIT) (BIT = 1) /*定義置1函數*/
      #define Clear_Bit(BIT) (BIT = 0) /*定義清0函數*/
      /************************************************************************************/
      void Led_On(BYTE); /*定義點亮LED燈函數*/
      void Led_Off(BYTE); /*定義熄滅LED燈函數*/
      void Write_Hd7279(BYTE,BYTE); /*定義HD7279寫函數*/
      BYTE Read_Hd7279(BYTE); /*定義HD7279讀函數*/
      void Send_Byte(BYTE); /*定義HD7279發送字節函數*/
      BYTE Receive_Byte(void); /*定義HD7279接收字節函數*/
      void Short_Delay(void); /*定義短延時函數*/
      void Long_Delay(void); /*定義長延時函數*/
      void Mcu_Init(void); /*定義MCU初始化函數*/
      void Delay_200_mS(void); /*定義200ms延時函數*/
      /************************************************************************************/
      BYTE Keyboard_Out; /*定義鍵值變量*/
      bit Keyboard_Flag; /*定義按鍵標志*/
      /************************************************************************************/
      sbit Hd7279_Key=P3^2; /*定義HD7279中斷硬件連接*/
      sbit Hd7279_Clk=P2^1; /*定義HD7279時鐘硬件連接*/
      sbit Hd7279_Data=P2^0; /*定義HD7279數據硬件連接*/
      /************************************************************************************/
      void main(void) /*主函數*/
      {
      Mcu_Init(); /*MCU初始化*/
      while(1)
      {
      if(Keyboard_Flag)
      {
      Clear_Bit(Keyboard_Flag);
      if(Keyboard_Out==0) /*0號鍵處理*/
      {
      Led_On(0x00);
      Led_On(0x01);
      Led_On(0x02);
      Led_On(0x03);
      }
      else if(Keyboard_Out==1) /*1號鍵處理*/
      { /*顯示0、1、2、3*/
      Write_Hd7279(0xc9,0x03);
      Write_Hd7279(0xca,0x02);
      Write_Hd7279(0xcb,0x01);
      Write_Hd7279(0xcc,0x00); Led_Off(0x02);
      }
      else if(Keyboard_Out==2) /*2號鍵處理*/
      { /*顯示c、d、e、f*/
      Write_Hd7279(0xc9,0x0f);
      Write_Hd7279(0xca,0x0e);
      Write_Hd7279(0xcb,0x0d);
      Write_Hd7279(0xcc,0x0c); Led_Off(0x02);
      }
      else if(Keyboard_Out==3) /*3號鍵處理*/
      { /*顯示4、5、6、7*/
      Write_Hd7279(0xc9,0x07);
      Write_Hd7279(0xca,0x06);
      Write_Hd7279(0xcb,0x05);
      Write_Hd7279(0xcc,0x04); Led_Off(0x02);
      }
      else /*4號鍵處理*/
      { /*顯示8、9、a、b*/
      Write_Hd7279(0xc9,0x0b);
      Write_Hd7279(0xca,0x0a);
      Write_Hd7279(0xcb,0x09);
      Write_Hd7279(0xcc,0x08); Led_Off(0x02);
      }
      Delay_200_mS();
      }
      }
      }
      /***********************************************************************************/
      void Delay_200_mS(void) /*500ms延時函數*/
      {
      BYTE i,j;
      i=200;
      while (i--)
      {
      j=228;
      while(j--);
      }
      }
      /************************************************************************************/
      void Mcu_Init(void) /*MCU初始化函數*/
      {
      Set_Bit(EX0); /*外部中斷0使能*/
      Set_Bit(IT0); /*外部中斷0下降沿觸發*/
      Set_Bit(EA); /*中斷使能*/
      Send_Byte(0xa4); /*HD7279復位*/
      Write_Hd7279(0x98,0x1f); /*HD7279啟動消隱功能,能提高燈的亮度*/
      Write_Hd7279(0xc9,0x03); /*上電顯示6、5、4、3*/
      Write_Hd7279(0xca,0x04);
      Write_Hd7279(0xcb,0x05);
      Write_Hd7279(0xcc,0x06);
      }
      /************************************************************************************/
      void int1_Hd7279key(void) interrupt 0 /*外部中斷0函數*/
      {
      Keyboard_Out=Read_Hd7279(0x15); /*讀取鍵值*/
      if(Keyboard_Out<=0x04)
      {
      Set_Bit(Keyboard_Flag); /*設置鍵標志*/
      }
      }
      /************************************************************************************/
      void Short_Delay(void) /*短延時函數*/
      {
      BYTE i;
      for(i=0;i<0x08;i++);
      }
      /************************************************************************************/
      void Long_Delay(void) /*長延時函數*/
      {
      BYTE i;
      for(i=0;i<0x30;i++);
      }
      /************************************************************************************/
      void Led_On(BYTE Led_Num) /*點亮LED燈函數*/
      {
      Write_Hd7279(0xe0,Led_Num);
      }
      /************************************************************************************/
      void Led_Off(BYTE Led_Num) /*熄滅LED燈函數*/
      {
      Write_Hd7279(0xc0,Led_Num);
      }
      /************************************************************************************/
      void Write_Hd7279(BYTE Command,BYTE Data) /*HD7279寫函數*/
      {
      Send_Byte(Command);
      Send_Byte(Data);
      }
      /************************************************************************************/
      BYTE Read_Hd7279(BYTE Command) /*HD7279讀函數*/
      {
      Send_Byte(Command);
      return(Receive_Byte());
      }
      /************************************************************************************/
      void Send_Byte(BYTE Data_Out) /*HD7279發送字節函數*/
      {
      BYTE i;
      Long_Delay();
      for(i=0;i<8;i++)
      {
      if(Data_Out&0x80) Set_Bit(Hd7279_Data);
      else Clear_Bit(Hd7279_Data);
      Set_Bit(Hd7279_Clk);
      Short_Delay();
      Clear_Bit(Hd7279_Clk);
      Short_Delay();
      Data_Out=Data_Out<<1;
      }
      Clear_Bit(Hd7279_Data);
      }
      /************************************************************************************/
      BYTE Receive_Byte(void) /*HD7279接收字節函數*/
      {
      BYTE i,Data_In;
      Set_Bit(Hd7279_Data);
      Long_Delay();
      for(i=0;i<8;i++)
      {
      Set_Bit(Hd7279_Clk);
      Short_Delay();
      Data_In=Data_In<<1;
      if(Hd7279_Data) Data_In=Data_In|0x01;
      Clear_Bit(Hd7279_Clk);
      Short_Delay();
      }
      Clear_Bit(Hd7279_Data);
      return(Data_In);
      }
      /************************************************************************************/
      /*END*/

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩αv在线观看 | 亚洲欧美人成在线 | 一道本国产精品久久 | 一本一本久久A久久精品综合 | 日韩精品视频网站 | 一级国产精品免费观看 |