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

📄 ht1621.lst

📁 HT1621驱动和EEPROM93LC
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   HT1621                                                                05/14/2008 14:59:23 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE HT1621
OBJECT MODULE PLACED IN ht1621.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ht1621.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <AT89x52.h>
   3          #include <intrins.h>
   4          #include "93LC66.c"
   5          
   6          struct 
   7          {unsigned char hour;
   8           unsigned char min;
   9           unsigned char sec;
  10          }time1={12,0,0};
  11          struct 
  12          {unsigned int hourclock;
  13           unsigned int minclock;
  14           unsigned int ampmclock;
  15          }time2={7,0,0};
  16          
  17          unsigned char Count=0,i=0,ampm=0,sec20=0;
  18          unsigned int counter=300;  
  19          unsigned char  Light_flag=0,Ledloop=0;  
  20          bit _500msflag=0,beep_flag=0; 
  21           
  22          
  23          void inc_hour(void);
  24          void inc_min(void);
  25          void inc_sec(void);     
  26          void ProcessKey(void);
  27          void ScanKey(void);
  28          void DisplayChange(void);
  29          void light(void);
  30          void delayms(unsigned int i);
  31          
  32          #define BIAS 0x52         //0b1000 0101 0010  1/3duty 4com
  33          #define SYSDIS 0X00   //0b1000 0000 0000  关振系统荡器和LCD偏压发生器
  34          #define LCDOFF 0X04   //0b1000 0000 0100  关LCD偏压
  35          #define LCDON 0X06   //0b1000 0000 0110  打开LCD偏压
  36          #define SYSEN 0X02   //0b1000 0000 0010 打开系统振荡器
  37          #define XTAL 0x28   //0b1000 0010 1000 外部接时钟
  38          #define RC256 0X30   //0b1000 0011 0000  内部时钟
  39          #define TONEON 0X12   //0b1000 0001 0010  打开声音输出
  40          #define TONEOFF 0X10   //0b1000 0001 0000 关闭声音输出
  41          #define WDTDIS 0X0a   //0b1000 0000 1010  禁止看门狗*/
  42          #define Switch P2_5
  43          #define Up1 P2_4
  44          #define Up2 P2_3
  45          #define Uphour P2_2
  46          #define Upmin P2_1
  47          #define Enter P2_0 
  48          
  49          
  50          //HT1621控制位(液晶模块接口定义,根据自已的需要更改)
  51          sbit HT1621_DAT=P3^5;
  52          sbit HT1621_CS=P3^7;    //lower enable
  53          sbit HT1621_WR=P3^6;    //rising edge
  54          
  55          //0,1...8,9,A,P
C51 COMPILER V7.06   HT1621                                                                05/14/2008 14:59:23 PAGE 2   

  56          unsigned char code Ht1621code[]=
  57          {0xeb,0x60,0xc7,0xe5,0x6c,0xad,0xaf,0xe0,0xef,0xed,0xee,0xce};
  58          
  59          unsigned char code Led[4]={0x01,0x04,0x02,0x08};
  60          
  61          
  62          void DelayMS1(uint iMs)
  63          {
  64   1       uint i,j;
  65   1         for(i=0;i<iMs;i++)
  66   1          for(j=0;j<65;j++) 
  67   1          delayms(1);      
  68   1      }
  69          //完成写一个命令包括头(100)
  70          void Ht1621WrCmd(uchar ucTmpCmd)
  71          {
  72   1       uchar data i,ucCmdByte=0x80;
  73   1       HT1621_CS=0;
  74   1       _Nop();
  75   1       _Nop();
  76   1       for (i=0;i<4;i++)
  77   1       {
  78   2        if (ucCmdByte&0x80) HT1621_DAT=1;
  79   2        else  HT1621_DAT=0;
  80   2        HT1621_WR=0;
  81   2        _Nop();
  82   2        _Nop();
  83   2        HT1621_WR=1;
  84   2        _Nop();
  85   2        ucCmdByte<<=1;
  86   2       }
  87   1       for (i=0;i<8;i++)
  88   1       {
  89   2        if (ucTmpCmd&0x80) HT1621_DAT=1;
  90   2        else HT1621_DAT=0;
  91   2        HT1621_WR=0;
  92   2        _Nop();
  93   2        _Nop();
  94   2        HT1621_WR=1;
  95   2        _Nop();
  96   2        ucTmpCmd<<=1; 
  97   2       }
  98   1       HT1621_CS=1;
  99   1       _Nop();
 100   1       _Nop(); 
 101   1      }
 102          
 103          //写命令+地址
 104          void Ht1621WrDataCmd(uchar ucAddr)
 105          { uchar data i,ucDataCmd=0x05;    //101
 106   1        HT1621_CS=0;
 107   1        _Nop();
 108   1        _Nop();
 109   1       ucDataCmd<<=5;
 110   1       for (i=0;i<3;i++)
 111   1       {
 112   2        if (ucDataCmd&0x80) HT1621_DAT=1;
 113   2        else HT1621_DAT=0;
 114   2        HT1621_WR=0;
 115   2        _Nop();
 116   2        _Nop();
 117   2        HT1621_WR=1;
C51 COMPILER V7.06   HT1621                                                                05/14/2008 14:59:23 PAGE 3   

 118   2        _Nop();
 119   2        ucDataCmd<<=1; 
 120   2       }
 121   1       ucAddr<<=2;
 122   1       for (i=0;i<6;i++)
 123   1       {
 124   2        if (ucAddr&0x80) HT1621_DAT=1;
 125   2        else HT1621_DAT=0;
 126   2        HT1621_WR=0;
 127   2        _Nop();
 128   2        _Nop();
 129   2        HT1621_WR=1;
 130   2        _Nop();
 131   2        ucAddr<<=1;
 132   2       }  
 133   1      }
 134          
 135          //完成写一个字节数据
 136          void Ht1621WrByte(uchar ucTmpData)
 137          {
 138   1       uchar data i;  
 139   1       for (i=0;i<8;i++)
 140   1       {
 141   2        if (ucTmpData&0x80) HT1621_DAT=1;
 142   2        else HT1621_DAT=0;
 143   2        HT1621_WR=0;
 144   2        _Nop();
 145   2        _Nop();
 146   2        HT1621_WR=1;
 147   2        _Nop(); 
 148   2        ucTmpData<<=1;
 149   2       }
 150   1       HT1621_CS=1; 
 151   1       _Nop();
 152   1       _Nop(); 
 153   1      }
 154          void Ht1621WrByteDot(uchar ucTmpData)
 155          {
 156   1       uchar data i;  
 157   1       for (i=0;i<4;i++)
 158   1       {
 159   2        if (ucTmpData&0x80) HT1621_DAT=1;
 160   2        else HT1621_DAT=0;
 161   2        HT1621_WR=0;
 162   2        _Nop();
 163   2        _Nop();
 164   2        HT1621_WR=1;
 165   2        _Nop(); 
 166   2        ucTmpData<<=1;
 167   2       } 
 168   1       HT1621_CS=1; 
 169   1       _Nop();
 170   1       _Nop();
 171   1      }
 172          
 173          void Ht1621_Init(void)
 174          {
 175   1       HT1621_CS=1;
 176   1       HT1621_WR=0;
 177   1       HT1621_DAT=1; 
 178   1       Ht1621WrCmd(BIAS);
 179   1       Ht1621WrCmd(RC256);    //使用内部振荡器
C51 COMPILER V7.06   HT1621                                                                05/14/2008 14:59:23 PAGE 4   

 180   1       Ht1621WrCmd(TONEOFF);
 181   1       Ht1621WrCmd(LCDOFF);
 182   1       Ht1621WrCmd(SYSDIS);
 183   1       Ht1621WrCmd(WDTDIS); 
 184   1       Ht1621WrCmd(SYSEN);
 185   1       Ht1621WrCmd(LCDON);
 186   1      }
 187          
 188          void ProcessKey(void)
 189          {if(Count==1)
 190   1         {if(Up1==0)
 191   2            {DelayMS1(55);
 192   3             if(Up1==0)
 193   3             inc_hour();
 194   3            }  
 195   2          else if(Up2==0)
 196   2            {DelayMS1(55);
 197   3             if(Up2==0)
 198   3             inc_min();
 199   3            }
 200   2         } 
 201   1       else if(Count==2)
 202   1         {if(Up1==0)
 203   2            {DelayMS1(55);
 204   3             if(Up1==0)
 205   3             ampm=!ampm;
 206   3            }
 207   2          else if(Up2==0)
 208   2             {DelayMS1(55);
 209   3              if(Up2==0)
 210   3              TR0=0;
 211   3              inc_sec();        
 212   3             }   
 213   2         }
 214   1       else if(Count==3)
 215   1         {if(Uphour==0)
 216   2            {DelayMS1(55);
 217   3             if(Uphour==0)
 218   3             time2.ampmclock=!time2.ampmclock;           
 219   3            }
 220   2         }
 221   1       else if(Count==4)
 222   1         {if(Uphour==0)
 223   2            {DelayMS1(55);
 224   3             if(Uphour==0)
 225   3             {time2.hourclock++;                              
 226   4             if(time2.hourclock>12)
 227   4             time2.hourclock=1;}
 228   3            }
 229   2          else if(Upmin==0)
 230   2            {DelayMS1(55);
 231   3             if(Upmin==0)
 232   3             {time2.minclock++;                       
 233   4              if(time2.minclock>59)
 234   4               {time2.minclock=0;
 235   5                time2.hourclock++;
 236   5                        if(time2.hourclock>12)
 237   5                time2.hourclock=1;
 238   5                        }
 239   4                  }
 240   3            }
 241   2          }  
C51 COMPILER V7.06   HT1621                                                                05/14/2008 14:59:23 PAGE 5   

 242   1       if(Enter==0)
 243   1         {Count=0;
 244   2          WRITE(0x03,time2.ampmclock);//ampm

⌨️ 快捷键说明

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