⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch451.lst

📁 ch451键盘LED管理芯片的驱动程序,很好用的,设计很标准的代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V4.01,  CH451                                                                 20/08/04  10:59:13  PAGE 1   


DOS C51 COMPILER V4.01, COMPILATION OF MODULE CH451
OBJECT MODULE PLACED IN D:\YANTEST\NEWREAD\CH451S\CH451.OBJ
COMPILER INVOKED BY: D:\WAVE6000\COMP51\C51.EXE D:\YANTEST\NEWREAD\CH451S\CH451.C DB SB OE

stmt level    source

   1          #include "ch451.h"
   2          #include "cd4094.h"
   3          #include "hardware.h"
   4          /*
   5          *****************************************************
   6          **硬件说明:
   7          **1.显示 []    []    :   []   []
   8          **       DIG0 DIG1 DIG2 DIG3 DIG4
   9          **2. :DIG2-SEG0,SEG1
  10          **3. 键盘dig5,dig6,dig7------seg0~seg7
  11          **4. ch451_cs接CD4094输出口线
  12          *****************************************************
  13          */
  14          
  15          /////////////////////////////////////////////////////////////////////////
  16          //
  17          void WriteCh451(unsigned int iCmd);
  18          unsigned char ReadCh451();
  19          
  20          
  21          void          InitCh451();
  22          unsigned char IsKbhit();
  23          unsigned char GetKeyValue(unsigned char *ch);
  24          unsigned char WaitForKeyDown(unsigned char *ch,unsigned long timeout);
  25          void          WaitForKeyUp();
  26          void          DispClock(unsigned char hour,unsigned char minute,bit flag);
  27          
  28          
  29          void WriteCh451(unsigned int iCmd)
  30          {
  31   1              unsigned int xdata i;
  32   1      
  33   1              WatchDog();
  34   1      
  35   1              SelectChip(SEL_CH451);
  36   1      
  37   1              NOP;NOP;NOP;
  38   1              for(i=0;i<12;i++)
  39   1      	{               
  40   2      
  41   2                      if(iCmd&0x01) SPI_SI=1;
  42   2                      else          SPI_SI=0;
  43   2      
  44   2      
  45   2                      SPI_SCK=0;
  46   2                      NOP;NOP;NOP;
  47   2      		SPI_SCK=1;
  48   2                      NOP;NOP;NOP;
  49   2      
  50   2                      iCmd=iCmd>>1;
  51   2      
  52   2      	}
  53   1              NOP;NOP;NOP;
  54   1      
  55   1              SelectChip(SEL_NULL);
  56   1      
  57   1      }
  58          
  59          
C51 COMPILER V4.01,  CH451                                                                 20/08/04  10:59:13  PAGE 2   

  60          unsigned char ReadCh451()
  61          {
  62   1      
  63   1              unsigned int xdata i=0;
  64   1              unsigned char xdata ch=0;
  65   1              unsigned char xdata iCmd=0x07;
  66   1              bit kk;
  67   1      
  68   1              WatchDog();
  69   1      
  70   1              //1.写4位标识
  71   1              SelectChip(SEL_CH451);
  72   1              //NOP;NOP;NOP;
  73   1              for(i=0;i<4;i++)
  74   1      	{
  75   2              
  76   2                      SPI_SCK=0;
  77   2                      NOP;NOP;NOP;
  78   2      
  79   2                      if(iCmd&0x01) SPI_SI=1;
  80   2                      else          SPI_SI=0;
  81   2      
  82   2      		SPI_SCK=1;
  83   2                      NOP;NOP;NOP;
  84   2                      iCmd=iCmd>>1;
  85   2      
  86   2      	}
  87   1      
  88   1              SelectChip(SEL_NULL);
  89   1      
  90   1              //2.read data
  91   1              for(i=0;i<7;i++)
  92   1              {
  93   2              
  94   2                              NOP;NOP;NOP;
  95   2                              kk=CH451_SO;
  96   2                              ch=ch<<1;
  97   2                              if(kk)ch=ch+1;
  98   2      
  99   2                              NOP;NOP;NOP;
 100   2      		        SPI_SCK=0;
 101   2      		        NOP;NOP;NOP;
 102   2                    		SPI_SCK=1;
 103   2      
 104   2      
 105   2              }
 106   1      
 107   1              return ch;
 108   1      }
 109          
 110          /////////////////////////////////////////////////////////////////////////
 111          //CH451函数库
 112          //初始化
 113          void InitCh451()
 114          {
 115   1              WatchDog();
 116   1      
 117   1              SPI_SI=0;
 118   1              SPI_SCK=1;
 119   1              SelectChip(SEL_CH451);
 120   1              CH451_SO=1;
 121   1              WriteCh451(CH451CMD_RESET );
 122   1              WriteCh451(CH451CMD_SET_SYSPARA+0x02);
 123   1              WriteCh451(CH451CMD_SET_DISPPARA+0x80);
 124   1      }
 125          
C51 COMPILER V4.01,  CH451                                                                 20/08/04  10:59:13  PAGE 3   

 126          
 127          /*
 128          **************************************
 129          **fun:scan key
 130          **in:
 131          **out:ch
 132          **ret:0-表示有键按下
 133          **    1-无键按下
 134          **************************************
 135          */
 136          
 137          unsigned char IsKbhit()
 138          {
 139   1           if(CH451_SO==0)return ID_OK;
 140   1           else         return ID_ERR;
 141   1      }
 142          /*
 143                 #define KEY_NUM_0		0x00
 144                 #define KEY_NUM_1		0x01
 145                 #define KEY_NUM_2		0x02
 146                 #define KEY_NUM_3		0x03
 147                 #define KEY_NUM_4		0x04
 148                 #define KEY_NUM_5		0x05
 149                 #define KEY_NUM_6		0x06
 150                 #define KEY_NUM_7		0x07
 151                 #define KEY_NUM_8		0x08
 152                 #define KEY_NUM_9		0x09
 153                 #define KEY_DOT                  0x0a
 154                 #define KEY_ESC                  0x0b
 155                 #define KEY_ENTER	        0x0c
 156                 #define KEY_UP			0x0d
 157                 #define KEY_DOWN                 0x0e
 158                 #define KEY_RESERVE	        0x0f
 159          */
 160          /*
 161          **************************************
 162          **fun:获取键值
 163          **in:
 164          **out:ch
 165          **ret:0-表示新键按下
 166          **    1-表示旧键按下
 167          **************************************
 168          1,2,3,4,5,6,7, 8,     9,  10,  11
 169          seg0   _     seg7   dig5,dig6,dig7
 170          0--------------7    dig5
 171          8-------------15    dig6
 172          8,9       10    11    12   13  14     15
 173                    dot,  esc  enter up  down
 174          */
 175          unsigned char GetKeyValue(unsigned char *ch)
 176          {
 177   1      
 178   1              unsigned char xdata key=0;
 179   1      
 180   1              WatchDog();
 181   1      
 182   1              key=ReadCh451();
 183   1              if(key&0x40)                      //有键按下?
 184   1              {
 185   2                     switch(key)
 186   2                     {
 187   3                            case 0x45:
 188   3                            *ch=KEY_NUM_0;break;
 189   3                            case 0x4d:
 190   3                            *ch=KEY_NUM_1;break;
 191   3                            case 0x55:
C51 COMPILER V4.01,  CH451                                                                 20/08/04  10:59:13  PAGE 4   

 192   3                            *ch=KEY_NUM_2;break;
 193   3                            case 0x5d:
 194   3                            *ch=KEY_NUM_3;break;
 195   3                            case 0x65:
 196   3                            *ch=KEY_NUM_4;break;
 197   3                            case 0x6d:
 198   3                            *ch=KEY_NUM_5;break;
 199   3                            case 0x75:
 200   3                            *ch=KEY_NUM_6;break;
 201   3                            case 0x7d:
 202   3                            *ch=KEY_NUM_7;break;
 203   3      
 204   3                            case 0x46:
 205   3                            *ch=KEY_NUM_8;break;
 206   3                            case 0x4e:
 207   3                            *ch=KEY_NUM_9;break;
 208   3                            case 0x56:
 209   3                            *ch=KEY_DOT;break;
 210   3                            case 0x5e:
 211   3                            *ch=KEY_ESC;break;
 212   3                            case 0x66:
 213   3                            *ch=KEY_ENTER;break;
 214   3                            case 0x6e:
 215   3                            *ch=KEY_UP;break;
 216   3                            case 0x76:
 217   3                            *ch=KEY_DOWN;break;
 218   3                            case 0x7e:
 219   3                            *ch=KEY_RESERVE;break;
 220   3      
 221   3                            default:
 222   3                            *ch=KEY_RESERVE;break;
 223   3                     }
 224   2                     return ID_OK;
 225   2      
 226   2              }
 227   1      
 228   1              return ID_ERR;
 229   1      
 230   1      }
 231          
 232          /*
 233          **************************************
 234          **fun:wait for a key
 235          **in:timeout超时 ,循环计数,0---死等,其他超时
 236          **out:ch
 237          **ret:0-表示有键按下
 238          **    1-无键按下,超时
 239          **************************************
 240          */
 241          unsigned char WaitForKeyDown(unsigned char *ch,unsigned long timeout)
 242          {
 243   1              unsigned char xdata key=0;
 244   1      
 245   1              WatchDog();
 246   1      
 247   1              if(timeout==0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -