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

📄 12864

📁 这是一个用51开发的包含有多个模块的12864液晶显示的程序
💻
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.02   12864万年繽                                                           11/15/2007 20:52:01 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 12864万年繽
OBJECT MODULE PLACED IN 12864万年历.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864万年历.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************/
   2          /*    LCM128*64万年历                      */
   3          /*    硬件:LCM128*64  89s52   晶振:24M     */
   4          /*    制作:hyj                             */
   5          /*    时间:2006.11.3   V0.1                */
   6          /*         2006.12.4   V0.2(修正"三"显示)  */
   7          /*         2006.12.7   V0.3(增加闹钟功能)  */
   8          /*******************************************/
   9          
  10          
  11          
  12          
  13          #include<reg51.h>
  14          #include<stdio.h>
  15          #include<intrins.h>
  16          #define uchar unsigned char
  17          #define DELTA 500
  18          
  19          bit c_moon;
  20          bit flash,id,alarm_controls,alarm;
  21          unsigned char k,jieqi1,jieqi2;
  22          data uchar year_moon,month_moon,day_moon;
  23          unsigned char year,month,day,week,hour,min,sec;
  24          unsigned char alarm_hour,alarm_min,sec_temp;
  25          
  26          uchar mode=0,add=1,ir_data1,ir_data2,ir_data3,ir_data4,ir_enable,count,count2=0,en=0;
  27          
  28          
  29          code unsigned char shuzi[]={"0123456789:."};
  30          code unsigned char riqi[]= {"年月日农历星期室温  闹钟开关"};
  31          code unsigned char xingqi[]={"  一二33四五六日"};
  32          code unsigned char rongli[]={"初十廿卅"};
  33          code unsigned char shuzi2[]={"十一二33四五六七八九"};
  34          code unsigned char shuzi3[]={"  十"};
  35          code unsigned char shuzi4[]={"  一二33四五六七八九"};
  36          unsigned char code inittime[]={0x48,0x21,0x15,0x11,0x11,0x06,0x06};        //初始化参数
  37          //                              秒   分   时    日   月  星期  年 
  38          code uchar san[]={
  39          /*--  文字:  三  --*/
  40          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  41          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  42          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  43          };
  44          
  45          
  46          code unsigned char jieqi[]=
  47          {
  48          "        "
  49          "小寒大寒" 
  50          "立春雨水"
  51          "惊蛰春分"
  52          "清明谷雨"
  53          "立夏小满"
  54          "芒种夏至"
  55          "小暑大暑"
C51 COMPILER V8.02   12864万年繽                                                           11/15/2007 20:52:01 PAGE 2   

  56          "立秋处暑"
  57          "白露秋分"
  58          "寒露霜降"
  59          "立冬小雪"
  60          "大雪冬至"
  61          };
  62          
  63          
  64          sbit T_CLK=P3^5;
  65          sbit T_IO =P3^6;
  66          sbit T_RST=P3^7;  //引脚定义
  67          
  68          sbit DQ =P1^4;
  69          sbit ACC0=ACC^0;
  70          sbit ACC7=ACC^7;
  71          sbit rs = P2^1;
  72          sbit rw = P2^2;
  73          sbit e  = P2^4;
  74          sbit psb = P2^5;
  75          sbit rst = P3^4;
  76          
  77          sbit P07=P0^7;
  78          sbit P15=P1^5;
  79          
  80          void   RTInputByte(uchar);                                         // 输入 1Byte 
  81          uchar  RTOutputByte(void);                                         // 输出 1Byte 
  82          void   W1302(uchar, uchar);                                        // 向DS1302写入一个字节
  83          uchar  R1302(uchar);                                               // 从DS1302读出一个字节
  84          void   Set1302(unsigned char* );                                   // 设置初始时间 
  85          ReadTemperature(void);                                             //读取室温
  86          void Conversion(bit c,char year,char month,char day);              //计算农历日期
  87          unsigned char calendar_calculate_solar_term_1(void);               //计算当月第一个节气对应的公历日期
  88          unsigned char calendar_calculate_solar_term_2(void);               //计算当月第二个节气
  89          
  90          
  91          
  92          
  93          
  94          mode_set()
  95           {
  96   1        switch(mode)
  97   1         {
  98   2               case 0:mode=1;
  99   2                      W1302(0x8e,0x00);                   //允许写操作
 100   2                      W1302(0x80,0x80);                   //写入DS1302 时间停止
 101   2                                W1302(0x8e,0x80);                   //写保护,禁止写操作  
 102   2                                TR0=1;
 103   2                                break;
 104   2               case 1:mode=2;
 105   2                        break;
 106   2               case 2:mode=3;
 107   2                   break;
 108   2               case 3:mode=4;
 109   2                   break;
 110   2               case 4:mode=5;
 111   2                   break;
 112   2               case 5:mode=6;
 113   2                   break;
 114   2               case 6:mode=0;
 115   2                      W1302(0x8e,0x00);                   //允许写操作
 116   2                      W1302(0x80,0x00);                   //写入DS1302  时间运行
 117   2                                W1302(0x8e,0x80);                   //写保护,禁止写操作 
C51 COMPILER V8.02   12864万年繽                                                           11/15/2007 20:52:01 PAGE 3   

 118   2                                TR0=0;
 119   2                 break;
 120   2           }
 121   1              if(id==1)
 122   1               {
 123   2           switch(mode)
 124   2                 {
 125   3                       case 7:mode=8;
 126   3                               break;
 127   3                       case 8:mode=7;
 128   3                               break;
 129   3                      }
 130   2               }
 131   1        }
 132          
 133          add_set()
 134           {
 135   1        uchar address,item;
 136   1        uchar max,min;
 137   1        if(alarm==1) {alarm=0;return;}
 138   1        if(mode==0)  return;
 139   1        if(mode==1)  {address=0x8c; max=99;min=0;}    //年
 140   1        if(mode==2)  {address=0x88; max=12;min=1;}    //月
 141   1        if(mode==3)  {address=0x86; max=31;min=1;}    //日
 142   1        if(mode==4)  {address=0x8a; max=7; min=1;}    //星期
 143   1        if(mode==5)  {address=0x84; max=23;min=0;}    //小时
 144   1        if(mode==6)  {address=0x82; max=59;min=0;}    //分钟
 145   1        if(mode==7)  {address=0xc0; max=23;min=0;}
 146   1        if(mode==8)  {address=0xc2; max=59;min=0;}
 147   1              
 148   1        item=R1302(address+1);
 149   1        item=item/16*10+item%16;
 150   1        if(add) 
 151   1         item++;  
 152   1        else 
 153   1         item--;
 154   1        if(item<min||item==255) item=max;
 155   1        if(item>max) item=min;   
 156   1        W1302(0x8e,0x00);                   //允许写操作
 157   1        W1302(address,item/10*16+item%10);  //写入DS1302 //转成BCD码
 158   1        W1302(0x8e,0x80);                   //写保护,禁止写操作  
 159   1      }
 160            
 161          
 162          
 163          ir_key()
 164           {
 165   1      
 166   1        switch(ir_data3)
 167   1         {
 168   2               case 0xe2: mode_set();
 169   2                               break;
 170   2               case 0x52: add=1;
 171   2                          add_set();
 172   2                                                  break;
 173   2               case 0x78: add=0;
 174   2                          add_set();
 175   2                                                  break;
 176   2          case 0xb8: id=1;
 177   2                               mode=7;
 178   2                               TR0=1;
 179   2                                         break;
C51 COMPILER V8.02   12864万年繽                                                           11/15/2007 20:52:01 PAGE 4   

 180   2               case 0x42: id=0;
 181   2                               mode=0;
 182   2                               TR0=0;
 183   2                                              break;
 184   2          case 0xc8:if(id==1)              //设置闹钟 开/关(必须在闹钟调整状态下)
 185   2                          {
 186   3                           alarm_controls=~alarm_controls;
 187   3                                      }
 188   2                          
 189   2        }
 190   1       }
 191          
 192          
 193          
 194          /**********************************************
 195            遥控外部中断程序
 196             
 197            接收数据:ir_data1--ir_data4
 198            倍数计数:count
 199            DELTA   :误差
 200          /**********************************************/
 201          void int0remoter() interrupt 2
 202            {
 203   1          TR1=0;
 204   1          if((TL1+TH1*256)==0)
 205   1            {
 206   2              count=0;
 207   2                TL1=0;
 208   2                        TH1=0;
 209   2                        TR1=1;  //开定时器
 210   2                        
 211   2                        return;//有遥控信号产生中断,退出中断
 212   2                      }
 213   1               if(!count)
 214   1                 {
 215   2              if(((TL1+TH1*256)>(27000-DELTA))&&((TL1+TH1*256)<(27000+DELTA)))
 216   2                          {
 217   3                                 count++;
 218   3                                      TH1=0;
 219   3                                      TL1=0;
 220   3                                      TR1=1;
 221   3                                      return;//前导码正确,准备接收数据,退出中断
 222   3                                }
 223   2                              count=0;
 224   2                              TR1=0;
 225   2                              TH1=0;
 226   2                              TL1=0;
 227   2                              return;//前导码错误,非遥控信号,退出中断
 228   2                       }
 229   1                if(count<33)
 230   1                  {
 231   2                         if(count<=8)
 232   2                                {
 233   3                                  if(((TL1+TH1*256)>(2250-DELTA))&&((TL1+TH1*256)<(2250+DELTA)))
 234   3                                         {
 235   4                                                ir_data1<<=1;
 236   4                                                count++;
 237   4                                                TH1=0;
 238   4                                                TL1=0;
 239   4                                                TR1=1;
 240   4                                                return;  //数据为0,退出中断
 241   4                                              }
C51 COMPILER V8.02   12864万年繽                                                           11/15/2007 20:52:01 PAGE 5   

 242   3                                  if(((TL1+TH1*256)>(4500-DELTA))&&((TL1+TH1*256)<(4500+DELTA)))
 243   3                                         {
 244   4                                                ir_data1<<=1;
 245   4                                                ir_data1|=0x01;
 246   4                                                count++;
 247   4                                                TH1=0;
 248   4                                                TL1=0;
 249   4                                                TR1=1;
 250   4                                                return;//数据为1,退出中断
 251   4                                              }
 252   3                                       count=0;
 253   3                                       TR1=0;
 254   3                                       TH1=0;
 255   3                                       TL1=0;
 256   3                                       return;   //错误,清零退出中断
 257   3                                }
 258   2                         if(count>8&&count<=16)
 259   2                                {
 260   3                                  if(((TL1+TH1*256)>(2250-DELTA))&&((TL1+TH1*256)<(2250+DELTA)))
 261   3                                         {
 262   4                                                ir_data2<<=1;
 263   4                                                count++;
 264   4                                                TH1=0;
 265   4                                                TL1=0;
 266   4                                                TR1=1;
 267   4                                                return;  //数据为0,退出中断
 268   4                                              }
 269   3                                  if(((TL1+TH1*256)>(4500-DELTA))&&((TL1+TH1*256)<(4500+DELTA)))

⌨️ 快捷键说明

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