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

📄 demo.lst

📁 测试stc89C58单片机 测试stc89C58单片机 测试stc89C58单片机DEMO 程序
💻 LST
字号:
C51 COMPILER V8.02   DEMO                                                                  08/05/2007 19:27:06 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DEMO
OBJECT MODULE PLACED IN demo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE demo.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*8279键盘和LED显示程序*/
   2          /*此程序响应8279的键盘中断,并根据按键来更新LED显示*/
   3          
   4          #include<reg51.h>
   5          #include<absacc.h>
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          
   9          sfr AUXR = 0x8e;
  10          #define COM XBYTE [0x0001]         //8279的命令状态口
  11          #define DAT XBYTE [0X0000]         //8279的数据口
  12          #define RAM XBYTE [0X8001]         //8279的RAM地址
  13          
  14          /*共阴的七段数码管译码0   1     2    3    4    5    6    7    8   9     a   b    c    d    e   f*/
  15          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  16                              0x39,0x5e,0x79,0x71};
  17          
  18          ///////////////////////////////////////////////////////////////////////////////
  19          //按键响应函数
  20          //key0~key7 显示0~7
  21          //skey0~skey7 显示8~f
  22          
  23          void key0(void)
  24          {
  25   1              //在LED0上显示数字0
  26   1              COM=0x80;       //参见8279手册   ,写显示RAM命令
  27   1              DAT=table[0];   //参见8279手册   ,把table[0]数据送给数据口DAT
  28   1      }
  29          
  30          void key1(void)
  31          {
  32   1              COM=0x81;
  33   1              DAT=table[1];
  34   1      }
  35          
  36          void key2(void)
  37          {
  38   1              COM=0x82;
  39   1              DAT=table[2];
  40   1      }
  41          
  42          void key3(void)
  43          {
  44   1              COM=0x83;
  45   1              DAT=table[3];
  46   1      }
  47          
  48          void key4(void)
  49          {
  50   1              COM=0x84;
  51   1              DAT=table[4];
  52   1      }
  53          
  54          void key5(void)
  55          {
C51 COMPILER V8.02   DEMO                                                                  08/05/2007 19:27:06 PAGE 2   

  56   1              COM=0x85;
  57   1              DAT=table[5];
  58   1      }
  59          
  60          void key6(void)
  61          {
  62   1              COM=0x86;
  63   1              DAT=table[6];
  64   1      }
  65          
  66          void key7(void)
  67          {
  68   1              COM=0x87;
  69   1              DAT=table[7];
  70   1      }
  71          
  72          void key8(void)
  73          {
  74   1              COM=0x80;
  75   1              DAT=table[8];
  76   1      }
  77          
  78          void key9(void)
  79          {
  80   1              COM=0x80;
  81   1              DAT=table[9];
  82   1      }
  83          
  84          void key10(void)
  85          {
  86   1              COM=0x80;
  87   1              DAT=table[10];
  88   1      }
  89          
  90          void key11(void)
  91          {
  92   1              COM=0x80;
  93   1              DAT=table[11];
  94   1      }
  95          
  96          void key12(void)
  97          {
  98   1              COM=0x80;
  99   1              DAT=table[12];
 100   1      }
 101          
 102          void key13(void)
 103          {
 104   1              COM=0x80;
 105   1              DAT=table[13];
 106   1      }
 107          
 108          void key14(void)
 109          {
 110   1              COM=0x80;
 111   1              DAT=table[14];
 112   1      }
 113          
 114          void key15(void)
 115          {
 116   1              COM=0x80;
 117   1              DAT=table[15];
C51 COMPILER V8.02   DEMO                                                                  08/05/2007 19:27:06 PAGE 3   

 118   1      }
 119          /*带shift功能按键*/
 120          void skey0(void)
 121          {
 122   1              COM=0x80;
 123   1              DAT=table[8];
 124   1      }
 125          
 126          void skey1(void)
 127          {
 128   1              COM=0x81;
 129   1              DAT=table[9];
 130   1      }
 131          
 132          void skey2(void)
 133          {
 134   1              COM=0x82;
 135   1              DAT=table[10];
 136   1      }
 137          
 138          void skey3(void)
 139          {
 140   1              COM=0x83;
 141   1              DAT=table[11];
 142   1      }
 143          
 144          void skey4(void)
 145          {
 146   1              COM=0x84;
 147   1              DAT=table[12];
 148   1      }
 149          
 150          void skey5(void)
 151          {
 152   1              COM=0x85;
 153   1              DAT=table[13];
 154   1      }
 155          
 156          void skey6(void)
 157          {
 158   1              COM=0x86;
 159   1              DAT=table[14];
 160   1      }
 161          
 162          void skey7(void)
 163          {
 164   1              COM=0x87;
 165   1              DAT=table[15];
 166   1      }
 167          
 168          void skey8(void)
 169          {
 170   1              COM=0x87;
 171   1              DAT=table[16];
 172   1      }
 173          
 174          void skey9(void)
 175          {
 176   1              COM=0x81;
 177   1              DAT=table[1];
 178   1      }
 179          
C51 COMPILER V8.02   DEMO                                                                  08/05/2007 19:27:06 PAGE 4   

 180          void skey10(void)
 181          {
 182   1              COM=0x81;
 183   1              DAT=table[11];
 184   1      }
 185          
 186          void skey11(void)
 187          {
 188   1              COM=0x81;
 189   1              DAT=table[12];
 190   1      }
 191          
 192          void skey12(void)
 193          {
 194   1              COM=0x81;
 195   1              DAT=table[13];
 196   1      }
 197          
 198          void skey13(void)
 199          {
 200   1              COM=0x81;
 201   1              DAT=table[14];
 202   1      }
 203          
 204          void skey14(void)
 205          {
 206   1              COM=0x81;
 207   1              DAT=table[15];
 208   1      }
 209          
 210          void skey15(void)
 211          {
 212   1              COM=0x81;
 213   1              DAT=table[0];
 214   1      }
 215          ///////////////////////////////////////////////////////////////////////////////
 216          
 217          //读取键盘数据,返回当前被按下的键号
 218          uchar keyin(void)
 219          {
 220   1              uchar i;
 221   1              COM=0x40; //读FIFO/传感器RAM的命令
 222   1              i=DAT;    //?? DAT原来存的是什么数据???
 223   1              i=i&0x7f; //取键盘数据低7位
 224   1              return(i);
 225   1      }
 226          
 227          sbit clflag=ACC^7;
 228          bit int_flag=0; /*中断标志位*/
 229          uchar key_value;/*中断返回键值*/
 230          
 231          void main(void)
 232          {
 233   1       
 234   1              uchar i,j,k;
 235   1              
 236   1              //////////////////////////////////////////////////////////////////////////////
 237   1              //初始化单片机
 238   1              AUXR = 0x02;/*STC单片机关内部RAM和开ALE*/
 239   1              for(i=0;i<5;i++)
 240   1              {
 241   2                      for(j=0;j<100;j++)
C51 COMPILER V8.02   DEMO                                                                  08/05/2007 19:27:06 PAGE 5   

 242   2                      {
 243   3                              for(k=0;k<100;k++);                       //延时40ms
 244   3                      }
 245   2              }
 246   1                                                                               
 247   1              //////////////////////////////////////////////////////////////////////////////
 248   1              //初始化8279
 249   1              COM=0xd1;//1101 0001b 清除所有显示
 250   1              do{ACC=COM;}
 251   1              while(clflag==1);   //清除起来比较慢,所以一条指令执行的时间不足以完成所有清除,故需等待
 252   1              COM=0x01;COM=0x02;  //??? COM=0x02???
 253   1              IE=0x81;TCON=0x01;  //CPU开中断,外部中断0 开中断;定时器控制 IT0=1 下降延触发方式
 254   1              //////////////////////////////////////////////////////////////////////////////
 255   1      
 256   1          //大循环
 257   1              while(1)
 258   1              {  
 259   2                      while(int_flag==0)  /*等待中断*/
 260   2                      {
 261   3                          //此处可填入后台程序
 262   3                      }
 263   2                      
 264   2                      int_flag=0;
 265   2      
 266   2              //根据键值调用键盘响应函数
 267   2                      switch(key_value)
 268   2                      {
 269   3                              case 0x40:key0();break;
 270   3                              case 0x41:key1();break;
 271   3                              case 0x42:key2();break;
 272   3                              case 0x43:key3();break;
 273   3                              case 0x48:key4();break;
 274   3                              case 0x49:key5();break;
 275   3                              case 0x4a:key6();break;
 276   3                              case 0x4b:key7();break;
 277   3                              case 0x50:key8();break;
 278   3                              case 0x51:key9();break;
 279   3                              case 0x52:key10();break;
 280   3                              case 0x53:key11();break;
 281   3                              case 0x58:key12();break;
 282   3                              case 0x59:key13();break;
 283   3                              case 0x5a:key14();break;
 284   3                              case 0x5b:key15();break;
 285   3           
 286   3                              case 0x00:skey0();break;
 287   3                              case 0x01:skey1();break;
 288   3                              case 0x02:skey2();break;
 289   3                              case 0x03:skey3();break;
 290   3                              case 0x08:skey4();break;
 291   3                              case 0x09:skey5();break;
 292   3                              case 0x0a:skey6();break;
 293   3                              case 0x0b:skey7();break;
 294   3                              case 0x10:skey8();break;
 295   3                              case 0x11:skey9();break;
 296   3                              case 0x12:skey10();break;
 297   3                              case 0x13:skey11();break;
 298   3                              case 0x18:skey12();break;
 299   3                              case 0x19:skey13();break;
 300   3                              case 0x1a:skey14();break;
 301   3                              case 0x1b:skey15();break;
 302   3                              default:break;
 303   3                      }
C51 COMPILER V8.02   DEMO                                                                  08/05/2007 19:27:06 PAGE 6   

 304   2              }
 305   1      }
 306          
 307          //INT0的中断服务函数
 308          //INT0由8279在键盘按下时发出
 309          //注意关键字interrupt
 310          /*返回值-函数名-interrupt 对应中断源的编号 当前工作寄存器由PSW中的两位设置,
 311                                                       也可以使用using指定,指定使用,第n组寄存器,n=0~3*/
 312            void int_int0() interrupt 0 using 0
 313          {
 314   1              //设置标志,告诉主循环中断发生了
 315   1              int_flag=1;
 316   1              //读取键值
 317   1              key_value=keyin();
 318   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    898    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   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 + -