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

📄 hello.lst

📁 uart,mcu,linux,embedded soc
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE HELLO
OBJECT MODULE PLACED IN HELLO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HELLO.C DEBUG OBJECTEXTEND

stmt level    source

   1          //*******************************************************************
   2          //***此程序为调试通过的源程序
   3          //***由南京赛博电子有限公司提供
   4          //***文件名:sy0606.C***//
   5          //***是51系例单片机的最小系统
   6          //***有AT89S51/52的在线下载功能
   7          //***IIC总线芯片为24C02,记存密码
   8          //*******************************************************************
   9          #include"at89x52.h"
  10          #include<intrins.h>
  11          #define  uchar unsigned char    
  12          #define  uint  unsigned int
  13          #define  nop  _nop_()       /* 定义空操作指令 */
  14          //#define VAR    P1
  15          sbit rs=P2^2;                           /*LCD模块用*/
  16          sbit rw=P2^1;                           /*LCD模块用*/
  17          sbit enable=P2^0;                       /*LCD模块用*/
  18          sbit SCL=P3^4;                          /*24C01 CSL接脚=89C51 T0 P3.4*/
  19          sbit SDA=P3^5;                          /*24C01 SDA接脚=89C51 T1 P3.5*/
  20          sbit en =P2^7;                          /*DTLED-6显示芯片使能端*/       
  21          sbit dout=P2^6;                         /*DTLED-6显示芯片数据读入端*/
  22          sbit clk=P2^5;                          /*DTLED-6显示芯片/时钟芯片DS1302时钟输入端*/
  23          sbit DINOUT=P2^4;                       /*DS1302时钟芯片数据输入输出端*/        
  24          sbit RST=P2^3;                          /*DS1302芯片复位起始端*/
  25          bit FLAG0=0;                            /*位标号FLAG0=1键盘扫描回应*/
  26          bit FLAG1=1;                            /*位标号20H.1比较密码回应旗号*/
  27          bit FLAG2=1;                            /*位标号FLAG2=0时,进入键盘操作*/
  28          bit FLAG3=1;                            /*位标号FLAG3=0时,键盘操作*/
  29          bit FLAG4=0;                            /*位标号FLAG4=0时,键盘操作*/
  30          bit FLAG5=0;                            /*位标号FLAG5=1时,存储*键按下*/
  31          bit TSendAddress(uchar slaaddress,uchar subaddress,uchar * s,uchar no); /* 向有子地址器件写入6字节数据函数
             - */
  32          bit TRcvAddress(uchar slaaddress,uchar subaddress,uchar * s,uchar no);  /* 向有子地址器件读取6字节数据函数
             - */
  33          bit acknow;                             /* 应答标志位 acknow=1 表示正常响应 acknow=0 表示未响应 */
  34          static const char tab[16]={0x01,0x02,0x03,0x0c, /*键盘码00,01,02,03,*/
  35                                     0x04,0x05,0x06,0x0d, /*键盘码04,05,06,07,*/
  36                                     0x07,0x08,0x09,0x0e, /*键盘码08,09,0a,0b,*/
  37                                     0x0a,0x00,0x0b,0x0f};/*键盘码0c,0d,0e,0f*/
  38          //static const char tab1[6]={0x01,0x01,0x01,0x01,0x01,0x01};/*内定密码"888888"*/
  39          uchar char1[]="Syber Nanjing.Co";
  40          uchar char2[]="Password:";
  41          uchar dispbuf[9];                               /*显示值存放阵列*/
  42          uchar clocktmp[3];                              /*显示值存放阵列*/
  43          uchar bufdata[9];       
  44          uchar buf_rec_com1;
  45          uchar bufuart[6];                       /*串口接收值存放阵列*/
  46          //uchar buf_rec_com1;   //huzm
  47          //uchar rec_comm1_len=0;        //huzm
  48          uchar a1=0,clockbak,b1=100,stand=0,m=0,busy,count=10;           
  49          char ww=0,ptr=0,ptr1=0;         /*PTR键盘扫描指标,ptr1显示器扫描指标*/
  50          void delay (unsigned int value)         /*延时副程式*/
  51           {
  52   1            while (value!=0) value--;         /*10US延时*/
  53   1       }
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 2   

  54          void Enable(uchar c);
  55          void Write1(char *c1);                          
  56          void Write2(char c2);                           
  57          void Write3(void);                      /* 显示密码字符串 */
  58          void send_to_Led_a(void);                       /*串行发送到DTLED-6副程式*/     
  59          void BCD(void);                         /*BCD码转换副程式*/
  60          void clear(void);                       /*清除按键存放/显示器阵列dispbuf[]副副程式*/
  61          void open(void);                        /*开门比较密码副程式*/  
  62          void read24c02();                       /*读24c02的存储值*/
  63          void write24c02();                      /*写24c02的存储值*/
  64          void IICSAVE(void);                     /*设定密码并存入buft[]阵列副程式*/
  65          //void disp(void);                      /*显示存放在dispbuf[]阵列的密码副程式*/ 
  66          void send_to_Comm1(void);                       /*串口serial发送副程式*/        
  67          void temp(void);
  68          void Rd1302st(void);                            /*读时钟芯片DS1302*/
  69          void Rd1302(void);                                      /*读时钟芯片DS1302*/
  70          void Wr1302(void);                                      /*写时钟芯片DS1302*/
  71          void Start();                           /* 起动总线函数 */
  72          void Stop();                            /* 结束总线函数 */
  73          void SendByte(uchar c);                 /* 8951发数据或地址给8583 字节数据发送函数 */
  74          uchar RcvByte();                        /* 8951从24C01读数据字节数据接收函数 */
  75          void Ack(bit a);                        /* 主机8951应答子函数 */
  76          void xch(void);                         /*宣告按键存放/显示器阵列dispbuf[]右键滚入副程式*/      
  77          void wxb1(void);                /*0~9计数,秒*/  
  78          void wxb2(void);                /*0~9计数,分*/  
  79          void wxb3(void);                /*0~9计数,时*/  
  80          void save_clocks(void);                         /*按显示时间更改时钟*/
  81          /*********************************************************************/
  82          
  83          //串行发送DTLED-6显示
  84          //dispbuf0-dispbuf1-dispbuf2-dispbuf3-dispbuf4-dispbuf5-dispbuf6-dispbuf7-dispbuf8
  85          // 小数点 - 数码管1- 数码管2- 数码管3- 数码管4- 数码管5- 数码管6-ID识别码-BZ识别码
  86          //00000xxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx
  87          //小数点=1~6,其它为不显示                                                                                                       
  88          //数码管1-6=0~15,
  89          //ID识别码=0~15   
  90          //BZ识别码=BZ.3为蜂鸣输出控制位,0=关闭,1=打开
  91          //     BZ0~2为蜂鸣频率输出设定为,000=不分频,  最高频率输出=4800Hz;
  92          //                                                                001=一次分频,频率输出=4800/ 2 =2400Hz;
  93          //                                                                010=二次分频,频率输出=4800/ 4 =1200Hz;
  94          //                                                                011=三次分频,频率输出=4800/ 8 =600Hz;
  95          //                                                                100=四次分频,频率输出=4800/ 16=300Hz;
  96          //                                                                101=五次分频,频率输出=4800/ 32=150Hz;
  97          //                                                                110=六次分频,频率输出=4800/ 64=75Hz;                                
  98          //                                                                111=七次分频,频率输出=4800/128=38Hz;      
  99          //======================================================================
 100          void send_to_Led_a(void)                        /*串行发送DTLED-6显示副程式*/   
 101          {   
 102   1              char ts0,i,j;
 103   1              clk=0;
 104   1              en=0;
 105   1              delay(10);
 106   1              for(j=0;j<9;j++)
 107   1              {       
 108   2                      ts0=dispbuf[j];
 109   2                      for(i=0;i<4;i++)                /*发小数点码8,4,2,1*/
 110   2                      {
 111   3                              clk=1;
 112   3                              ts0=ts0<<1;     
 113   3                              if(AC==1) 
 114   3                              dout=1;
 115   3                              else      dout=0;
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 3   

 116   3                              clk=0;
 117   3                              nop;
 118   3                              delay(3);
 119   3                      }
 120   2         }    
 121   1              en=1;
 122   1      }               /*返回主程式*/
 123          //======================================================================
 124          void Write1(char *c1)                           
 125          {while(*c1!=0)
 126   1              {Write2(*c1);
 127   2              c1++;
 128   2              }
 129   1      }
 130          //======================================================================
 131          void Write3(void)                       
 132          {uchar i=6;                     
 133   1      while(i>0)
 134   1       {      P1=bufdata[i]|0x30;
 135   2              rs=1;rw=0;
 136   2              enable=1;
 137   2              delay(2);
 138   2              enable=0;
 139   2              i--;
 140   2       }
 141   1      }
 142          //======================================================================
 143          void Write2(char c2)                            
 144          {P1=c2;
 145   1      rs=1;rw=0;enable=1;
 146   1      delay(2);
 147   1      enable=0;
 148   1      }
 149          //======================================================================
 150          void Enable(uchar c)
 151          {
 152   1      P1=c;
 153   1      rs=0;rw=0;enable=1;
 154   1      delay(2);
 155   1      enable=0;               
 156   1      }
 157          
 158          /***********************************************************************/
 159          void temp(void)
 160          {       FLAG2=0;
 161   1        if(tab[ptr]==0x0e) 
 162   1              {
 163   2              //disp();               /*如果是按“C”则呼叫显示密码DISP*/
 164   2               dispbuf[0]=0x03;       /*小数点位*/
 165   2              }
 166   1        else                                          /*否则往下执行*/
 167   1          {
 168   2          switch(tab[ptr])                    /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
 169   2              {
 170   3                case 0x0a: 
 171   3                              write24c02();   /*是否按“*”是则呼叫设定密码SET*/
 172   3                              clear();                /*是否按“#”是则呼叫清除显示器CLEAR*/
 173   3                           break;             /*跳出此循环*/
 174   3                case 0x0b: 
 175   3                              clear();                /*是否按“#”是则呼叫清除显示器CLEAR*/
 176   3                           break;             /*跳出此循环*/
 177   3                case 0x0c:                    /*是否按“A”,未规划键待用户自己定义*/
C51 COMPILER V7.07   HELLO                                                                 11/07/2006 19:17:04 PAGE 4   

 178   3                              FLAG2=1; P3_6=1;        
 179   3                                      dispbuf[0]=0x03;                /*小数点位*/
 180   3                           break;             /*跳出此循环*/
 181   3                case 0x0d:                    /*是否按“B”,未规划键待用户自己定义*/ 
 182   3                           break;             /*跳出此循环*/
 183   3                case 0x0e:                    /*是否按“C”,已侦测过*/       
 184   3                      read24c02();    /*呼叫读取密码存放在DATE1[]副程式*/
 185   3                           break;             /*跳出此循环*/                    
 186   3                case 0x0f: 
 187   3                              open();                 /*是否按“D”,是则呼比较密码开门副程式*/
 188   3                                      dispbuf[0]=0x03;        /*小数点位*/
 189   3                                      goto openend;
 190   3                           break;             /*跳出此循环*/
 191   3                default:   
 192   3                              xch();                  /*以上均不是则为数字键呼叫XCH作右键滚入*/
 193   3                           break;             /*跳出此循环*/
 194   3                   }                                  /*跳出SWITCH*/
 195   2              delay(100);                             /*按钮抗机械反弹跳*/
 196   2              while(m==P0);                   /*按钮放开否?*/
 197   2              send_to_Led_a();                                /*串行发送到DTLED-6副程式*/
 198   2      openend:        nop;
 199   2         }                            
 200   1      }               /*返回上一层程式*/
 201          /****************************************************/
 202          void temp_setclock(void)                /*判断有按键输入否?*/
 203          {
 204   1      switch(dispbuf[0])                      /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
 205   1       {
 206   2        case 0x01: 
 207   2                              wxb1();         /*0~9计数*/     
 208   2                     break;           /*跳出此循环*/
 209   2        case 0x03: 
 210   2                              wxb1();         /*0~9计数*/     
 211   2                     break;           /*跳出此循环*/
 212   2        case 0x05: 
 213   2                              wxb2();         /*0~2,0~4计数*/ 
 214   2                     break;           /*跳出此循环*/
 215   2        default:                      /*以上均不是*/
 216   2                     break;           /*跳出此循环*/
 217   2       }              
 218   1         delay(100);                          /*按钮抗机械反弹跳*/

⌨️ 快捷键说明

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