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

📄 2402test.lst

📁 基于单片机和液晶2402的数字钟     包含电路图及源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V6.12  2402TEST                                                               08/29/2007 22:42:54 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 2402TEST
OBJECT MODULE PLACED IN 2402test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 2402test.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

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

  56          /********************************************************************************************[底层协议]
  57          * 函数名称:DelayS()	
  58          * 功    能:延时
  59          *********************************************************************************************/
  60          void DelayS(unsigned int a){
  61   1      	unsigned char i;
  62   1      	while( --a != 0){		
  63   2      		for(i = 0; i < 125; i++);  	//一个 ; 表示空语句,CPU空转。
  64   2      	}   				   			//i 从0加到125,CPU大概就耗时1毫秒
  65   1      }
  66          void DelayS250(void){
  67   1      	DelayS(250);
  68   1      }
  69          /********************************************************************************************[底层协议]
  70          * 函数名称:LCM2402_TestBusy()
  71          * 功    能:LCM2402测忙,若LCM2402处于忙状态,本函数将继续测忙,直到LCM2402处于非忙状态。
  72          *********************************************************************************************/
  73          void LCM2402_TestBusy(void){
  74   1         LCM2402_DB0_DB7 = 0xff;//设备读状态
  75   1         LCM2402_RS = 0;
  76   1         LCM2402_RW = 1;
  77   1         LCM2402_E = 1;
  78   1         while(LCM2402_Busy);//等待LCM不忙
  79   1         LCM2402_E = 0;//
  80   1      }
  81          /********************************************************************************************[底层协议]
  82          * 函数名称:LCM2402_WriteCMD()
  83          * 功    能:向LCM2402写命令。
  84          * 入口参数:LCM2402_command     要写入LCM2402的命令字节
  85          * 出口参数:无
  86          *********************************************************************************************/
  87          void LCM2402_WriteCMD(uint8 LCM2402_command) { 
  88   1        LCM2402_TestBusy();
  89   1        LCM2402_DB0_DB7 = LCM2402_command;
  90   1        LCM2402_RS = 0;
  91   1        LCM2402_RW = 0;
  92   1        LCM2402_E = 1;
  93   1        LCM2402_E = 0;
  94   1      }
  95          /********************************************************************************************[底层协议]
  96          * 函数名称:LCM2402_WriteData()
  97          * 功    能:向LCM2402写数据。
  98          * 入口参数:LCM2402_data     要写入LCM2402的数据字节
  99          * 出口参数:无
 100          *********************************************************************************************/
 101          void LCM2402_WriteData(uint8 LCM2402_data){ 
 102   1          LCM2402_TestBusy();
 103   1      	LCM2402_DB0_DB7 = LCM2402_data;
 104   1        LCM2402_RS = 1;
 105   1        LCM2402_RW = 0;
 106   1        LCM2402_E = 1;
 107   1        LCM2402_E = 0;
 108   1      }
 109          /********************************************************************************************
 110          * 函数名称:LCM2402_Init()
 111          * 功    能:LCM2402初始化
 112          * 入口参数:无
 113          * 出口参数:无
 114          *********************************************************************************************/
 115          void LCM2402_Init(void){
 116   1        LCM2402_WriteCMD(CMD_set82);// 显示模式设置:显示2行,每个字符为5*7个像素
 117   1        LCM2402_WriteCMD(CMD_clear);// 显示清屏
C51 COMPILER V6.12  2402TEST                                                               08/29/2007 22:42:54 PAGE 3   

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

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

 242   1        if(F0==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   1      	uint8 i;
 253   1      	for(i=0;i<8;i++){
 254   2      		if((I2C_data<<i)&0x80){
 255   3      			I2C_Send_Bit_1();
 256   3      		}
 257   2      		else{
 258   3      			I2C_Send_Bit_0();
 259   3      		}
 260   2      	}
 261   1      }
 262          /********************************************************************************************
 263          * 函数名称:I2C_Read8Bit()
 264          * 功    能:从I2C总线接收8bit数据
 265          * 入口参数:无
 266          * 出口参数:返回值为从I2C总线上接收到的8bit数据
 267          *********************************************************************************************/
 268          uint8 I2C_Read8Bit(void)reentrant{
 269   1      	uint8 I2C_data=0,i;  
 270   1      	for(i=0;i<8;i++){   
 271   2      		SDA=1;    
 272   2      		SCL=1;    
 273   2      		I2C_Delay(10);
 274   2      		F0=SDA;

⌨️ 快捷键说明

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