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

📄 main.lst

📁 本程序是一个液晶时钟程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 1   


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

line level    source

   1          //***********************************************************
   2          //***********12864LCD多功能液晶时钟********************         
   3          //*本系统采用4个按键,人性化的菜单显示.
   4          //主界面显示的参数:阳历,阴历干支年,星期,时分秒,闹钟,温度,公共节日,节气;
   5          //功能参数:密码,232通信输出,红外控制,阳历,阴历,读U盘;
   6          //作者:陈志伟
   7          //设计日期:2007年11月~2007年12月;
   8          //交流QQ:871993824
   9          
  10          /***************************************************************/
  11          #include        <sfr.h>
  12          #include    <Calendar.h>
  13          //typedef unsigned char uchar;          //自定义关键字
  14          //typedef unsigned int  uint;
  15          //LCD接口定义
  16          sbit BUSY_FLAG=P2^7;             //液晶模块忙标志
  17          sbit RS =P0^0;               //模式位,为0输入指令,为1输入数据
  18          sbit RW =P0^1;               //读写位,为0读,为1写
  19          sbit E =P0^2;                //使能位
  20          sbit PSB=P0^3;
  21          #define LCD_DATA P2                  //液晶数据口
  22          //LCD指令集定义
  23          #define ClearDisplay    0x01                                    //清显示指令
  24          #define EntryModeSet    0x06                                    //设置输入模式
  25          #define DisplayOnCtrl   0x0c                                    //设置开显控制
  26          #define FunctionSetB    0x30                                    //功能设定(基本指令)
  27          #define FunctionSetE    0x34                                    //功能设定(扩充指令)
  28          #define FuncDrawOn              0x36                                    //设置绘图功能
  29          //内存定义
  30          uchar lcdPosX, lcdPosY;                                                 //X,Y坐标
  31          uchar halfScr, halfLineCnt, basicBlock;                 //半屏,半屏行数,N*8块
  32          uchar yy,mo,dd,xq,hh,mm,ss;         //定义时间映射全局变量
  33          uchar keys,state,cishu;                                 //键值keys,状态state,次数time
  34          bit setting;
  35          //定义累加器A中的各位
  36          sbit a7   = ACC ^ 7;
  37          //键盘引脚定义
  38          sbit key_1 =P1^0;                 //功能:设置兼返回
  39          sbit key_2 =P1^1;                 //功能:调整位加1
  40          sbit key_3 =P1^2;                 //功能:指向下一项
  41          sbit key_4 =P1^3;                 //功能:确定当前操作
  42          //定义DS1302时钟接口
  43          sbit clock_clk = P3^1;        //ds1302_clk(时钟线)
  44          sbit clock_dat = P3^0;        //ds1302_dat(数据线)
  45          sbit clock_Rst = P1^4;        //ds1302_Rst(复位线
  46          //温度传感器定义
  47          sbit DQ = P1^5;             //ds18B20)
  48          //灯与扬声器定义
  49          sbit    led_secd =P3^3;      //秒闪烁灯
  50          sbit    BEEP     =P1^6;      //扬声器
  51          //表格2的格式:键码+次态+执行模块
  52          uchar fun_zero[4]={1,1,0,0};
  53          uchar fun_one[7]={1,1,0,0};
  54          /***************************************************************/
  55          //功能:延时ms毫秒
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 2   

  56          void delayMs (uchar ms) 
  57          {  uchar i;
  58   1         while (--ms)
  59   1              { for(i=0; i<125; i++);}
  60   1      }
  61          /***************************************************************/
  62          //功能:蜂鸣器响一声
  63          void beepBl (void)
  64          {
  65   1              uchar i;
  66   1              for(i=0; i<100; i++)
  67   1              { delayMs(2);BEEP = !BEEP; }
  68   1              BEEP = 1;
  69   1      }
  70          /***************************************************************/
  71          //功能:延时sec秒
  72          void delaySec (uchar sec) 
  73          {
  74   1              uchar i;
  75   1              while(--sec)
  76   1              { for(i=0; i<200; i++)
  77   2                      {delayMs(6);}
  78   2              }
  79   1      }
  80          /***************************************************************/
  81          //功能:LCD检测忙信号
  82          void checkLcdBusy (void) 
  83          {       LCD_DATA = 0xff;
  84   1              RS = 0;
  85   1              RW= 1;
  86   1              E = 1;
  87   1              while (BUSY_FLAG);
  88   1              E= 0;
  89   1      }
  90          /***************************************************************/
  91          //功能:LCD写命令
  92          //输入参数:控制命令Command
  93          void lcdWriteCommand (uchar Command) 
  94          {       checkLcdBusy();
  95   1              RS = 0;
  96   1              RW = 0;
  97   1              LCD_DATA = Command;
  98   1              E = 1;
  99   1              delayMs(1);
 100   1              E = 0;
 101   1      }
 102          /***************************************************************/
 103          //功能:清除液晶屏幕
 104          void lcdClear (void) 
 105          {       lcdWriteCommand(ClearDisplay); }
 106          /***************************************************************/
 107          //功能:液晶初始化
 108          void lcdInit (void)
 109          {       lcdWriteCommand(FunctionSetE);
 110   1              lcdWriteCommand(FunctionSetB);
 111   1              lcdClear();
 112   1              lcdWriteCommand(EntryModeSet);
 113   1              lcdWriteCommand(DisplayOnCtrl);
 114   1      }
 115          /***************************************************************/
 116          //功能:LCD写数据
 117          //输入参数:显示的单个字节Data
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 3   

 118          void lcdWriteData (uchar Data) 
 119          {       checkLcdBusy();
 120   1              RS = 1;
 121   1              RW= 0;
 122   1              LCD_DATA = Data;
 123   1              E= 1;
 124   1              delayMs(1);
 125   1              E= 0;
 126   1      }
 127          /***************************************************************/
 128          //功能:向LCD写入坐标
 129          void wrPosition (void) 
 130          {       lcdWriteCommand(FunctionSetE);
 131   1              lcdWriteCommand(lcdPosY);
 132   1              lcdWriteCommand(lcdPosX);
 133   1              lcdWriteCommand(FunctionSetB);
 134   1      }
 135          /***************************************************************/
 136          //功能:显示自定义的图形
 137          //输入参数:图形数据bmp,Cls=清除图形屏幕选项(OFF为不清屏,即显示图形,ON为清屏)
 138          void displayPhoto (uchar *bmp, uchar bmpCls) 
 139          {
 140   1              lcdPosX = 0x80;
 141   1              halfScr = 2;
 142   1              
 143   1              for (;halfScr != 0; halfScr--)
 144   1              {       lcdPosY = 0x80; halfLineCnt = 32;
 145   2                      for (;halfLineCnt != 0; halfLineCnt--)
 146   2                      {  basicBlock = 16;     wrPosition ();                  
 147   3                              for (; basicBlock != 0; basicBlock--)
 148   3                              {       if (bmpCls == 0) { lcdWriteData (*bmp++);}
 149   4                                      else if(bmpCls==1){ lcdWriteData (0x00);}
 150   4                              }
 151   3                              lcdPosY++;
 152   3                      }
 153   2                      lcdPosX = 0x88;
 154   2              }
 155   1              lcdWriteCommand(FuncDrawOn);
 156   1              lcdWriteCommand(FunctionSetB);
 157   1      }
 158          /***************************************************************/
 159          //功能:字符反白显示
 160          //输入参数:反白字符的行cx,列cy,长度width
 161          void convertChar (uchar CX, CY, width) 
 162          {
 163   1              displayPhoto(0,1);
 164   1              lcdPosY = 0x80;
 165   1      
 166   1              if (CX == 0)
 167   1              {       CX = 0x80;halfLineCnt = 16;     }
 168   1              else if (CX == 1){CX = 0x80;halfLineCnt = 32;}
 169   1              else if (CX == 2){CX = 0x88;halfLineCnt = 16;}
 170   1              else if (CX == 3){CX = 0x88;halfLineCnt = 32;}
 171   1              lcdPosX = CX + CY;
 172   1              
 173   1          for (; halfLineCnt != 0; halfLineCnt--)
 174   1              {       basicBlock = width;
 175   2                      wrPosition();   
 176   2                      for (;basicBlock != 0; basicBlock--)
 177   2                      {  if (halfLineCnt > 16) {lcdWriteData(0x00); }
 178   3                         else {lcdWriteData (0xff);}
 179   3                      }
C51 COMPILER V8.05a   MAIN                                                                 12/17/2007 10:55:25 PAGE 4   

 180   2                      lcdPosY++;
 181   2              }

⌨️ 快捷键说明

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