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

📄 液晶显示电子时钟1.lst

📁 一个使用单片机设计的简单电子钟显示,使用C写的,可用于课程设计
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   液___允_电子时钟1                                                     10/09/2008 18:51:13 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE 液___允_电子时钟1
OBJECT MODULE PLACED IN 液晶显示电子时钟1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 液晶显示电子时钟1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************/
   2          //Name of this design:     LCD show Electric Clock
   3          //Author:                  xuqian  zhangmengcheng
   4          //Date:                    2008-10-02
   5          /*******************************************************************/
   6          
   7          #include <reg51.h>
   8          #include <intrins.h>
   9          #include <absacc.h>
  10          #define uchar  unsigned char
  11          #define uint   unsigned int
  12          
  13          #define BUSY  0x80                               //lcd忙检测标志
  14          #define DATAPORT P0                             //定义P0口为LCD通讯端口
  15          
  16          //sbit light=P1^3;
  17          sbit LCM_RS=P2^0;                                                                //数据/命令端
  18          sbit LCM_RW=P2^1;                                                                //读/写选择端
  19          sbit LCM_EN=P2^2;
  20          sbit sounder=P2^5;
  21          
  22          sbit p1_0=P1^0;
  23          sbit p1_1=P1^1;
  24          sbit p1_2=P1^2;
  25          sbit p1_3=P1^3;
  26          sbit p1_4=P1^4;
  27          sbit p1_5=P1^5;
  28          sbit p1_6=P1^6;
  29          sbit p1_7=P1^7;
  30                                                          
  31          uchar second;                                            //定义并初始化时钟变量
  32          uchar minite;
  33          uchar hour;
  34          uchar sminite;
  35          uchar shour;
  36          uchar mstcnt=0;
  37          uchar t,set=0;
  38          uchar code str0[]={"DATE :2008-10-11"};
  39          uchar code str1[]={"TIME :   :  :   "};
  40          uchar code str2[]={"clock:   :  :   "};
  41          
  42          void delay_LCM(uint);                                                                                                   //LCD延时子程序
  43          void initLCM( void);                                                                                                    //LCD初始化子程序
  44          void lcd_wait(void);                                                                                                    //LCD检测忙子程序
  45          void WriteCommandLCM(uchar WCLCM,uchar BusyC);                              //写指令到ICM子函数
  46          void WriteDataLCM(uchar WDLCM);                                             //写数据到LCM子函数
  47          void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //显示指定坐标的一个字符子函数
  48          void DisplayListChar(uchar X,uchar Y,uchar code *DData);                    //显示指定坐标的一串字符子函数
  49          void init_timer0(void);                                                                                         //定时器初始化
  50          void displayfun1(void);
  51          void displayfun2(void);
  52          void displayfun3(void);
  53          void displayfun4(void);
  54          void displayfun5(void);
  55          void displayfun6(void);
C51 COMPILER V7.20   液___允_电子时钟1                                                     10/09/2008 18:51:13 PAGE 2   

  56          void keyscan(void );                                                                                        //键盘扫描子程序
  57          void set_adj(void);
  58          void inc_key(void);
  59          void dec_key(void);
  60          void inc_clock(void);
  61          void dec_clock(void);
  62          void set_sure(void);                        //确认键函数,set=0
  63          
  64          
  65          
  66          
  67          /*********延时K*1ms,12.000mhz**********/
  68          
  69          void delay_LCM(uint k)
  70          {
  71   1          uint i,j;
  72   1          for(i=0;i<k;i++)
  73   1          {
  74   2              for(j=0;j<60;j++)
  75   2                      {;}
  76   2          }
  77   1      }
  78          /**********写指令到LCM子函数************/
  79          
  80          void WriteCommandLCM(uchar WCLCM,uchar BusyC)
  81          {
  82   1          if(BusyC)lcd_wait();
  83   1              DATAPORT=WCLCM;
  84   1          LCM_RS=0;                   // 选中指令寄存器
  85   1          LCM_RW=0;                   // 写模式       
  86   1          LCM_EN=1;
  87   1              _nop_();
  88   1              _nop_();
  89   1              _nop_();
  90   1          LCM_EN=0;
  91   1      }
  92          
  93          /**********写数据到LCM子函数************/
  94          
  95          void WriteDataLCM(uchar WDLCM)
  96          {
  97   1          lcd_wait( );                //检测忙信号
  98   1              DATAPORT=WDLCM;
  99   1          LCM_RS=1;                   // 选中数据寄存器
 100   1          LCM_RW=0;                       // 写模式
 101   1          LCM_EN=1;
 102   1          _nop_();
 103   1              _nop_();
 104   1              _nop_();
 105   1          LCM_EN=0;
 106   1      }
 107          
 108          /***********lcm内部等待函数*************/
 109          
 110          
 111          void lcd_wait(void)
 112          {
 113   1          DATAPORT=0xff;      
 114   1              LCM_EN=1;
 115   1          LCM_RS=0;                           
 116   1          LCM_RW=1;                           
 117   1          _nop_();
C51 COMPILER V7.20   液___允_电子时钟1                                                     10/09/2008 18:51:13 PAGE 3   

 118   1          while(DATAPORT&BUSY)
 119   1              {  LCM_EN=0;
 120   2                 _nop_();
 121   2                 _nop_();
 122   2                 LCM_EN=1;
 123   2                 _nop_();
 124   2                 _nop_();
 125   2                 }
 126   1              LCM_EN=0;
 127   1              
 128   1      }
 129          
 130          
 131          /**********LCM初始化子函数***********/
 132          
 133          void initLCM( )
 134          {
 135   1              DATAPORT=0;     
 136   1              delay_LCM(15);
 137   1              WriteCommandLCM(0x38,0);    //三次显示模式设置,不检测忙信号
 138   1          delay_LCM(5);
 139   1          WriteCommandLCM(0x38,0);
 140   1          delay_LCM(5);
 141   1          WriteCommandLCM(0x38,0);
 142   1          delay_LCM(5);
 143   1      
 144   1          WriteCommandLCM(0x38,1);    //8bit数据传送,2行显示,5*7字型,检测忙信号
 145   1          WriteCommandLCM(0x08,1);    //关闭显示,检测忙信号
 146   1          WriteCommandLCM(0x01,1);    //清屏,检测忙信号
 147   1          WriteCommandLCM(0x06,1);    //显示光标右移设置,检测忙信号
 148   1          WriteCommandLCM(0x0c,1);    //显示屏打开,光标不显示,不闪烁,检测忙信号
 149   1      }
 150          
 151          /****************显示指定坐标的一个字符子函数*************/
 152          
 153          void DisplayOneChar(uchar X,uchar Y,uchar DData)
 154          {
 155   1          Y&=1;
 156   1          X&=15;
 157   1          if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40
 158   1          X|=0x80;                    //指令码为地址码+0X80
 159   1          WriteCommandLCM(X,0);
 160   1          WriteDataLCM(DData);
 161   1      }
 162          
 163          /***********显示指定坐标的一串字符子函数***********/
 164          
 165          void DisplayListChar(uchar X,uchar Y,uchar code *DData)
 166          {
 167   1          uchar ListLength=0;
 168   1          Y&=0x01;
 169   1          X&=0x0f;
 170   1          while(X<16)
 171   1          {
 172   2              DisplayOneChar(X,Y,DData[ListLength]);
 173   2              ListLength++;
 174   2              X++;
 175   2          }
 176   1      }
 177          
 178          
 179          
C51 COMPILER V7.20   液___允_电子时钟1                                                     10/09/2008 18:51:13 PAGE 4   

 180          /***************液晶显示子函数1正常显示*****************/
 181          
 182          void displayfun1(void)
 183          {       
 184   1              WriteCommandLCM(0x0c,1);                                            //显示屏打开,光标不显示,不闪烁,检测忙信号        
 185   1              DisplayListChar(0,0,str0);      
 186   1              DisplayListChar(0,1,str1);              
 187   1                                                                                                      
 188   1              DisplayOneChar(7,1,hour/10+0x30);                       //液晶上显示小时
 189   1              DisplayOneChar(8,1,hour%10+0x30);
 190   1      
 191   1              DisplayOneChar(10,1,minite/10+0x30);                    //液晶上显示分
 192   1              DisplayOneChar(11,1,minite%10+0x30);
 193   1              
 194   1              DisplayOneChar(13,1,second/10+0x30);            //液晶上显示秒
 195   1              DisplayOneChar(14,1,second%10+0x30);
 196   1      }
 197          
 198          
 199          /************液晶显示子函数2***************/
 200          
 201          void displayfun2(void)
 202          {
 203   1          WriteCommandLCM(0x0c,1);                                      //显示屏打开,光标不显示,不闪烁,检测忙信号  
 204   1              DisplayListChar(0,0,str0);      
 205   1              DisplayListChar(0,1,str1);      
 206   1              
 207   1              DisplayOneChar(7,1,hour/10+0x30);
 208   1              DisplayOneChar(8,1,hour%10+0x30);
 209   1      
 210   1              DisplayOneChar(13,1,second/10+0x30);
 211   1              DisplayOneChar(14,1,second%10+0x30);
 212   1      
 213   1      
 214   1              WriteCommandLCM(0x0f,1);                                          //显示屏打开,光标显示,闪烁,检测忙信号
 215   1              DisplayOneChar(10,1,minite/10+0x30);
 216   1              DisplayOneChar(11,1,minite%10+0x30);
 217   1      
 218   1              
 219   1      
 220   1      }
 221          /*************液晶显示子函数3****************/
 222          
 223          void displayfun3(void)
 224          {
 225   1          WriteCommandLCM(0x0c,1);                     //显示屏打开,光标不显示,不闪烁,检测忙信号   
 226   1              DisplayListChar(0,0,str0);      
 227   1              DisplayListChar(0,1,str1);      
 228   1                      
 229   1              DisplayOneChar(10,1,minite/10+0x30);
 230   1              DisplayOneChar(11,1,minite%10+0x30);
 231   1              
 232   1              DisplayOneChar(13,1,second/10+0x30);
 233   1              DisplayOneChar(14,1,second%10+0x30);
 234   1      
 235   1              WriteCommandLCM(0x0f,1);                                         //显示屏打开,光标显示,闪烁,检测忙信号       
 236   1          DisplayOneChar(7,1,hour/10+0x30);
 237   1              DisplayOneChar(8,1,hour%10+0x30);
 238   1      }
 239          /**************液晶显示子函数闹钟1*****************/
 240          void displayfun4(void)
 241          {       
C51 COMPILER V7.20   液___允_电子时钟1                                                     10/09/2008 18:51:13 PAGE 5   

 242   1              WriteCommandLCM(0x0c,1);                                            //显示屏打开,光标不显示,不闪烁,检测忙信号        
 243   1              DisplayListChar(0,0,str0);      
 244   1              DisplayListChar(0,1,str2);              
 245   1                                                                                                      
 246   1              DisplayOneChar(7,1,shour/10+0x30);                      //液晶上显示闹钟小时
 247   1              DisplayOneChar(8,1,shour%10+0x30);
 248   1      
 249   1              DisplayOneChar(10,1,sminite/10+0x30);                   //液晶上显示闹钟分
 250   1              DisplayOneChar(11,1,sminite%10+0x30);
 251   1              
 252   1              DisplayOneChar(13,1,second/10+0x30);            //液晶上显示秒
 253   1              DisplayOneChar(14,1,second%10+0x30);
 254   1      }
 255          
 256          /**************液晶显示子函数闹钟2*****************/
 257          void displayfun5(void)
 258          {
 259   1          WriteCommandLCM(0x0c,1);                                      //显示屏打开,光标不显示,不闪烁,检测忙信号  
 260   1              DisplayListChar(0,0,str0);      
 261   1              DisplayListChar(0,1,str2);      
 262   1              
 263   1              DisplayOneChar(7,1,shour/10+0x30);
 264   1              DisplayOneChar(8,1,shour%10+0x30);
 265   1      
 266   1              DisplayOneChar(13,1,second/10+0x30);
 267   1              DisplayOneChar(14,1,second%10+0x30);
 268   1      
 269   1      
 270   1              WriteCommandLCM(0x0f,1);                                          //显示屏打开,光标显示,闪烁,检测忙信号
 271   1              DisplayOneChar(10,1,sminite/10+0x30);
 272   1              DisplayOneChar(11,1,sminite%10+0x30);
 273   1      
 274   1      }
 275          /**************液晶显示子函数闹钟3*****************/
 276          void displayfun6(void)
 277          {
 278   1          WriteCommandLCM(0x0c,1);                     //显示屏打开,光标不显示,不闪烁,检测忙信号   
 279   1              DisplayListChar(0,0,str0);      

⌨️ 快捷键说明

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