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

📄 mcs51-项目开发经典.lst

📁 高端数码管驱动芯片
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   MCS51__钅靠猒_____                                                    12/10/2008 19:58:27 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MCS51__钅靠猒_____
OBJECT MODULE PLACED IN MCS51-项目开发经典.OBJ
COMPILER INVOKED BY: E:\Program Files\Keilu2\C51\BIN\C51.EXE MCS51-项目开发经典.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //=================================================================================================
   2          // 项目名:MCS51-项目开发经典
   3          // 硬件文件名:51Studay.DDB
   4          // 程序组目录名:MCS51-项目开发经典
   5          // 开始时间:2007年5月21日
   6          // 完成时间:2007年6月10日
   7          //-------------------------------------------------------------------------------------------------
   8          // 程序中用到哪些C51标准函数,就需要把该函数对应的头文件包含进来
   9          //-------------------------------------------------------------------------------------------------
  10          #include <intrins.h>
  11          #include <string.h>
  12          #include <absacc.h>
  13          #include <reg52.h>
  14          //-------------------------------------------------------------------------------------------------
  15          // 为提高书写效率做以下宏定义
  16          //-------------------------------------------------------------------------------------------------
  17          #define uchar unsigned char
  18          #define uint  unsigned int
  19          #define ulong unsigned long
  20          #define CLOSE 1
  21          #define OPEN  0
  22          //-------------------------------------------------------------------------------------------------
  23          // HD7279操控位及指令宏定义
  24          //-------------------------------------------------------------------------------------------------
  25          sbit CS_7279  = P1^0;
  26          sbit CLK_7279 = P1^1;
  27          sbit DATA_7279= P1^2;
  28          sbit KEY_7279 = P1^3;
  29          
  30          // HD7279指令宏定义:不带数据的纯指令
  31          #define HD7279_RESET    0xa4 //复位,相当于重新上电
  32          #define HD7279_TEST     0xbf //测试,点亮全部LED并闪烁
  33          #define HD7279_RL       0xa1 //左移1位
  34          #define HD7279_RR       0xa0 //右移1位
  35          #define HD7279_RLC      0xa3 //循环左移
  36          #define HD7279_RRC      0xa2 //循环右移
  37          // HD7279指令宏定义:带有数据的指令
  38          #define HD7279_DECODE0  0x80 //译码方式0
  39          #define HD7279_DECODE1  0xc8 //译码方式1
  40          #define HD7279_UNDECODE 0x90 //译码方式2: 不译码
  41          #define HD7279_FLASH    0x88 //闪烁指令,后跟8位数据 D8|D7|D6|D5|D4|D3|D2|D1,某位置0则该位闪烁
  42          #define HD7279_HIDE     0x98 //消隐指令,后跟8位数据 D8|D7|D6|D5|D4|D3|D2|D1,某位置0则该位消隐
  43          #define HD7279_SEGON    0xe0 //单段亮
  44          #define HD7279_SEGOFF   0xc0 //单段灭
  45          #define HD7279_READ_KEY 0x15 //读按键代码,读出的数值对应按下的键,无键按下时数值为0xff.
  46          
  47          //=================================================================================================
  48          #define TEST_74HC595  1
  49          #define TEST_24C02    2
  50          #define TEST_93C46    3
  51          #define SET_SD2000    4
  52          #define READ_SD2000   5
  53          #define TEST_18B20    6
  54          #define TEST_HD7279   7
  55          #define TEST_BIT_IO   8
C51 COMPILER V7.06   MCS51__钅靠猒_____                                                    12/10/2008 19:58:27 PAGE 2   

  56          #define TEST_TLC2543  9
  57          #define TEST_TLC5617  10
  58          #define TEST_PWM_DA   11
  59          #define TEST_L297     12
  60          #define TEST_DC_MOTOR 13
  61          #define TEST_LCM      14
  62          
  63          //-------------------------------------------------------------------------------------------------
  64          // 操作UART串口相关的全局变量
  65          //-------------------------------------------------------------------------------------------------
  66          uchar idata uart_buffer[40];//串口接收缓冲区,可接收字符串的最大长度为40
  67          uchar uart_buffer_address;//串口接收缓冲区地址计数器
  68          bit   uart_receive_start; //串口接收启动
  69          bit   uart_receive_ok;    //串口接收(UART0)中断里已接收完整消息标志
  70          bit   kaiguan;
  71          //-------------------------------------------------------------------------------------------------
  72          // 键盘扫描相关的全局变量
  73          //-------------------------------------------------------------------------------------------------
  74          uchar key_value_previous;
  75          uchar key_press_counter;
  76          uchar key_value_main;
  77          uchar key_press_timer;
  78          //-------------------------------------------------------------------------------------------------
  79          uchar t1_delay_time;//50毫秒计数器累加变量,在T2中断里累加
  80          bit   i2c_response_signal;//I2C总线应答信号
  81          uint  idata temporary_data[10];//临时数据
  82          uchar idata test_command;//存储串口接收的测试命令
  83          uchar idata weizhi;
  84          uint  motor_speed_delay;
  85          //-------------------------------------------------------------------------------------------------
  86          // 函数声明
  87          //-------------------------------------------------------------------------------------------------
  88          void  init_cpu(void);
  89          void  ctrl_74hc595(uchar led_display_data);
  90          void  HD7279_LongDelay(void);
  91          void  HD7279_ShortDelay(void);
  92          void  HD7279_SendByte(uchar out_byte);
  93          uchar HD7279_ReceiveByte(void);
  94          uchar HD7279_GetKey(void);
  95          void  HD7279_ShowData(uchar Position,uchar ShowData,bit Have_DP);
  96          void  HD7279_Showflash(uchar Position_flash);
  97          void  HD7279_Initial(void);
  98          
  99          void  uart_byte_out(uchar uart_data_out);
 100          void  uart_string_out(char * char_array);
 101          void  uart_data_decimalist_out(uint data_to_out);
 102          void  uart_newline(uchar newline_number);
 103          void  uart_space(uchar space_number);
 104          
 105          uchar change_bcd_to_hex(uchar shu);
 106          uchar change_hex_to_bcd(uchar shu);
 107          uchar change_askii_to_hex(uchar askii);
 108          uchar change_hex_to_askii(uchar data_hex);
 109          
 110          void  get_data(uchar * how_much_data);
 111          char  * strstr(char * haystack, char * needle);
 112          
 113          //=================================================================================================
 114          //=====================                            ================================================
 115          //=====================          主程序            ================================================
 116          //=====================                            ================================================
 117          //=================================================================================================
C51 COMPILER V7.06   MCS51__钅靠猒_____                                                    12/10/2008 19:58:27 PAGE 3   

 118          void main (void)
 119          {               uchar i;
 120   1                      init_cpu();
 121   1                      HD7279_Initial();
 122   1                      key_value_main=0xff;
 123   1                      HD7279_SendByte( HD7279_RESET );//复位
 124   1      
 125   1      wqyloop:  
 126   1               for(i=0;i<10;i++) //数码管测试
 127   1              {   HD7279_ShowData(1,i,1);
 128   2                  HD7279_ShowData(2,i,1);
 129   2                  HD7279_ShowData(3,i,1);
 130   2                  HD7279_ShowData(4,i,1);
 131   2                  HD7279_ShowData(5,i,1);
 132   2                  HD7279_ShowData(6,i,1);
 133   2                  HD7279_ShowData(7,i,1);
 134   2                  HD7279_ShowData(8,i,1);
 135   2                       for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
 136   2                       }
 137   1                      HD7279_ShowData(1,1,1);
 138   1                       for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
 139   1                      HD7279_ShowData(2,2,1);
 140   1                       for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
 141   1                      HD7279_ShowData(3,3,1);
 142   1                       for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
 143   1                      HD7279_ShowData(4,4,1);
 144   1                       for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
 145   1                      HD7279_ShowData(5,5,1);
 146   1                       for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
 147   1      
 148   1                      HD7279_Showflash(3);
 149   1                       for(t1_delay_time=0;t1_delay_time<10;);//延时500毫秒
 150   1      
 151   1                      
 152   1               if(key_value_main!=0xff)//如果有按键触发则如下
 153   1                                 {uart_string_out("You have pushed the button S");
 154   2                      uart_byte_out(change_hex_to_askii(key_value_main));
 155   2                                  uart_newline(1);
 156   2                                  key_value_main=0xff;//使用完本次触发的键值后必须清空键值,否则主程序认为在连续触发该键
 157   2                                 }
 158   1              
 159   1      goto wqyloop;
 160   1      
 161   1      }//The end of main()
 162          
 163          //##########################  主程序结束  #########################################################
 164          //##########################  子程序开始  #########################################################
 165          
 166          //=================================================================================================
 167          // 函数功能:CPU初始化函数
 168          // 串口波特率可以由T1或T2产生,本例中用T1产生波特率
 169          // T2用于50毫秒精确定时
 170          // T0用于PWM控制中频率的时基
 171          //=================================================================================================
 172          void init_cpu(void)
 173          { 
 174   1        TMOD=0x12;//T1为16位计数器,T0为8位自动重装载计数器
 175   1      
 176   1        ET1=1;
 177   1        TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
 178   1        TL1=0x00;
 179   1        TR1=1;//T1开始定时
C51 COMPILER V7.06   MCS51__钅靠猒_____                                                    12/10/2008 19:58:27 PAGE 4   

 180   1      
 181   1       
 182   1        T2CON=0x30;//定时器T2工作于波特率发生器方式
 183   1        RCAP2H=0xff;//11.0592M晶振,9600bps初值
 184   1        RCAP2L=0xdc;
 185   1        TH2=0xff;
 186   1        TL2=0xdc;
 187   1        //RCAP2H=0xfe;//11.0592M晶振,1200bps初值
 188   1        //RCAP2L=0xe0;
 189   1        //TH2=0xfe;
 190   1        //TL2=0xe0;
 191   1        TR2=1;//允许T2中断
 192   1        
 193   1        ES=1;     //串口中断允许

⌨️ 快捷键说明

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