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

📄 7279按键显示.lst

📁 这是一个ha7279键盘显示的C语言源程序
💻 LST
字号:
C51 COMPILER V7.06   7279__键_允_                                                          06/04/2005 15:57:07 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 7279__键_允_
OBJECT MODULE PLACED IN 7279按键显示.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe 7279按键显示.c DB OE

stmt level    source

   1          #include "c8051f020.h"                
   2          #include <intrins.h>
   3          
   4          sbit    HD7279_DAT=P1^7;
   5          sbit    HD7279_CLK=P1^6;
   6          
   7          #define NOSELECT7279    P5 |= 0x80              //SPICS4(P57)=1
   8          #define SELECT7279      P5 &= ~(0x80)   //SPICS4(P57)=0;
   9          #define Set7279DAT      HD7279_DAT=1
  10          #define Clr7279DAT      HD7279_DAT=0
  11          #define Set7279CLK      HD7279_CLK=1
  12          #define Clr7279CLK      HD7279_CLK=0
  13           
  14          void SYSCLK_Init (void);             //初始化时钟
  15          void Delay1us(unsigned char T);
  16          void Delay1ms(unsigned char T);
  17          void Delay1s(unsigned char T);
  18          void Timer0_Init (void);             //初始化定时器
  19          void PORT_Init (void);               //初始化IO口
  20          void SPI0_Init (void);               //初始化SPI0
  21          void Send7279Byte(unsigned char ch);
  22          void Test7279(bit LoopFlag);
  23           
  24          void main (void) 
  25          {
  26   1              WDTCN = 0xde;
  27   1              WDTCN = 0xad;           //关看门狗
  28   1              SYSCLK_Init ();         //初始化时钟
  29   1              Timer0_Init();                  //初始化定时器
  30   1              PORT_Init ();           //初始化IO口
  31   1      //      SPI0_Init ();           //初始化SPI0
  32   1              CPT1CN |= 0x80;                 //使能比较器1
  33   1          REF0CN = 0x03;              //使能片内参考电压
  34   1              EA=1;                                   //开中断
  35   1              Test7279(1);
  36   1      }
  37          
  38          
  39          void SYSCLK_Init (void)  
  40          {
  41   1         int i;                              // delay counter
  42   1         OSCXCN = 0x65;                      // start external oscillator with
  43   1                                             // 18.432MHz crystal
  44   1         for (i=0; i < 256; i++) ;           // Wait for osc. to start up
  45   1         //while (!(OSCXCN & 0x80)) ;        // Wait for crystal osc. to settle
  46   1         OSCICN = 0x88;                      // select external oscillator as SYSCLK
  47   1                                             // source and enable missing clock
  48   1                                             // detector
  49   1              OSCICN = 0x07;   //interal 16MHZ
  50   1      }
  51          
  52                                     
  53          void PORT_Init (void)                  // 初始化IO口
  54          {   
  55   1         XBR0    = 0x07;                     // Enable SMBus, SPI0, and UART0
C51 COMPILER V7.06   7279__键_允_                                                          06/04/2005 15:57:07 PAGE 2   

  56   1         XBR1    = 0x00;
  57   1         XBR2    = 0x44;                     // Enable crossbar and weak pull-ups
  58   1         //EMI0TC  = 0x21;
  59   1         //P74OUT  = 0xFF;                                      
  60   1         //P0MDOUT = 0x15;
  61   1         //P1MDOUT |= 0x3C;                                   //P1.2-P1.5推挽输出
  62   1         //P1 &= 0xc3;                                                //P1.2-P1.5=0
  63   1      }
  64          
  65          void SPI0_Init (void)                  //初始化SPI0
  66          {
  67   1         SPI0CFG = 0x07;                     // data sampled on 1st SCK rising edge
  68   1                                             // 8-bit data words
  69   1         SPI0CFG|=0xC0;                          //CKPOL =1;
  70   1      
  71   1         SPI0CN = 0x03;                      // Master mode; SPI enabled; flags
  72   1                                             // cleared
  73   1         SPI0CKR = SYSCLK/2/8000000-1;       // SPI clock <= 8MHz (limited by 
  74   1                                             // EEPROM spec.)
  75   1      }
  76          
  77          unsigned char Count1ms;
  78          void Timer0_Init (void)                //定时器0初始化,定时1ms
  79          {
  80   1              CKCON|=0x8;
  81   1              TMOD|=0x1;                         //定时器0方式1,16Bit
  82   1              Count1ms=10;
  83   1              TR0 = 0;                           // STOP Timer0
  84   1              TH0 = (-SYSCLK/1000) >> 8;         // set Timer0 to overflow in 1ms
  85   1              TL0 = -SYSCLK/1000;
  86   1              TR0 = 1;                               // START Timer0
  87   1              IE|= 0x2; 
  88   1      }
  89          
  90          void Timer0_ISR (void) interrupt 1     // 定时器0中断服务程序
  91          {
  92   1              TH0 = (-SYSCLK/1000) >> 8;  
  93   1              TL0 = -SYSCLK/1000;
  94   1              if (Count1ms) Count1ms--;
  95   1      }
  96          
  97          void Send7279Byte(unsigned char ch)
  98          {       
  99   1              char i;
 100   1              SELECT7279;             //置CS低电平 
 101   1              Delay1us(50);           //延时50μ
 102   1              
 103   1              for (i=0;i<8;i++)
 104   1              {       
 105   2                      if (ch&0x80)    //输出7位到HD7279A的DATA端 
 106   2                      {
 107   3                              Set7279DAT;
 108   3                      }
 109   2                      else
 110   2                      {
 111   3                              Clr7279DAT;
 112   3                      }
 113   2                      Set7279CLK;             //置CLK高电平 
 114   2                      ch=ch<<1;               //待发数据左移 
 115   2                      Delay1us(8);    //延时8μ
 116   2                      Clr7279CLK;             //置CLK低电平 
 117   2                      Delay1us(8);    //延时50μ
C51 COMPILER V7.06   7279__键_允_                                                          06/04/2005 15:57:07 PAGE 3   

 118   2              }
 119   1              Clr7279DAT;                     //发送完毕,DATA端置低,返回 
 120   1      }
 121          unsigned char Receive7279Byte(void)
 122          {
 123   1              unsigned char i,ch;
 124   1              ch=0;           
 125   1              Set7279DAT;                     //DATA端置为高电平,输入状态
 126   1              Delay1us(50);           //延时50μ
 127   1              for (i=0;i<8;i++)
 128   1              {
 129   2                      Set7279CLK;             //置CLK高电平
 130   2                      Delay1us(8);    //延时8μ
 131   2                      ch=ch<<1;               //接收数据左移1位
 132   2                      if (HD7279_DAT)
 133   2                              ch+=1;          //接收1位数据
 134   2                      Clr7279CLK;             //置CLK低电平
 135   2                      Delay1us(8);    //延时8μ
 136   2              }                   
 137   1              Clr7279DAT;                     //接收完毕,DATA端重新置成低电平(输出状态)
 138   1              return ch;
 139   1      }
 140          
 141          char GetKeyValue(void)
 142          {
 143   1              char KeyValue;
 144   1              if (CPT1CN&0x40) return -1;     //无键按下 
 145   1              Send7279Byte(0x15);             //发读键盘指令 
 146   1              KeyValue=Receive7279Byte();
 147   1              NOSELECT7279;                   //置CS高电平 
 148   1              return KeyValue; 
 149   1      }
 150          
 151          void WaitKeyOff(void)
 152          {
 153   1              while  (!(CPT1CN&0x40));
 154   1      }
 155          
 156          void Test7279(bit LoopFlag)                                 
 157          {
 158   1              char KeyValue;         
 159   1              Delay1ms(25);           //等待25ms复位时间 
 160   1              Send7279Byte(0xA4);     //发复位指令 
 161   1              NOSELECT7279;           //置CS高电平 
 162   1              if (LoopFlag==0) return;
 163   1              
 164   1              for (;;)
 165   1              {       
 166   2                      KeyValue=GetKeyValue();
 167   2               if(KeyValue!=-1)
 168   2                {
 169   3                          Send7279Byte(0xC8); //发送键码值,按方式1译码下载显示 
 170   3                          Send7279Byte(KeyValue%16);
 171   3                          NOSELECT7279;       //置CS高电平 
 172   3                          WaitKeyOff();
 173   3                 }
 174   2              }
 175   1      }
 176          
 177          
 178            void Delay1us(unsigned char us)
 179          {
C51 COMPILER V7.06   7279__键_允_                                                          06/04/2005 15:57:07 PAGE 4   

 180   1              while (us)
 181   1              {
 182   2                _nop_(); 
 183   2                _nop_(); 
 184   2                _nop_(); 
 185   2                _nop_(); 
 186   2                _nop_();
 187   2                --us;
 188   2              }
 189   1      }
 190          
 191          void Delay1ms(unsigned char T)
 192          {
 193   1              Count1ms=T;
 194   1              while (Count1ms);
 195   1      }
 196          
 197          void Delay1s(unsigned char T)
 198          {
 199   1              while (T)
 200   1              {
 201   2                      Delay1ms(200);
 202   2                      Delay1ms(200);
 203   2                      Delay1ms(200);
 204   2                      Delay1ms(200);
 205   2                      Delay1ms(200);
 206   2                      T--;
 207   2              }
 208   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    348    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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