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

📄 choice_transmit.lst

📁 校园打铃系统
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.06   CHOICE_TRANSMIT                                                       06/07/2007 15:48:06 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE CHOICE_TRANSMIT
OBJECT MODULE PLACED IN .\choice_transmit.obj
COMPILER INVOKED BY: D:\常用软件\keil\C51\BIN\C51.EXE ..\电子设计竞赛\发射\choice_transmit.c BROWSE DEBUG OBJECTEXTEND P
                    -RINT(.\choice_transmit.lst) OBJECT(.\choice_transmit.obj)

stmt level    source

   1          #include<reg52.h>
   2          #include<math.h>
   3          #include<intrins.h>
   4          #define  uchar unsigned char
   5                             
   6          /*说明:功能显示函数  *********************************************************
   7          ****** LCD_set_xy  ******** //显示光标定位  ***********************************
   8          ****** LCD_write_char ***** //在指定位置显示字符 ******************************
   9          ****** transfer_display *** //显示连续字串  ***********************************
  10          ****** LCD_Write_String *** //写入字符串   ************************************
  11          ****** FLOAT_NUM_Display ** //显示浮点型   ************************************
  12          ****** INT_NUM_Display **** //显示整数    *************************************
  13          ****** HEX_NUM_Display **** //显示十六进制   **********************************
  14          ******为了避免程序"死等",故在功能函数中尽量避免调用Delay函数******************/
  15          
  16          void choice_transmit();
  17          void MC145162_Reset(unsigned int,unsigned long int,unsigned int,unsigned int);
  18          void set_frequency();
  19          unsigned int tlc1543(unsigned char port);
  20          void ad();
  21          bit judge_hitkey();
  22          uchar scan_key();
  23          uchar hh=0;
  24          uchar code *frequency0[10]={"34.80M","34.90M","35.00M","35.10M","35.20M","35.30M","35.40M","35.50M","35.60
             -M"," "};
  25          int code fry[9]={3480,3490,3500,3510,3520,3530,3540,3550,3560};
  26          void xp(uchar d);
  27          uchar xx,yy,date0;
  28          /***************led********************/
  29          void led();
  30          #define led_in P1//***************
  31          sbit led_en=P3^0;//***************
  32          
  33          
  34          
  35          
  36          
  37          /***************************LCD Part*******************************************/
  38          #define  uchar unsigned char
  39          
  40          #define  LCDIO     P1        //LCD数据口
  41          
  42          #define  LINE1     0        //1602第一行
  43          
  44          #define  LINE2     1        //1602第二行
  45          
  46          #define  LINE1_HEAD    0x80 //第一行首地址
  47          
  48          #define  LINE2_HEAD    0xC0 //第二行首地址
  49          
  50          
  51          /****************************LCD与单片机的接口*********************************/
  52          
  53          sbit LCD1602_RS=P3^7;   //指令/数据选择,1选择数据,0选择指令
C51 COMPILER V7.06   CHOICE_TRANSMIT                                                       06/07/2007 15:48:06 PAGE 2   

  54          
  55          sbit LCD1602_RW=P3^6;   //读写选择,1读出,0写入
  56          
  57          sbit LCD1602_EN=P3^5;   //写使能。高有效,下降沿时锁定数据
  58          
  59          sbit LCD1602_busy=LCDIO^7; //判忙标志
  60          
  61          /********************数组定义区************************************************/
  62          
  63          uchar CHR[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','.'};
  64          
  65          uchar LCDDisplaybuffer[32]={0};
  66          
  67          /******************全局变量定义区**********************************************/
  68          
  69          unsigned long frequency;  //显示整型定义
  70          
  71          float dd;                //显示浮点型定义]
  72          
  73          uchar zhi=0x30;          //数字0的代码值
  74          
  75          long int Num;
  76          
  77          uchar Bite;
  78          
  79          /******************函数声明区**************************************************/
  80          
  81          void LCD_en_command(uchar command);   //写指令
  82          
  83          void LCD_en_dat(uchar temp);         //写数据
  84          
  85          void LCD_set_xy( uchar x, uchar y );//设置显示地址
  86          
  87          void LCD_write_char( uchar x,uchar y,uchar dat);//显示字符
  88          
  89          void LCD_write_string(uchar X,uchar Y,uchar *s);//显示字符串
  90          
  91          void transfer_display(uchar zhi,uchar x,uchar y);//显示滚动的字符
  92          
  93          void LCD_init(void);       //LCD初始化
  94          
  95          void  LCD_busy();           //判忙
  96          
  97          void FLOAT_NUM_Display(float dd,uchar x,uchar y);       //显示浮点型
  98          
  99          void INT_NUM_Display(unsigned int Num,uchar x,uchar y);//显示整型
 100          
 101          void HEX_NUM_Display(unsigned long  Num,uchar Bite,uchar x,uchar y);//显示十六进制
 102          
 103          void delay_nms(unsigned int n);//延时功能
 104          
 105          /*******************nms延时函数************************************************/
 106          
 107          
 108          void delay_nms(unsigned int n)
 109          {
 110   1          unsigned int i=0,j=0;
 111   1          for (i=n;i>0;i--)
 112   1             for (j=0;j<1140;j++)
 113   1                   {;};
 114   1      
 115   1      }
C51 COMPILER V7.06   CHOICE_TRANSMIT                                                       06/07/2007 15:48:06 PAGE 3   

 116          
 117          
 118          
 119          /*******************************************************************************
 120          /***************LCD模块的子程序*************************************************
 121          ****************要注意判忙程序的写法和在指令数据函数里放的顺序,不可调换********/
 122          
 123          //判忙程序
 124          void LCD_busy()
 125          {
 126   1          LCDIO=0xff;    //置p0口为输入状态
 127   1          LCD1602_RS=0;
 128   1          LCD1602_RW=1;
 129   1          LCD1602_EN=1;
 130   1          while(LCD1602_busy);
 131   1          LCD1602_EN=0;
 132   1      }
 133          
 134          //写入指令代码,即数据的地址
 135          void LCD_en_command(uchar command)
 136          {
 137   1      
 138   1          LCDIO=command;
 139   1          LCD1602_RS=0;
 140   1          LCD1602_RW=0;
 141   1          LCD1602_EN=0;
 142   1          LCD_busy();
 143   1          LCD1602_EN=1;
 144   1      }
 145          
 146          
 147          //写入要显示的数据
 148          void LCD_en_dat(uchar dat)
 149          {
 150   1          LCDIO=dat;
 151   1          LCD1602_RS=1;
 152   1          LCD1602_RW=0;
 153   1          LCD1602_EN=0;
 154   1          LCD_busy();
 155   1          LCD1602_EN=1;
 156   1      }
 157          
 158          /*********************************************************************************
 159          ** 函数名:void LCD_set_xy( uchar x, uchar y )************************************
 160          ** 功能:设置LCD显示的起始位置****************************************************
 161          ** 入口参数:uchar  x,uchar y (x:0-15;y:0-1;)************************************
 162          ********************LCD第一行显示寄存器地址:0X80-0X8F****************************
 163          ********************LCD第一行显示寄存器地址:0XC0-0XCF****************************
 164          ***********  uchar x,uchar y(字符显示的坐标)************************************
 165          ** 出口参数:无 ******************************************************************
 166          **********************************************************************************/
 167          
 168          
 169          void LCD_set_xy( uchar x, uchar y )
 170          {
 171   1      
 172   1          uchar address;//光标位置
 173   1          if (y==LINE1)
 174   1               address=LINE1_HEAD+x;
 175   1          else
 176   1               address=LINE2_HEAD+x;
 177   1      
C51 COMPILER V7.06   CHOICE_TRANSMIT                                                       06/07/2007 15:48:06 PAGE 4   

 178   1          LCD_en_command(address);
 179   1      }
 180          
 181          
 182          
 183          /*********************************************************************************
 184          ** 函数名:void LCD_write_char( uchar x,uchar y,uchar dat)************************
 185          ** 功能:在指定位置显示单字符(最多32个字符)*************************************
 186          ** 入口参数:uchar  dat (直接输入需要显示的字符,例如'1','a'等等)***************
 187          ***********  uchar x,uchar y(字符显示的坐标)************************************
 188          ** 出口参数:无 ******************************************************************
 189          **********************************************************************************/
 190          
 191          void LCD_write_char( uchar x,uchar y,uchar dat)
 192          {
 193   1      
 194   1         LCD_set_xy( x, y );
 195   1         LCD_en_dat(dat);
 196   1      
 197   1      }
 198          
 199          
 200          /*********************************************************************************
 201          **函数名:void transfer_display()**************************************************
 202          **功能:显示从定义的zhi的ASCALL码开始的连续的字符(最多显示32个字符)**************
 203          **入口参数:uchar zhi (输入要显示连续字串的首字符)*********************************
 204          **其中的i,j是x轴,LINE1,LINE2为y轴************************************************
 205          **出口参数:无*********************************************************************/
 206          
 207          
 208          void transfer_display(uchar zhi,uchar x,uchar y)
 209          {
 210   1      
 211   1          uchar i,j;
 212   1      
 213   1          for(i=x;i<16;i++)  //第一行显示
 214   1                 {
 215   2                   LCD_write_char(i,y,zhi++);
 216   2                 }
 217   1      
 218   1                 y^=1;
 219   1          for(j=0;j<16;j++)  //当第一行显示满后第二行显示
 220   1                 {
 221   2                   LCD_write_char(j,y,zhi++);
 222   2                 }
 223   1      
 224   1      }
 225          
 226          /*********************************************************************************
 227          ** 函数名:void LCD_write_string(uchar X,uchar Y,uchar *s)************************
 228          ** 功能:字符串显示的输入函数(最多32个字符)*************************************
 229          ** 入口参数:uchar  *s (直接输入需要显示的字符串,例如"welcome to use!")********
 230          ***********  uchar X,uchar Y(第一个字符开始显示的坐标)**************************
 231          ** 出口参数:无 ******************************************************************
 232          **********************************************************************************/
 233          void LCD_write_string(uchar X,uchar Y,uchar *s)
 234          {
 235   1      
 236   1          while (*s)  // 显示的字符
 237   1             {
 238   2      
 239   2                LCD_set_xy( X, Y ); //设置显示的地址
C51 COMPILER V7.06   CHOICE_TRANSMIT                                                       06/07/2007 15:48:06 PAGE 5   

 240   2                LCD_en_dat(*s);
 241   2                s++;
 242   2                X++;
 243   2                if(X==16)     //当第一行显示满时,Y^=1,取另一行
 244   2                  {
 245   3                    X=0;
 246   3                    Y^=1;
 247   3                  }
 248   2      
 249   2              }
 250   1      
 251   1      }
 252          
 253          
 254          /************LCD模块初始化******************************************************/
 255          void LCD_init(void)
 256          {
 257   1          LCD_en_command(0x01);//清屏 (得两次清屏)
 258   1          LCD_en_command(0x38);//设定双行显示,字形5*7点阵,8位数据转移
 259   1          LCD_en_command(0x0c);//开显示,光标不显示,不闪烁
 260   1          LCD_en_command(0x06);//右移光标(光标加1,字符不动)
 261   1          LCD_en_command(0x01);//清屏
 262   1      }
 263          
 264          
 265          /*********************************************************************************
 266          ** 函数名:void FLOAT_NUM_Display(float dd)***************************************
 267          ** 功能:显示浮点型数字(6位有效数字)********************************************
 268          ** 入口参数:float dd (dd 为调用这个子程序时传入的数据)*************************
 269          ** 出口参数:无 ******************************************************************
 270          **注意各变量的数据类型,数的有效范围***********************************************
 271          **实现方式:从小数点第六位 起往左逆向取数字,存入数组,再正向输出7位数字**********
 272          **该函数的缺陷是:小数部分最多显示六位,如0.000020**************************************/
 273          
 274          
 275          void FLOAT_NUM_Display(float dd,uchar x,uchar y)
 276          {
 277   1      
 278   1        uchar i,j,k=0;
 279   1        frequency=dd*1000000;//取小数点后六位
 280   1        if(frequency>=10000000) //整数部分不为0
 281   1          {
 282   2            for (i=0;i<16;i++)
 283   2               {
 284   3                if(i==6)
 285   3                   {
 286   4                      LCDDisplaybuffer[i]='.';
 287   4                   }
 288   3                 else
 289   3                   {
 290   4                    LCDDisplaybuffer[i]=CHR[frequency%10];
 291   4                    frequency/=10;
 292   4                   }
 293   3      
 294   3                if(frequency==0)
 295   3                       {

⌨️ 快捷键说明

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