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

📄 main.lst

📁 用51控制的电子时钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.12  MAIN                                                                   11/04/2007 22:41:58 PAGE 1   


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

stmt level    source

   1          
   2          /*********************************************************************************************
   3          		出品		DoYoung.net 电子技术 & DY小卖店
   4          		程序名		DY12864LCC电子钟程序(使用DY12864CBL显示屏)
   5          		作者		杜 洋
   6          		日期		2007-11-03
   7          		参数		AT89S52(MCS-51)	12MHZ
   8          /*********************************************************************************************
   9          //更新日志
  10          
  11          				2007-11-03 整理完成并发布。
  12          				2007-11-02 修改软件上的几处BUG。
  13          				2007-11-01 将LCD驱动程序改为并口LCD驱动方式。
  14          		V2.1	2007-10-31 升级硬件电路。 
  15          
  16          				2007-02-10 修改为正式发布版。
  17          		V1.11	2007-01-26 用每分钟刷新数据,防止显示乱码。
  18          
  19          				2006-11-30 全部制作完成! 
  20          				2006-11-29 时钟主显示部分完成。
  21          				2006-11-28 时钟驱动程序植入完成。
  22          				2006-11-27 LCM驱动程序植入完成。
  23          		V1.0	2006-11-26 硬件制作完成。
  24          		
  25          /*********************************************************************************************
  26          //程序说明
  27              本程序是DY12864CBL中文液晶显示屏模块的应用程序
  28          	本程序须配合《DY12864CBL技术手册》一同参考使用
  29          	仔细了解程序中的函数以在开发时方便调用
  30          	DoYoung.net 电子技术 保留版权 
  31          	欢迎莅临 http://doyoung.net/
  32          /*********************************************************************************************/
  33          
  34          //程序部分开始//
  35          /****************************************************************************/
  36          //头文件
  37          #include <AT89X52.h>
  38          #include <string.h>
  39          /*****************************************************************************/
  40          //灯与扬声器定义
  41          sbit	led_back =  P2^0;//背光控制(V2.1程序中加入了背光控制的硬件电路)
  42          sbit	led_b =  P2^7;//秒闪烁灯
  43          sbit	led_r =  P3^4;
  44          sbit	led_g1 = P3^3;//(P3.3没有使用,V2.1程序中没有用到g1~4)
  45          sbit	led_g2 = P3^3;
  46          sbit	led_g3 = P3^3;
  47          sbit	led_g4 = P3^3;
  48          sbit	beep   = P2^2;//扬声器(V2.1程序中将V1.1程序中的蜂鸣器改为扬声器)
  49          /*****************************************************************************/
  50          //温度传感器定义
  51          sbit DQ = P2 ^ 5;//ds18B20
  52          /*****************************************************************************/
  53          //键盘引脚定义
  54          sbit KEY_1 = P3^6;	 //左上
  55          sbit KEY_2 = P3^7;	 //左下
C51 COMPILER V6.12  MAIN                                                                   11/04/2007 22:41:58 PAGE 2   

  56          sbit KEY_3 = P3^1;	 //右上
  57          sbit KEY_4 = P3^0;	 //右下
  58          sbit KEY_I = P3^2;	 //常0(V2.1电路中无效)
  59          /****************************************************************************/
  60          //LCD接口定义
  61          sbit RS = P1^0;//模式位,为0输入指令,为1输入数据
  62          sbit RW = P1^1;//读写位,为0读,为1写
  63          sbit E = P1^2;//使能位
  64          #define Lcd_Bus P0 //数据总线
  65          /*****************************************************************************/
  66          //定义DS1302时钟接口
  67          sbit clock_clk = P0 ^ 7;//ds1302_clk(时钟线)
  68          sbit clock_dat = P0 ^ 6;//ds1302_dat(数据线)
  69          sbit clock_Rst = P2 ^ 1;//ds1302_Rst(复位线)
  70          /*****************************************************************************/
  71          //定义累加器A中的各位
  72          sbit a0   = ACC ^ 0;
  73          sbit a1   = ACC ^ 1;
  74          sbit a2   = ACC ^ 2;
  75          sbit a3   = ACC ^ 3;
  76          sbit a4   = ACC ^ 4;
  77          sbit a5   = ACC ^ 5;
  78          sbit a6   = ACC ^ 6;
  79          sbit a7   = ACC ^ 7;
  80          /****************************************************************************/
  81          //定义全局变量
  82          unsigned char yy,mo,dd,xq,hh,mm,ss;//定义时间映射全局变量(专用寄存器)
  83          bit w = 0; //调时标志位
  84          static unsigned char menu = 0;//定义静态小时更新用数据变量
  85          static unsigned char keys = 0;//定义静态小时更新用数据变量
  86          static unsigned char timecount = 0;//定义静态软件计数器变量
  87          /****************************************************************************/
  88          void DelayM(unsigned int a){//延时函数 1MS/次	
  89   1      		unsigned char i;
  90   1      		while( --a != 0){		
  91   2      			for(i = 0; i < 125; i++);  //一个 ; 表示空语句,CPU空转。
  92   2      		}   				   //i 从0加到125,CPU大概就耗时1毫秒
  93   1      }
  94          /****************************************************************************/
  95          
  96          /******************************************************************************/
  97          //LCD驱动(DY12864CBL液晶显示屏并口驱动程序)
  98          /******************************************************************************/
  99          void chk_busy(){//检查忙位(底层)
 100   1         RS=0;
 101   1         RW=1;
 102   1         E=1;
 103   1         Lcd_Bus=0xff;
 104   1         while((Lcd_Bus&0x80)==0x80);
 105   1         E=0;
 106   1      }
 107          /******************************************************************************/
 108          void write_com(unsigned char cmdcode){//写命令到LCD(底层)
 109   1      	chk_busy();
 110   1      	RS=0;
 111   1      	RW=0;
 112   1      	E=1;
 113   1      	Lcd_Bus=cmdcode;
 114   1      	E=0;
 115   1      }
 116          /******************************************************************************/
 117          void write_data(unsigned char Dispdata){	 //写数据到LCD(底层)
C51 COMPILER V6.12  MAIN                                                                   11/04/2007 22:41:58 PAGE 3   

 118   1      	chk_busy();
 119   1      	RS=1;
 120   1      	RW=0;
 121   1      	E=1;
 122   1      	Lcd_Bus=Dispdata;
 123   1      	E=0;
 124   1      }
 125          /******************************************************************************/
 126          void lcm_init(){//初始化LCD屏(被调用层)
 127   1         write_com(0x30);       //选择8bit数据流
 128   1         write_com(0x0c);       //开显示(无游标、不反白)
 129   1         write_com(0x01);       //清除显示,并且设定地址指针为00H
 130   1      }
 131          /*****************************************************************************/
 132          void lcm_w_word(unsigned char *s){//向LCM发送一个字符串,长度64字符之内。(被调用层)
 133   1      	while(*s>0){					//应用:lcm_w_word("您好!");
 134   2          	write_data(*s); 
 135   2          	s++;
 136   2         }
 137   1      }
 138          /******************************************************************************/
 139          void lcm_w_test(bit i,unsigned char word){//写指令或数据(被调用层)
 140   1      	if(i == 0){
 141   2      		write_com(word);//写指令或数据(0,指令)
 142   2      	}else{
 143   2      		write_data(word);//写指令或数据(1,数据)
 144   2      	}
 145   1      }
 146          /******************************************************************************/
 147          void lcm_clr(void){//清屏函数
 148   1      	lcm_w_test(0,0x01);	
 149   1      }
 150          /******************************************************************************/
 151          
 152          /******************************************************************************/
 153          //公历节日数据库表
 154          /******************************************************************************/
 155          void days (viod) {	  //公历节日数据库
 156   1      		lcm_w_test(0,0x80);//在屏幕第一行
 157   1      		lcm_w_word("[Dis]      [Set]");//显示菜单操作注释
 158   1      		lcm_w_test(0,0x98);//在屏幕第四行
 159   1      //												----|----------------|
 160   1      		if ( mo == 0x01 && dd == 0x01 ){ lcm_w_word("Happy New Year!!"); }//1月
 161   1      		if ( mo == 0x01 && dd == 0x28 ){ lcm_w_word("  世界麻风日    "); }
 162   1      		
 163   1      		if ( mo == 0x02 && dd == 0x02 ){ lcm_w_word("  世界湿地日    "); }//2月
 164   1      		if ( mo == 0x02 && dd == 0x13 ){ lcm_w_word("  明天情人节了  "); }		
 165   1      		if ( mo == 0x02 && dd == 0x14 ){ lcm_w_word("  今天是情人节  "); }
 166   1      				
 167   1      		if ( mo == 0x03 && dd == 0x01 ){ lcm_w_word("  国际海豹日    "); }//3月		
 168   1      		if ( mo == 0x03 && dd == 0x03 ){ lcm_w_word("  全国爱耳日    "); }		
 169   1      		if ( mo == 0x03 && dd == 0x08 ){ lcm_w_word("   3.8妇女节    "); }		
 170   1      		if ( mo == 0x03 && dd == 0x12 ){ lcm_w_word("    植树节      "); }		
 171   1      		if ( mo == 0x03 && dd == 0x14 ){ lcm_w_word("  国际警察日    "); }		
 172   1      		if ( mo == 0x03 && dd == 0x15 ){ lcm_w_word("  消费者权益日  "); }		
 173   1      		if ( mo == 0x03 && dd == 0x17 ){ lcm_w_word("  国际航海日    "); }		
 174   1      		if ( mo == 0x03 && dd == 0x21 ){ lcm_w_word("  世界森林日    "); }		
 175   1      		if ( mo == 0x03 && dd == 0x22 ){ lcm_w_word("    世界水日    "); }		
 176   1      		if ( mo == 0x03 && dd == 0x23 ){ lcm_w_word("  世界气象日    "); }		
 177   1      		if ( mo == 0x03 && dd == 0x24 ){ lcm_w_word("世界防治结核病日"); }
 178   1      				
 179   1      		if ( mo == 0x04 && dd == 0x01 ){ lcm_w_word("愚人节  小心上当"); }//4		
C51 COMPILER V6.12  MAIN                                                                   11/04/2007 22:41:58 PAGE 4   

 180   1      		if ( mo == 0x04 && dd == 0x07 ){ lcm_w_word("  世界卫生日    "); }		
 181   1      		if ( mo == 0x04 && dd == 0x08 ){ lcm_w_word("    复活节      "); }		
 182   1      		if ( mo == 0x04 && dd == 0x13 ){ lcm_w_word("  黑色星期五    "); }
 183   1      				
 184   1      		if ( mo == 0x05 && dd == 0x01 ){ lcm_w_word("  劳动节  放假  "); }//5		
 185   1      		if ( mo == 0x05 && dd == 0x04 ){ lcm_w_word("    青年节      "); }		
 186   1      		if ( mo == 0x05 && dd == 0x08 ){ lcm_w_word("  世界红十字日  "); }		
 187   1      		if ( mo == 0x05 && dd == 0x12 ){ lcm_w_word("  国际护士节    "); }		
 188   1      		if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word("近日注意母亲节  "); }		
 189   1      		if ( mo == 0x05 && dd == 0x15 ){ lcm_w_word("  国际家庭日    "); }
 190   1      		if ( mo == 0x05 && dd == 0x31 ){ lcm_w_word("  世界无烟日    "); }		
 191   1      				
 192   1      		if ( mo == 0x06 && dd == 0x01 ){ lcm_w_word("  国际儿童节    "); }//6
 193   1      		if ( mo == 0x06 && dd == 0x05 ){ lcm_w_word("  世界环境日    "); }		
 194   1      		if ( mo == 0x06 && dd == 0x26 ){ lcm_w_word("  国际禁毒日    "); }		
 195   1      		if ( mo == 0x06 && dd == 0x06 ){ lcm_w_word("  全国爱眼日    "); }		
 196   1      		if ( mo == 0x06 && dd == 0x13 ){ lcm_w_word("近日注意父亲节  "); }
 197   1      		if ( mo == 0x06 && dd == 0x15 ){ lcm_w_word("近日注意父亲节  "); }
 198   1      				
 199   1      		if ( mo == 0x07 && dd == 0x01 ){ lcm_w_word("香港回归记念日  "); }//7
 200   1      		if ( mo == 0x07 && dd == 0x07 ){ lcm_w_word("抗日战争记念日  "); }
 201   1      		if ( mo == 0x07 && dd == 0x11 ){ lcm_w_word("  世界人口日    "); }
 202   1      
 203   1      		if ( mo == 0x08 && dd == 0x01 ){ lcm_w_word("  八一建军节    "); }//8
 204   1      		if ( mo == 0x08 && dd == 0x08 ){ lcm_w_word("  中国男子节    "); }
 205   1      		if ( mo == 0x08 && dd == 0x15 ){ lcm_w_word("抗战胜利记念日  "); }
 206   1      
 207   1      		if ( mo == 0x09 && dd == 0x10 ){ lcm_w_word("  中国教师节    "); }//9
 208   1      		if ( mo == 0x09 && dd == 0x18 ){ lcm_w_word("九·一八事变记念"); }
 209   1      		if ( mo == 0x09 && dd == 0x20 ){ lcm_w_word("  国际爱牙日    "); }
 210   1      		if ( mo == 0x09 && dd == 0x27 ){ lcm_w_word("  世界旅游日    "); }
 211   1      
 212   1      		if ( mo == 0x10 && dd == 0x01 ){ lcm_w_word("  中国国庆节    "); }//10
 213   1      		if ( mo == 0x10 && dd == 0x04 ){ lcm_w_word("  世界动物日    "); }
 214   1      		if ( mo == 0x10 && dd == 0x24 ){ lcm_w_word("    联合国日    "); }
 215   1      		if ( mo == 0x10 && dd == 0x12 ){ lcm_w_word("明天国际教师节  "); }
 216   1      		if ( mo == 0x10 && dd == 0x13 ){ lcm_w_word("  国际教师节    "); }
 217   1      
 218   1      		if ( mo == 0x11 && dd == 0x10 ){ lcm_w_word("  世界青年节    "); }//11
 219   1      		if ( mo == 0x11 && dd == 0x17 ){ lcm_w_word("  世界学生节    "); }
 220   1      
 221   1      		if ( mo == 0x12 && dd == 0x01 ){ lcm_w_word("  世界艾滋病日  "); }//12
 222   1      		if ( mo == 0x12 && dd == 0x23 ){ lcm_w_word("  明晚平安夜    "); }
 223   1      		if ( mo == 0x12 && dd == 0x24 ){ lcm_w_word("  今晚平安夜    "); }
 224   1      		if ( mo == 0x12 && dd == 0x25 ){ lcm_w_word("    圣诞快乐    "); }
 225   1      		if ( mo == 0x12 && dd == 0x31 ){ lcm_w_word("    明日新年    "); }
 226   1      
 227   1      		else{//非节日时显示时晨信息 
 228   2      			if ( hh >= 0x04 && hh <  0x06 ){ lcm_w_word("★★__▲▲__凌晨"); }
 229   2      			if ( hh >= 0x06 && hh <  0x08 ){ lcm_w_word("☆○__▲△__早晨"); }
 230   2      			if ( hh >= 0x08 && hh <  0x12 ){ lcm_w_word("__●__▲▲__上午"); }
 231   2      			if ( hh == 0x12)               { lcm_w_word("____▲●▲__中午"); }
 232   2      			if ( hh >= 0x13 && hh <  0x18 ){ lcm_w_word("__▲▲__●__下午"); }
 233   2      			if ( hh >= 0x18 && hh <  0x22 ){ lcm_w_word("△▲__●☆__晚上"); }
 234   2      			if ( hh >= 0x22 && hh <= 0x23 ){ lcm_w_word("△▲__★☆__夜里"); }
 235   2      			if ( hh >= 0x00 && hh <  0x04 ){ lcm_w_word("__★▲▲★__深夜"); }
 236   2      		}
 237   1      }
 238          /******************************************************************************/
 239          
 240          /******************************************************************************/

⌨️ 快捷键说明

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