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

📄 4.3.4.lst

📁 《单片机C语言编程与实例》的代码第4章.rar
💻 LST
字号:
C51 COMPILER V6.20c  4_3_4                                                                 09/02/2001 14:46:18 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE 4_3_4
OBJECT MODULE PLACED IN 4.3.4.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 4.3.4.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          /*函数定义*/
   3          void long_delay(void);						//长延时
   4          void short_delay(void);						//短延时
   5          void delay10ms(unsigned char);				//延时10ms
   6          void write7279(unsigned char, unsigned char);	//写入HD7279
   7          unsigned char read7279(unsigned char);			//读HD7279
   8          void send_byte(unsigned char); 				//发送一个字节
   9          unsigned char receive_byte(void); 				//接收一个字节
  10          /*变量及I/O口定义*/
  11          unsigned char digit[5];
  12          unsigned char key_number, j, k;
  13          unsigned int tmr;
  14          unsigned long wait_cnter;
  15          sbit cs=P1^4;							//cs连接P1.4
  16          sbit clk=P1^5; 							//clk连接P1.5
  17          sbit dat=P1^2; 							//dat连接P1.2
  18          sbit key=P1^3; 							//key连接P1.3
  19          
  20          /****** HD7279A指令定义 ******/
  21          #define CMD_RESET 0xa4					//复位指令
  22          #define CMD_TEST 0xbf					//测试指令
  23          #define DECODE0 0x80					//方式0译码指令
  24          #define DECODE1 0xc8					//方式1译码指令
  25          #define CMD_READ 0x15					//读键盘指令
  26          #define UNDECODE 0x90   				//不译码指令
  27          #define RTL_CYCLE 0xa3					//循环左移指令
  28          #define RTR_CYCLE 0xa2					//循环右移指令
  29          #define RTL_UNCYL 0xa1					//左移指令
  30          #define RTR_UNCYL 0xa0					//右移指令
  31          #define ACTCTL 0x98						//消隐控制指令
  32          #define SEGON 0xe0						//段点亮指令
  33          #define SEGOFF 0xc0						//段关闭指令
  34          #define BLINKCTL 0x88					//闪烁控制指令
  35          
  36          /*主程序*/
  37          main()
  38          {
  39   1      while (1)
  40   1      {
  41   2      for (tmr=0;tmr<0x2000;tmr++); 			//上电延时
  42   2      send_byte(CMD_RESET); 				//复位HD7279A
  43   2      /**********************************************
  44   2      闪烁指令指令及键盘接口测试程序,将用户
  45   2      **********************************************/
  46   2      send_byte(CMD_TEST); 					//测试指令
  47   2      for (j=0;j<3;j++) 						//延时约3
  48   2      {
  49   3      delay10ms(100);
  50   3      }
  51   2      send_byte(CMD_RESET); 					//清除显示
  52   2      /**********************************************
  53   2      测试指令演示程序
  54   2      将用户按键的键码显示出来,如果10秒内
  55   2      无按键或者按S0键进入下一步演示
C51 COMPILER V6.20c  4_3_4                                                                 09/02/2001 14:46:18 PAGE 2   

  56   2      **********************************************/
  57   2      wait_cnter=0;
  58   2      key_number=0xff;
  59   2      write7279(BLINKCTL,0xfc); 				//第1、2两位设为闪烁显示
  60   2      write7279(UNDECODE,0X08); 				//在第1位显示下划线'_'
  61   2      write7279(UNDECODE+1,0x08);				//在第2位显示下划线 '_'
  62   2      do
  63   2      {
  64   3      if (!key) 							//如果有键按下
  65   3      {
  66   4      key_number=read7279(CMD_READ);		//读出键码
  67   4      write7279(DECODE1+1,key_number/16);	//在第2位显示键码高8位
  68   4      write7279(DECODE1,key_number&0x0f);	//在第1位显示键码低8位
  69   4      while (!key); 						//等待按键按下
  70   4      wait_cnter=0;
  71   4      }
  72   3      wait_cnter++;
  73   3      } while (key_number!=0 && wait_cnter<0x30000);
  74   2      //如果按键为'0'和超时则进入下一步演示
  75   2      write7279(BLINKCTL,0xff); 				//清除闪烁设置
  76   2      /******************************************
  77   2      快速计数演示程序
  78   2      ******************************************/
  79   2      for (j=0;j<5;j++) 						//计数初始值为00000
  80   2      {
  81   3      digit[j]=0;
  82   3      write7279(DECODE0+j,digit[j]);
  83   3      }
  84   2      while (digit[4]<2) 				//如果计数到20000就停止
  85   2      {
  86   3      digit[0]++;
  87   3      if (digit[0]>9)
  88   3      {
  89   4      digit[0]=0;
  90   4      digit[1]++;
  91   4      if (digit[1]>9)
  92   4      {
  93   5      digit[1]=0;
  94   5      digit[2]++;
  95   5      if (digit[2]>9)
  96   5      {
  97   6      digit[2]=0;
  98   6      digit[3]++;
  99   6      if (digit[3]>9)
 100   6      {
 101   7      digit[3]=0;
 102   7      digit[4]++;
 103   7      if (digit[4]>9)
 104   7      {
 105   8      digit[4]=0;
 106   8      }
 107   7      }
 108   6      }
 109   5      }
 110   4      }
 111   3      write7279(DECODE0,digit[0]);
 112   3      if (digit[0]==0)
 113   3      {
 114   4      write7279(DECODE0+1,digit[1]);
 115   4      if (digit[1]==0)
 116   4      {
 117   5      write7279(DECODE0+2,digit[2]);
C51 COMPILER V6.20c  4_3_4                                                                 09/02/2001 14:46:18 PAGE 3   

 118   5      if (digit[2]==0)
 119   5      {
 120   6      write7279(DECODE0+3,digit[3]);
 121   6      if (digit[3]==0)
 122   6      {
 123   7      write7279(DECODE0+4,digit[4]);
 124   7      }
 125   6      }
 126   5      }
 127   4      }
 128   3      }
 129   2      delay10ms(150);
 130   2      send_byte(CMD_RESET); 					//清除显示
 131   2      /*************************************************
 132   2      下载数据但不译码指令测试程序
 133   2      *************************************************/
 134   2      write7279(UNDECODE+7,0x49);				//在第8位按不译码方式显示一字符'三'
 135   2      delay10ms(80);
 136   2      /*************************************************
 137   2      循环左右移测试'三'字向右移动23次,再向左移动23次
 138   2      *************************************************/
 139   2      for (j=0;j<23;j++)
 140   2      {
 141   3      send_byte(RTR_CYCLE);					//循环右移23次
 142   3      delay10ms(12);
 143   3      }
 144   2      for (j=0;j<23;j++)
 145   2      {
 146   3      send_byte(RTL_CYCLE);					//循环左移23次
 147   3      delay10ms(12);
 148   3      }
 149   2      
 150   2      /*********************************************
 151   2      译码方式0及左移指令测试程序
 152   2      *********************************************/
 153   2      for (j=0;j<16;j++)
 154   2      {
 155   3      send_byte(RTL_UNCYL);				//不循环左移指令
 156   3      write7279(DECODE0,j);		  			//译码方式0指令,显示在第1位
 157   3      delay10ms(50);
 158   3      }
 159   2      delay10ms(150);
 160   2      send_byte(CMD_RESET);
 161   2      
 162   2      /*********************************************
 163   2      译码方式1及右移指令测试程序
 164   2      *********************************************/
 165   2      for (j=0;j<16;j++)
 166   2      {
 167   3      send_byte(RTR_UNCYL); 				//不循环右移指令
 168   3      write7279(DECODE1+7,j);				//译码方式1指令,显示在第8位
 169   3      delay10ms(50);
 170   3      }
 171   2      delay10ms(150);
 172   2      
 173   2      /*********************************************
 174   2      消隐指令测试程序
 175   2      *********************************************/
 176   2      k=0xff;
 177   2      for (j=0;j<6;j++)
 178   2      {
 179   3      k=k/2;
C51 COMPILER V6.20c  4_3_4                                                                 09/02/2001 14:46:18 PAGE 4   

 180   3      write7279(ACTCTL,k);					//每隔1秒增加一个消隐位
 181   3      delay10ms(100);
 182   3      }
 183   2      write7279(ACTCTL,0xff); 					//恢复8位显示
 184   2      delay10ms(100);
 185   2      send_byte(CMD_RESET); 					//消除显示
 186   2      
 187   2      /**********************************************
 188   2      段点亮指令和段关闭指令程序
 189   2      **********************************************/
 190   2      for (j=0;j<64;j++)
 191   2      {
 192   3      write7279(SEGON,j); 					//将64个显示段逐个点亮
 193   3      write7279(SEGOFF,j-1); 					//同时将前一个显示段关闭
 194   3      delay10ms(20);
 195   3      }
 196   2      }
 197   1      }
 198          
 199          void write7279(unsigned char cmd, unsigned char dta)
 200          {
 201   1      send_byte (cmd);
 202   1      send_byte (dta);
 203   1      }
 204          
 205          unsigned char read7279(unsigned char command)
 206          {
 207   1      send_byte(command);
 208   1      return(receive_byte());
 209   1      }
 210          
 211          void send_byte( unsigned char out_byte)
 212          {
 213   1      unsigned char i;
 214   1      cs=0;
 215   1      long_delay();
 216   1      for (i=0;i<8;i++)
 217   1      {
 218   2      if (out_byte&0x80)
 219   2      {
 220   3      dat=1;
 221   3      }
 222   2      else
 223   2      {
 224   3      dat=0;
 225   3      }
 226   2      clk=1;
 227   2      short_delay();
 228   2      clk=0;
 229   2      short_delay();
 230   2      out_byte=out_byte*2;
 231   2      }
 232   1      dat=0;
 233   1      }
 234          
 235          unsigned char receive_byte(void)
 236          {
 237   1      unsigned char i, in_byte;
 238   1      dat=1; 								//设为输入状态
 239   1      long_delay();
 240   1      for (i=0;i<8;i++)
 241   1      {
C51 COMPILER V6.20c  4_3_4                                                                 09/02/2001 14:46:18 PAGE 5   

 242   2      clk=1;
 243   2      short_delay();
 244   2      in_byte=in_byte*2;
 245   2      if (dat)
 246   2      {
 247   3      in_byte=in_byte|0x01;
 248   3      }
 249   2      clk=0;
 250   2      short_delay();
 251   2      }
 252   1      dat=0;
 253   1      return (in_byte);
 254   1      }
 255          
 256          void long_delay(void)
 257          {
 258   1      unsigned char i;
 259   1      for (i=0;i<0x30;i++);
 260   1      }
 261          
 262          void short_delay(void)
 263          {
 264   1      unsigned char i;
 265   1      for (i=0;i<8;i++);
 266   1      }
 267          
 268          /********************* 延时n*10ms **********************/
 269          void delay10ms(unsigned char time)
 270          {
 271   1      unsigned char i;
 272   1      unsigned int j;
 273   1      for (i=0;i<time;i++)
 274   1      {
 275   2      for(j=0;j<0x390;j++)
 276   2      {
 277   3      if (!key)
 278   3      {
 279   4      key_int();
*** WARNING C206 IN LINE 279 OF 4.3.4.C: 'key_int': missing function-prototype
 280   4      }
 281   3      }
 282   2      }
 283   1      }
 284          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    729    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14       9
   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 + -