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

📄 main.lst

📁 十几个proteus的仿真实例
💻 LST
字号:
C51 COMPILER V6.12  MAIN                                                                   11/22/2005 20:50:10 PAGE 1   


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

stmt level    source

   1          #include<reg51.h>
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          sbit rs=P3^3;
   6          sbit rw=P3^4;
   7          sbit en=P3^5;
   8          sbit bflag=P2^7;
   9          sbit reset=P3^0;
  10          sbit sclk=P3^1;
  11          sbit io=P3^2;
  12          uchar str1[]="date of today is:";
  13          //uchar str2[]="i will kill you lj";
  14          uchar init[]={0x00,0x00,0x21,0x21,0x10,0x01,0x04};//秒,分,时,日,月,星期,年
  15          //
  16          void delay()
  17          	{
  18   1      	uchar j;
  19   1       	for(j=250;j>0;j--);
  20   1       	}
  21          //-------------------液晶模块-----------------//
  22          void en_toggle()
  23          	{
  24   1        	en=0;
  25   1        //_nop_();
  26   1       	delay();
  27   1        	en=1;
  28   1       	delay();
  29   1       // _nop_();
  30   1        	en=0;
  31   1      	}             //注意必须加延时,否则会出问题的
  32          void is_ready()
  33          	{
  34   1         P2=0x00;//设置为输入口
  35   1         rs=0;
  36   1         rw=1;
  37   1         en=1;
  38   1         while(bflag);
  39   1        	en=0;
  40   1      	}
  41          
  42          void write_cmd(uchar cmd)
  43          {
  44   1        is_ready();
  45   1        rs=0;
  46   1        rw=0;
  47   1        P2=cmd;
  48   1        en_toggle();
  49   1      }
  50          void write_data(uchar indata)
  51          {
  52   1        is_ready();
  53   1        rs=1;
  54   1        rw=0;
  55   1        P2=indata;
C51 COMPILER V6.12  MAIN                                                                   11/22/2005 20:50:10 PAGE 2   

  56   1        en_toggle();
  57   1        _nop_();
  58   1      }
  59          void write_str(uchar addr,uchar *p)
  60          {
  61   1       uchar i; 
  62   1       write_cmd(addr);
  63   1       while(p[i]!='\0')
  64   1       {write_data(p[i]);
  65   2        i++;
  66   2       }
  67   1      }
  68          void write_position(uchar row,uchar col)
  69          {uchar p;
  70   1       if(row==1)
  71   1       {p=0x80+col-1;
  72   2        write_cmd(p);}
  73   1       else
  74   1       {p=0xc0+col-1;
  75   2        write_cmd(p);
  76   2         }
  77   1      }
  78          void init_lcd()
  79          {
  80   1       write_cmd(0x38);
  81   1       write_cmd(0x0c);
  82   1       write_cmd(0x06);
  83   1       write_cmd(0x01);//清屏幕
  84   1       delay();
  85   1      }
  86          //------------液晶模块结束---------------------
  87          
  88          //-----------ds1302模块开始-------------------
  89          //注意点:sclk的上升沿输入数据,sclk的下跳沿输出数据
  90          //读写时都是从第0位开始
  91          void write_byte(uchar inbyte)
  92          	{
  93   1       	uchar i;
  94   1       	for(i=8;i>0;i--)
  95   1       		{
  96   2        		sclk=0;
  97   2       		if(inbyte&0x01)
  98   2        			io=1;
  99   2        		else
 100   2        			io=0; 
 101   2        		sclk=1;
 102   2        		_nop_();
 103   2        		inbyte=inbyte>>1;
 104   2       		}
 105   1      	}
 106          
 107          uchar read_byte() //sclk的下跳沿读数据
 108          {
 109   1       uchar i,temp=0; 
 110   1       io=1;          //设置为输入口
 111   1       for(i=7;i>0;i--)
 112   1       	{
 113   2      	sclk=0;
 114   2      	if(io==1)
 115   2         		temp=temp|0x80;
 116   2         	else
 117   2         		temp=temp&0x7f;
C51 COMPILER V6.12  MAIN                                                                   11/22/2005 20:50:10 PAGE 3   

 118   2         sclk=1;
 119   2         temp=temp>>1;
 120   2       	}
 121   1       //sclk=0;
 122   1       return (temp);
 123   1      }
 124          //----------往ds1302的某个地址写入数据-------------
 125          void write_ds1302(uchar cmd,uchar indata)
 126          {
 127   1        reset=1;
 128   1        write_byte(cmd);
 129   1        write_byte(indata);
 130   1        reset=0;
 131   1        sclk=0;
 132   1      }
 133          //----------读ds1302某地址的的数据-----------------
 134          uchar read_ds1302(uchar addr)
 135          {
 136   1       uchar backdata;
 137   1       reset=1;
 138   1       write_byte(addr);
 139   1       backdata=read_byte();//先写地址,然后读数据
 140   1       reset=0;
 141   1       //sclk=0;
 142   1       return (backdata);
 143   1      }
 144          //------------设置初始时间-------------------
 145          void set_ds1302(uchar addr,uchar *p,uchar n)//写入n个数据
 146          	{
 147   1        	write_ds1302(0x8e,0x00);//写控制字,允许写操作
 148   1        	for(;n>0;n--)
 149   1        		{
 150   2      		write_ds1302(addr,*p);
 151   2         		p++;
 152   2         		addr=addr+2;
 153   2        		}
 154   1        	write_ds1302(0x8e,0x80);//写保护,不允许写
 155   1      	}
 156          //----------- 读取当前时间-------------------
 157          void read_nowtime(uchar addr,uchar *p,uchar n)
 158          {
 159   1       for(;n>0;n--)
 160   1       {
 161   2         *p=read_ds1302(addr);
 162   2         p++;
 163   2         addr=addr+2;
 164   2       } 		   
 165   1      }
 166          void init_ds1302()
 167          	{
 168   1      	reset=0;
 169   1        	sclk=0;
 170   1        	write_ds1302(0x80,0x00);//写控制字,允许写
 171   1        	write_ds1302(0x90,0x00);//禁止涡流充电 
 172   1      	}
 173          //-----------ds1302模块结束-------------------
 174          void main()
 175          	{
 176   1       	init_lcd();             //初始化LCD
 177   1      	write_str(0x80,str1);	  //液晶显示提示信息
 178   1       	init_ds1302();          //初始化ds1302
 179   1       	set_ds1302(0x80,init,7);//设置初始时间,日期,年月
C51 COMPILER V6.12  MAIN                                                                   11/22/2005 20:50:10 PAGE 4   

 180   1        	
 181   1        	while(1)
 182   1        		{
 183   2      		read_nowtime(0x81,init,7); //读出当前时间
 184   2      
 185   2         write_position(2,1);
 186   2         write_data('0'+((init[2]&0xf0)>>4));
 187   2      	
 188   2         write_position(2,2);
 189   2         write_data('0'+(init[2]&0x0f));	//读小时
 190   2      P1=init[2];//while(1);
 191   2         write_position(2,3);
 192   2         write_data(':');
 193   2      
 194   2         write_position(2,4);
 195   2         write_data('0'+((init[1]&0xf0)>>4));
 196   2        
 197   2         write_position(2,5);
 198   2         write_data('0'+(init[1]&0x0f));    //读分钟
 199   2        
 200   2         write_position(2,6);
 201   2         write_data(':');
 202   2      
 203   2         write_position(2,7);
 204   2         write_data('0'+((init[0]&0xf0)>>4));
 205   2        
 206   2         write_position(2,8);
 207   2         write_data('0'+(init[0]&0x0f));	//读秒
 208   2      		}
 209   1      	
 210   1      	}


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    470    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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