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

📄 main_lcd.lst

📁 这个也是51单片机的应用程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN_LCD                                                              05/09/2007 10:46:29 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN_LCD
OBJECT MODULE PLACED IN main_lcd.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE main_lcd.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************************************/ 
   2          /*                                                               */                                       
             -                         
   3          /*名称:                ds1302读写+显示程序                      */                                       
             -                                                                                                                        
             -            
   4          /*功能:           读写DS1302,通过LCD12864显示出来。            */                                       
             -             
   5          /*难度等级:                   高                                */                                       
             -                              
   6          /* 作者:                  zengrenliang                          */
   7          /* 版权:           http://www.51kaifa.com                       */
   8          /*编写日期:        2006.05.21                                   */                                       
             -                                                                                                                        
             -                                              
   9          /*****************************************************************/
  10          
  11          #include <reg52.h>
  12          #include"ds1302.h"
  13          #include  <string.h>
  14          #define uchar unsigned char
  15          
  16          /******************************引脚定义*****************************/
  17          
  18          sbit lck = P3^5;//锁存信号
  19          sbit CSA = P2^4;//又区选择
  20          sbit CSB = P2^5;//左区选择
  21          sbit RW = P2^7;//LCD片选
  22          sbit DI = P2^6;//数据/命令选择
  23          /************************LCD12864常用命令及参数定义******************/
  24          #define DISPON     0x3f
  25          #define DISPOFF    0x3e
  26          #define DISPFIRST  0xc0
  27          #define SETX       0x40
  28          #define SETY       0xb8
  29          #define LCDBUZY    0x80
  30          #define L          0x00
  31          #define R          0x40
  32          #define LIMIT      0x80
  33          
  34          /*********************************全局变量***************************/
  35          uchar  cbyte, statu;
  36          bit xy;
  37          
  38          /***********************************函数声明**************************/
  39          void initial();
  40          void uDelay(uchar MS);
  41          void WrL(uchar x);
  42          void WrR(uchar x);
  43          void Lcmcls(void);
  44          void LcdbuzyR(void);
  45          void LcdbuzyL(void);
  46          void delay1s(void);
  47          void Lcminit (void);
  48          void Putpicture(void);
C51 COMPILER V7.06   MAIN_LCD                                                              05/09/2007 10:46:29 PAGE 2   

  49          void readtemp(void); 
  50          void delay(unsigned int time);
  51          void VtoH8x16change(uchar *hzbuf);
  52          void Puthalf(uchar *strch,uchar row,uchar col);
  53          void Wrdata(uchar x,uchar row,uchar col);
  54          void Puthz(uchar *str,uchar row,uchar col);
  55          void v_Get1302(uchar ucCurtime[]);
  56          void Locatexy(uchar row,uchar col);
  57          void v_Set1302(uchar *pSecDa) ;
  58          void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
  59          void vWrite16x16Chinese(uchar *ch,uchar row,uchar col,bit flag);
  60          void vWrite8x16String(uchar  *str,uchar col, uchar row, bit flag);
  61          
  62          
  63          extern uchar  code  picture[];//以图片的形式显示  "年 月 日,时 分 秒"
  64          extern uchar  code  char_Table[95][16];//字符点阵码表
  65          
  66          uchar  buffer[8];//DS1302的数据存储区
  67          uchar  code  *XingQi[7] = //星期
  68                           {   
  69                                  "Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday","Sunday"
  70                            };
  71          
  72          
  73          /*******************************主程序******************************/
  74          void main(void)
  75          {  
  76   1         uchar  disp;
  77   1         uchar temp,copymt;
  78   1      
  79   1          copymt = 0xff;
  80   1          buffer[0]=00;//秒
  81   1          buffer[1]=30;//分
  82   1          buffer[2]=12;//时
  83   1          buffer[3]=10;//日
  84   1          buffer[4]=1;//月
  85   1          buffer[5]=02;//星期
  86   1          buffer[6]=07;//年
  87   1          initial();
  88   1          Lcminit();//初始化LCD
  89   1          v_Set1302(&buffer);//设置和启动DS1302
  90   1          Putpicture();//显示 "时 分 秒 ,年 月 日"
  91   1          while(1)
  92   1           { 
  93   2             v_Get1302(&buffer); //读取DS1302 
  94   2             delay(10000); 
  95   2             if(buffer[0]!=copymt){//每秒刷新一次   
  96   3               copymt = buffer[0];
  97   3               disp = buffer[0] % 10 + '0';
  98   3               vWrite8x16Character(&char_Table[disp-0x20][0],0,92,0);//秒个位
  99   3               temp =buffer[0];// & 0x7f;
 100   3               temp = temp/10;
 101   3               disp = temp%10 + '0';
 102   3               vWrite8x16Character(&char_Table[disp-0x20][0],0,84,0);//秒十位
 103   3      
 104   3               disp = buffer[1] % 10 + '0';
 105   3               vWrite8x16Character(&char_Table[disp-0x20][0],0,52,0);//分个位
 106   3               temp =buffer[1];// & 0x7f;
 107   3               temp = temp/10;
 108   3               disp = temp%10 + '0';
 109   3               vWrite8x16Character(&char_Table[disp-0x20][0],0,44,0);//分十位
 110   3      
C51 COMPILER V7.06   MAIN_LCD                                                              05/09/2007 10:46:29 PAGE 3   

 111   3               disp = buffer[2] % 10 + '0';
 112   3               vWrite8x16Character(&char_Table[disp-0x20][0],0,12,0);//时个位
 113   3               temp =buffer[2];// & 0x7f;
 114   3               temp = temp/10;
 115   3               disp = temp%10 + '0';
 116   3               vWrite8x16Character(&char_Table[disp-0x20][0],0,4,0);//时十位
 117   3             
 118   3               vWrite8x16String(XingQi[buffer[5]] ,3, 40,0);//显示星期
 119   3             
 120   3               disp = buffer[3] % 10 + '0';
 121   3               vWrite8x16Character(&char_Table[disp-0x20][0],6,96,0);//日个位
 122   3               temp =buffer[3];// & 0x7f;
 123   3               temp = temp/10;
 124   3               disp = temp%10 + '0';
 125   3               vWrite8x16Character(&char_Table[disp-0x20][0],6,88,0);//日十位
 126   3      
 127   3      
 128   3               disp = buffer[4] % 10 + '0';
 129   3               vWrite8x16Character(&char_Table[disp-0x20][0],6,64,0);//月个位
 130   3               temp =buffer[4];// & 0x7f;
 131   3               temp = temp/10;
 132   3               disp = temp%10 + '0';
 133   3               vWrite8x16Character(&char_Table[disp-0x20][0],6,56,0);//月十位
 134   3      
 135   3               disp = buffer[6] % 10 + '0';
 136   3               vWrite8x16Character(&char_Table[disp-0x20][0],6,32,0);//年个位
 137   3               temp =buffer[6]/* & 0x7f*/;
 138   3               temp = temp/10;
 139   3               disp = temp%10 + '0';
 140   3               vWrite8x16Character(&char_Table[disp-0x20][0],6,24,0);//年十位
 141   3              }
 142   2            }
 143   1      }
 144          
 145          
 146          
 147          
 148          /*********************************微秒级延时******************************/
 149          void delay(unsigned int  time)
 150          { unsigned int i;
 151   1          for(i=0;i<time;i++);
 152   1       }
 153          
 154          
 155          //*********************************初始化LCD*******************************/
 156          
 157          void Lcminit (void)
 158          { 
 159   1          cbyte=DISPOFF;
 160   1          WrL(cbyte);
 161   1          WrR(cbyte);
 162   1          cbyte=DISPON;
 163   1          WrL(cbyte);
 164   1          WrR(cbyte);
 165   1          cbyte=DISPFIRST;
 166   1          WrL(cbyte);
 167   1          WrR(cbyte);
 168   1          Lcmcls();
 169   1          Locatexy(0,0);
 170   1      }
 171          
 172          
C51 COMPILER V7.06   MAIN_LCD                                                              05/09/2007 10:46:29 PAGE 4   

 173          /***********************************LCD清屏********************************/
 174          void Lcmcls(void)
 175          { uchar  i,j;
 176   1          for(i=0;i<8;i++){
 177   2            delay(6);
 178   2              for(j=0;j<LIMIT;j++){
 179   3                delay(6);
 180   3                Wrdata(0x0,i,j);
 181   3               }
 182   2           }
 183   1      }
 184          
 185          /*****************写左区******************/
 186          
 187          void WrL(uchar x)
 188          {
 189   1         
 190   1         RW = 1;//RW=1(读)
 191   1         CSA = 0;
 192   1         CSB = 1;
 193   1         DI = 0;//命令操作
 194   1         lck = 0;
 195   1         P1 = 0xff;//ELCD=1,使能LCD
 196   1         lck = 1;
 197   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环检测
 198   1         lck = 0;
 199   1         P1 = 0xef;//ELCD=1,使能LCD
 200   1         lck = 1;
 201   1         RW = 0;//RW=0(写)
 202   1         P0 = x;   //数据送到P0口
 203   1      
 204   1         CSA = 0;
 205   1         CSB = 1;
 206   1         DI = 0;
 207   1      
 208   1         lck = 0;
 209   1         P1 = 0xff;//ELCD=1,使能LCD,把数据打入LCD
 210   1         lck = 1;
 211   1         delay(3);  
 212   1         lck = 0;
 213   1         P1 = 0xef;//ELCD=0
 214   1         lck = 1;
 215   1      
 216   1      }
 217          
 218          /**************写右区**************/
 219          void WrR(uchar data x)
 220          {
 221   1         RW = 1;//R/W=1读
 222   1         CSA = 1;
 223   1         CSB = 0;
 224   1         DI = 0;//命令操作
 225   1         lck = 0;
 226   1         P1 = 0xff;
 227   1         lck = 1;
 228   1       //EN = 1;//使能LCD
 229   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
 230   1         lck = 0;
 231   1         P1 = 0xe;
 232   1         lck = 1;
 233   1         RW = 0;//RW = 0写
 234   1      

⌨️ 快捷键说明

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