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

📄 key.lst

📁 数码管和键盘电路在单片机上的应用,C语言源码,Keil uVision3工程文件,附原理图及说明学习文档 数码管和键盘电路都可以直接利用单片机的管脚进行控制
💻 LST
字号:
C51 COMPILER V8.08   KEY                                                                   12/26/2008 22:22:47 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN KEY.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE KEY.C BROWSE DEBUG OBJECTEXTEND

line level    source

*** WARNING C500 IN LINE 1 OF KEY.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))

   1          #include <reg52.h>
   2          #include <ctype.h>
   3          #include <string.h>
   4          #include <stdlib.h>
   5          #include <stdio.h>
   6          #include <math.h>
   7          #include <absacc.h>
   8          
   9          #define uchar unsigned char
  10          #define uint unsigned int
  11          #define ulong unsigned long
  12          
  13          sbit sm1623_dout=P1^0;
  14          sbit sm1623_din=P1^1;
  15          sbit sm1623_clk=P1^2;
  16          sbit sm1623_stb=P1^3;
  17          sbit sound=P1^5;
  18          
  19          #define cs_led XBYTE[0xC000]
  20          
  21          void delay(uchar delay_temp);//长延时
  22          void delaym(uchar delaym_temp);//短延时
  23          void disp(uchar dis);
  24          void display();
  25          uchar key(void);
  26          uchar key_deal(void);
  27          
  28          uchar i,j,k;
  29          uchar temp_1;
  30          uchar code_dis[6];
  31          
  32          main(void)
  33          {
  34   1      start:  //---------------------------------------数码管显示测试1
  35   1              for(i=0;i<6;i++)code_dis[i]=1;
  36   1              display();//显示111111
  37   1              for(j=0;j<5;j++)
  38   1              {
  39   2                      for(i=0;i<6;i++)code_dis[i]=i+j;        
  40   2                      display();
  41   2                      delay(0xff);
  42   2              }
  43   1              
  44   1              //---------------------------------------按键测试2
  45   1              for(i=0;i<6;i++)code_dis[i]=2;
  46   1              display();//显示222222
  47   1              
  48   1              temp_1=0;
  49   1              while(temp_1!=0x08)
  50   1              {
  51   2                      temp_1=key_deal();
  52   2                      switch(temp_1)
  53   2                      {
  54   3                              case 0:
C51 COMPILER V8.08   KEY                                                                   12/26/2008 22:22:47 PAGE 2   

  55   3                                      sound=1;
  56   3                                      cs_led=0xff;
  57   3                                      break;
  58   3                              case 1:
  59   3                                      sound=0;
  60   3                                      cs_led=0xfe;
  61   3                                      break;
  62   3                              case 2:
  63   3                                      sound=0;
  64   3                                      cs_led=0xfd;
  65   3                                      break;
  66   3                              case 3:
  67   3                                      sound=0;
  68   3                                      cs_led=0xfb;
  69   3                                      break;
  70   3                              case 4:
  71   3                                      sound=0;
  72   3                                      cs_led=0xf7;
  73   3                                      break;
  74   3                              case 5:
  75   3                                      sound=0;
  76   3                                      cs_led=0xef;
  77   3                                      break;
  78   3                              case 6:
  79   3                                      sound=0;
  80   3                                      cs_led=0xdf;
  81   3                                      break;
  82   3                              case 7:
  83   3                                      sound=0;
  84   3                                      cs_led=0xbf;
  85   3                                      break;
  86   3                              case 8:
  87   3                                      sound=0;
  88   3                                      cs_led=0x7f;
  89   3                                      delay(0x7f);
  90   3                                      break;
  91   3                              default:
  92   3                                      sound=1;
  93   3                                      cs_led=0xff;
  94   3                                      break;
  95   3                      }
  96   2              }
  97   1              sound=1;
  98   1              cs_led=0x00;
  99   1              goto start;
 100   1      }
 101          
 102          void delay(uchar delay_temp)//延时子程序
 103          {
 104   1              uchar i,j;
 105   1              for(i=0;i<delay_temp;i++)
 106   1              {
 107   2                      for(j=0;j<255;j++);
 108   2              }
 109   1      }
 110          
 111          void delaym(uchar delaym_temp)//延时子程序
 112          {
 113   1              uchar i;
 114   1              for(i=0;i<delaym_temp;i++);
 115   1      }
 116          
C51 COMPILER V8.08   KEY                                                                   12/26/2008 22:22:47 PAGE 3   

 117          void disp(uchar dis)//送显示命令子程序
 118          {
 119   1              uchar dis_i,dis_temp;
 120   1              dis_temp=0x01;
 121   1              for(dis_i=0;dis_i<8;dis_i++)
 122   1              {
 123   2                      sm1623_clk=0;
 124   2                      delaym(1);
 125   2                      if((dis&dis_temp)==0){sm1623_din=0;}
 126   2                      else{sm1623_din=1;}
 127   2                      sm1623_clk=1;//上升沿输入数据
 128   2                      delaym(1);
 129   2                      dis_temp=dis_temp<<1;
 130   2              }
 131   1      }
 132          
 133          void display()//显示子程序
 134          {
 135   1              uchar code_dis_d[6];
 136   1              uchar i;
 137   1              for(i=0;i<6;i++)//计算显示码
 138   1              {
 139   2                      switch(code_dis[i])
 140   2                      {
 141   3                              case 1:
 142   3                                      code_dis_d[i]=0x06;
 143   3                                      break;
 144   3                              case 2:
 145   3                                      code_dis_d[i]=0x5b;
 146   3                                      break;
 147   3                              case 3:
 148   3                                      code_dis_d[i]=0x4f;
 149   3                                      break;
 150   3                              case 4:
 151   3                                      code_dis_d[i]=0x66;
 152   3                                      break;
 153   3                              case 5:
 154   3                                      code_dis_d[i]=0x6d;
 155   3                                      break;
 156   3                              case 6:
 157   3                                      code_dis_d[i]=0x7d;
 158   3                                      break;
 159   3                              case 7:
 160   3                                      code_dis_d[i]=0x07;
 161   3                                      break;
 162   3                              case 8:
 163   3                                      code_dis_d[i]=0x7f;
 164   3                                      break;
 165   3                              case 9:
 166   3                                      code_dis_d[i]=0x6f;
 167   3                                      break;
 168   3                              case 10://显示黑
 169   3                                      code_dis_d[i]=0x00;
 170   3                                      break;
 171   3                              case 11://显示A
 172   3                                      code_dis_d[i]=0x77;
 173   3                                      break;
 174   3                              case 12://显示d
 175   3                                      code_dis_d[i]=0x5e;
 176   3                                      break;
 177   3                              case 13://显示-
 178   3                                      code_dis_d[i]=0x40;
C51 COMPILER V8.08   KEY                                                                   12/26/2008 22:22:47 PAGE 4   

 179   3                                      break;
 180   3                              case 14://显示8.
 181   3                                      code_dis_d[i]=0xff;
 182   3                                      break;
 183   3                              default://显示0
 184   3                                      code_dis_d[i]=0x3f;
 185   3                                      break;
 186   3                      }
 187   2              }
 188   1              sm1623_stb=0;
 189   1              disp(0x02);//显示模式6位12段
 190   1              sm1623_stb=1;
 191   1              delaym(1);
 192   1              sm1623_stb=0;
 193   1              disp(0x40);//设置数据
 194   1              sm1623_stb=1;
 195   1              delaym(1);
 196   1              sm1623_stb=0;
 197   1              disp(0xc0);//设置地址
 198   1              disp(code_dis_d[0]);//1
 199   1              disp(0x00);
 200   1              disp(code_dis_d[1]);//2
 201   1              disp(0x00);
 202   1              disp(code_dis_d[2]);//3
 203   1              disp(0x00);
 204   1              disp(code_dis_d[3]);//4
 205   1              disp(0x00);
 206   1              disp(code_dis_d[4]);//5
 207   1              disp(0x00);
 208   1              disp(code_dis_d[5]);//6
 209   1              disp(0x00);
 210   1              sm1623_stb=1;
 211   1              delaym(1);
 212   1              sm1623_stb=0;
 213   1              disp(0x8a);//控制显示
 214   1              sm1623_stb=1;
 215   1      }
 216          
 217          uchar key(void)//按键读数据子程序
 218          {
 219   1              uchar key_i,key_temp,key_re;
 220   1              key_temp=0x00;
 221   1              for(key_i=0;key_i<8;key_i++)
 222   1              {
 223   2                      sm1623_clk=0;//下降沿输出数据
 224   2                      delaym(1);
 225   2                      if(sm1623_dout==0){key_temp=key_temp&0x7f;}
 226   2                      else{key_temp=key_temp|0x80;}
 227   2                      key_re=key_temp;
 228   2                      sm1623_clk=1;
 229   2                      delaym(1);
 230   2                      key_temp=key_temp>>1;
 231   2              }
 232   1              return key_re;
 233   1      }
 234          
 235          uchar key_deal(void)//按键处理子程序,返回按键编号
 236          {
 237   1              uchar temp_k1,temp_k2;
 238   1              sm1623_stb=0;
 239   1              disp(0x42);//读键扫数据指令
 240   1              temp_k1=key()&0x1b;
C51 COMPILER V8.08   KEY                                                                   12/26/2008 22:22:47 PAGE 5   

 241   1              temp_k2=key()&0x1b;
 242   1              sm1623_stb=1;//取消片选,如果没有此语句按键5时,会出现按键1被按下的现象
 243   1              if(temp_k1!=0x00)
 244   1              {
 245   2                      switch(temp_k1)
 246   2                      {
 247   3                              case 0x01:
 248   3                                      return 0x01;
 249   3                                      break;
 250   3                              case 0x02:
 251   3                                      return 0x02;
 252   3                                      break;
 253   3                              case 0x08:
 254   3                                      return 0x03;
 255   3                                      break;
 256   3                              case 0x10:
 257   3                                      return 0x04;
 258   3                                      break;
 259   3                              default:
 260   3                                      return 0x00;
 261   3                                      break;
 262   3                      }
 263   2              }
 264   1              if(temp_k2!=0x00)
 265   1              {
 266   2                      switch(temp_k2)
 267   2                      {
 268   3                              case 0x01:
 269   3                                      return 0x05;
 270   3                                      break;
 271   3                              case 0x02:
 272   3                                      return 0x06;
 273   3                                      break;
 274   3                              case 0x08:
 275   3                                      return 0x07;
 276   3                                      break;
 277   3                              case 0x10:
 278   3                                      return 0x08;
 279   3                                      break;
 280   3                              default:
 281   3                                      return 0x00;
 282   3                                      break;
 283   3                      }
 284   2              }
 285   1              return 0x00;
 286   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    725    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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