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

📄 2402test.lst

📁 时钟是用微控制器
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.05a   2402TEST                                                             07/02/2008 20:45:43 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE 2402TEST
OBJECT MODULE PLACED IN 2402test.OBJ
COMPILER INVOKED BY: D:\51单片机\Tools\Keil805\C51\BIN\C51.EXE 2402test.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************************************
   2          Sun-2402C 桌面控制钟
   3          应用程序 C
   4          
   5          V0.01 2008-5-15
   6          MCS-51 12MHZ C语言
   7          LCM2402 89S52 DS18B20 DS1302 AT24C02 红外接收IC
   8          ********************************************************************************************/
   9          #include <AT89X52.h>
  10          #include <string.h>           // 包含头文件
  11          /*******************************************************************************************/
  12          typedef unsigned char uint8;  // 无符号8位整型变量
  13          typedef unsigned short uint16;// 无符号16位整型变量
  14          typedef signed char int8;     // 有符号8位整型变量
  15          
  16          sbit LED1=P2^3;               // 定义LCM2402的RS控制线
  17          /*******************全局变量***************************************************************/
  18          static unsigned char data IRCode[3],IRCON,IRCON2;  //遥控器中断专用
  19          static unsigned char data DT,menu,rom,alarm_con;   //遥控寄存值/菜单值/定时器组值/报警开关选择
  20          //==================LCM2402模块驱动=========================================================
  21          #define LCM2402_DB0_DB7 P0  // 定义LCM2402的数据总线
  22          
  23          sbit LCM2402_RS   = P1^0;   // 定义LCM2402的RS控制线
  24          sbit LCM2402_RW   = P1^2;   // 定义LCM2402的RW控制线
  25          sbit LCM2402_E    = P1^1;   // 定义LCM2402的E控制线
  26          sbit LCM2402_Busy = P0^7;   // 定义LCM2402的测忙线(与LCM2402_DB0_DB7关联)
  27          /*******************定义LCM2402指令集********************************************************/
  28          #define CMD_clear       0x01    // 清除屏幕
  29          #define CMD_back        0x02    // DDRAM回零位
  30          #define CMD_dec1        0x04    // 读入后AC(指针)减1,向左写
  31          #define CMD_add1        0x06    // 读入后AC(指针)加1,向右写
  32          #define CMD_dis_gb1     0x0f    // 开显示_开光标_开光标闪烁
  33          #define CMD_dis_gb2     0x0e    // 开显示_开光标_关光标闪烁
  34          #define CMD_dis_gb3     0x0c    // 开显示_关光标_关光标闪烁
  35          #define CMD_OFF_dis     0x08    // 关显示_关光标_关光标闪烁
  36          #define CMD_set82       0x38    // 8位总线_2行显示
  37          #define CMD_set81       0x30    // 8位总线_1行显示(上边行)
  38          #define CMD_set42       0x28    // 4位总线_2行显示
  39          #define CMD_set41       0x20    // 4位总线_1行显示(上边行)
  40          #define lin_1           0x80    // 4位总线_1行显示(上边行)
  41          #define lin_2           0xc0    // 4位总线_1行显示(上边行)
  42          /*******************底层协议*****************************************************************
  43          * 函数名称:DelayS()
  44          * 功    能:延时
  45          *********************************************************************************************/
  46          void DelayS(unsigned int a)
  47          {
  48   1       unsigned char i;
  49   1       while(--a!=0)
  50   1       {
  51   2        for(i=0;i<125;i++);   //一个 ; 表示空语句,CPU空转。
  52   2       }                      //i 从0加到125,CPU大概就耗时1毫秒
  53   1      }
  54          
  55          void DelayS250(void)
C51 COMPILER V8.05a   2402TEST                                                             07/02/2008 20:45:43 PAGE 2   

  56          {
  57   1       DelayS(250);
  58   1      }
  59          /******************底层协议*******************************************************************
  60          * 函数名称:LCM2402_TestBusy()
  61          * 功    能:LCM2402测忙,若LCM2402处于忙状态,本函数将继续测忙,直到LCM2402处于非忙状态。
  62          *********************************************************************************************/
  63          void LCM2402_TestBusy(void)
  64          {
  65   1       LCM2402_DB0_DB7=0xff;  //设备读状态
  66   1       LCM2402_RS=0;
  67   1       LCM2402_RW=1;
  68   1       LCM2402_E=1;
  69   1       while(LCM2402_Busy);     //等待LCM不忙
  70   1       LCM2402_E=0;
  71   1      }
  72          /*******************底层协议****************************************************************
  73          * 函数名称:LCM2402_WriteCMD()
  74          * 功    能:向LCM2402写命令。
  75          * 入口参数:LCM2402_command     要写入LCM2402的命令字节
  76          * 出口参数:无
  77          *******************************************************************************************/
  78          void LCM2402_WriteCMD(uint8 LCM2402_command)
  79          { 
  80   1       LCM2402_TestBusy();
  81   1       LCM2402_DB0_DB7=LCM2402_command;
  82   1       LCM2402_RS=0;
  83   1       LCM2402_RW=0;
  84   1       LCM2402_E=1;
  85   1       LCM2402_E=0;
  86   1      }
  87          /*******************底层协议****************************************************************
  88          * 函数名称:LCM2402_WriteData()
  89          * 功    能:向LCM2402写数据。
  90          * 入口参数:LCM2402_data 要写入LCM2402的数据字节
  91          * 出口参数:无
  92          ********************************************************************************************/
  93          void LCM2402_WriteData(uint8 LCM2402_data)
  94          { 
  95   1       LCM2402_TestBusy();
  96   1       LCM2402_DB0_DB7=LCM2402_data;
  97   1       LCM2402_RS=1;
  98   1       LCM2402_RW=0;
  99   1       LCM2402_E=1;
 100   1       LCM2402_E=0;
 101   1      }
 102          /*******************************************************************************************
 103          * 函数名称:LCM2402_Init()
 104          * 功    能:LCM2402初始化
 105          * 入口参数:无
 106          * 出口参数:无
 107          *******************************************************************************************/
 108          void LCM2402_Init(void)
 109          {
 110   1       LCM2402_WriteCMD(CMD_set82);    // 显示模式设置:显示2行,每个字符为5*7个像素
 111   1       LCM2402_WriteCMD(CMD_clear);    // 显示清屏
 112   1       LCM2402_WriteCMD(CMD_back);     // 数据指针指向第1行第1个字符位置
 113   1       LCM2402_WriteCMD(CMD_add1);     // 显示光标移动设置:文字不动,光标右移
 114   1       LCM2402_WriteCMD(CMD_dis_gb3);  // 显示开及光标设置:显示开,光标开,闪烁开
 115   1      }
 116          /******************************************************************************************
 117          * 函数名称:print()
C51 COMPILER V8.05a   2402TEST                                                             07/02/2008 20:45:43 PAGE 3   

 118          * 功    能:向LCM发送一个字符串,长度48字符之内。应用:print("doyoung.net");
 119          * 入口参数:字符串
 120          * 出口参数:无
 121          *******************************************************************************************/
 122          void print(uint8 a,uint8 *str)
 123          {
 124   1       LCM2402_WriteCMD(a);
 125   1       while(*str!='\0')
 126   1       {
 127   2        LCM2402_WriteData(*str++);
 128   2       }
 129   1       *str=0;
 130   1      }
 131          /*******************************************************************************************
 132          * 函数名称:print2()
 133          * 功    能:向LCM发送一个字符串,长度48字符之内。应用:print("doyoung.net");
 134          * 入口参数:字符串
 135          * 出口参数:无
 136          ********************设置写入地址和数据******************************************************/
 137          void print2(uint8 a,uint8 t)
 138          {
 139   1       LCM2402_WriteCMD(a);
 140   1       LCM2402_WriteData(t);
 141   1      }
 142          //=================================AT24C02模块驱动=========================================//
 143          //应用举例//
 144          //AT24C02_Write1Byte(0x02,0xaa);         向AT24C02的地址0x02写入0xaa
 145          //i = AT24C02_Read1Byte(0x02);           从AT24C02的地址0x02读出数据给变量i
 146          /*******************************************************************************************/
 147          #define AT24C02_WriteDeviceAddress 0xa0  /* 定义器件在I2C总线中的地址 */
 148          #define AT24C02_ReadDeviceAddress 0xa1
 149          sbit SCL=P2^1;      /* 定义位变量 */     // I2C总线的时钟信号
 150          sbit SDA=P2^2;                           // I2C总线的数据信号
 151          #define TRUE 1
 152          #define FALSE 0
 153          #define I2C_DelayTime 60                 // 不要小于50,否则可能造成时序混乱
 154          /********************************************************************************************
 155          * 函数名称:I2C_Delay()
 156          * 功    能:I2C总线软件延时
 157          * 入口参数:count    延时参数,值越大,延时越长
 158          * 出口参数:无
 159          ********************************************************************************************/
 160          void I2C_Delay(uint16 count)
 161          {
 162   1       while(count!=0)
 163   1       count--;
 164   1      }
 165          /********************************************************************************************
 166          * 函数名称:I2C_Start()
 167          * 功    能:启动I2C总线
 168          * 入口参数:无
 169          * 出口参数:无
 170          ********************************************************************************************/
 171          void I2C_Start(void)
 172          {
 173   1       SDA=1;
 174   1       SCL=1;
 175   1       I2C_Delay(I2C_DelayTime);
 176   1       SDA=0;
 177   1       I2C_Delay(I2C_DelayTime);
 178   1       SCL=0;
 179   1       I2C_Delay(I2C_DelayTime);
C51 COMPILER V8.05a   2402TEST                                                             07/02/2008 20:45:43 PAGE 4   

 180   1      }
 181          /********************************************************************************************
 182          * 函数名称:I2C_Stop()
 183          * 功    能:终止I2C总线
 184          * 入口参数:无
 185          * 出口参数:无
 186          ********************************************************************************************/
 187          void I2C_Stop(void)
 188          {
 189   1       SDA=0;
 190   1       SCL=1;
 191   1       I2C_Delay(I2C_DelayTime);
 192   1       SDA=1;
 193   1       I2C_Delay(I2C_DelayTime);
 194   1       SCL=0;
 195   1       I2C_Delay(I2C_DelayTime);
 196   1      }
 197          /********************************************************************************************
 198          * 函数名称:I2C_Send_Bit_0()
 199          * 功    能:发送比特0
 200          * 入口参数:无
 201          * 出口参数:无
 202          ********************************************************************************************/
 203          void I2C_Send_Bit_0(void)
 204          {
 205   1       SDA=0;
 206   1       SCL=1;
 207   1       I2C_Delay(I2C_DelayTime);
 208   1       SCL=0;
 209   1       I2C_Delay(I2C_DelayTime);
 210   1      }
 211          /********************************************************************************************
 212          * 函数名称:I2C_Send_Bit_1()
 213          * 功    能:发送比特1
 214          * 入口参数:无
 215          * 出口参数:无
 216          ********************************************************************************************/
 217          void I2C_Send_Bit_1(void)
 218          {
 219   1       SDA=1;
 220   1       SCL=1;
 221   1       I2C_Delay(I2C_DelayTime);
 222   1       SCL=0;
 223   1       I2C_Delay(I2C_DelayTime);
 224   1      }
 225          /********************************************************************************************
 226          * 函数名称:I2C_Check_Ack()
 227          * 功    能:发送完一个字节后检验设备的应答信号
 228          * 入口参数:无
 229          * 出口参数:返回值为True,成功
 230          *           返回值为False,失败
 231          ********************************************************************************************/
 232          bit I2C_Check_Ack(void)
 233          {
 234   1       SDA=1;
 235   1       SCL=1;
 236   1       I2C_Delay(I2C_DelayTime/2);
 237   1       F0=SDA;
 238   1       I2C_Delay(I2C_DelayTime/2);
 239   1       SCL=0;
 240   1       I2C_Delay(I2C_DelayTime);
 241   1       if(F0==1)
C51 COMPILER V8.05a   2402TEST                                                             07/02/2008 20:45:43 PAGE 5   

 242   1       return FALSE;
 243   1       return TRUE;
 244   1      }
 245          /********************************************************************************************
 246          * 函数名称:I2C_Write8Bit()
 247          * 功    能:向I2C总线写入8bit数据
 248          * 入口参数:I2C_data     将要写入I2C总线的8bit数据
 249          * 出口参数:无
 250          ********************************************************************************************/
 251          void I2C_Write8Bit(uint8 I2C_data)reentrant
 252          {
 253   1       uint8 i;
 254   1       for(i=0;i<8;i++)
 255   1       {

⌨️ 快捷键说明

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