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

📄 text1.lst

📁 红外遥控时钟温度计语音报时间和温度deshejifangan
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Keil1\C51\BIN\C51.EXE Text1.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*用定时器0,1602液晶,设计一个数字时钟,可以由三个按钮控制调节时间*/
   2          #include<reg52.h>
   3          #include <intrins.h>
   4          #include"lcd1602.h"
   5          #include"ds18b20.h"
   6          #define uchar unsigned char 
   7          #define uint unsigned int
   8          #define TIMER0_COUNT 0xEE11
   9          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  10          sbit mode=P2^7;
  11          sbit plus=P2^6;
  12          sbit dec=P2^5;
  13          sbit IRIN = P3^2;         //红外接收器数据线
  14          uchar IRCOM[7];
  15          sbit LCD_RS = P1^0;             
  16          sbit LCD_RW = P1^1;
  17          sbit LCD_EN = P1^2;
  18          void belay(uchar x);  //x*0.14MS
  19          void belay1(int ms);
  20          
  21          bit lcd_busy()
  22           {                          
  23   1          bit result;
  24   1          LCD_RS = 0;
  25   1          LCD_RW = 1;
  26   1          LCD_EN = 1;
  27   1          delayNOP();
  28   1          result = (bit)(P0&0x80);
  29   1          LCD_EN = 0;
  30   1          return(result); 
  31   1       }
  32          
  33          /*******************************************************************/
  34          /*                                                                 */
  35          /*写指令数据到LCD                                                  */
  36          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  37          /*                                                                 */
  38          /*******************************************************************/
  39          
  40          void lcd_wcmd(uchar cmd)
  41          
  42          {                          
  43   1         while(lcd_busy());
  44   1          LCD_RS = 0;
  45   1          LCD_RW = 0;
  46   1          LCD_EN = 0;
  47   1          _nop_();
  48   1          _nop_(); 
  49   1          P0 = cmd;
  50   1          delayNOP();
  51   1          LCD_EN = 1;
  52   1          delayNOP();
  53   1          LCD_EN = 0;  
  54   1      }
  55          
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 2   

  56          /*******************************************************************/
  57          /*                                                                 */
  58          /*写显示数据到LCD                                                  */
  59          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
  60          /*                                                                 */
  61          /*******************************************************************/
  62          
  63          void lcd_wdat(uchar dat)
  64          {                          
  65   1         while(lcd_busy());
  66   1          LCD_RS = 1;
  67   1          LCD_RW = 0;
  68   1          LCD_EN = 0;
  69   1          P0 = dat;
  70   1          delayNOP();
  71   1          LCD_EN = 1;
  72   1          delayNOP();
  73   1          LCD_EN = 0; 
  74   1      }
  75          
  76          /*******************************************************************/
  77          /*                                                                 */
  78          /*  LCD初始化设定                                                  */
  79          /*                                                                 */
  80          /*******************************************************************/
  81          
  82          void lcd_init()
  83          { 
  84   1          belay1(15);                   
  85   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
  86   1          belay1(5);
  87   1          lcd_wcmd(0x38);         
  88   1          belay1(5);
  89   1          lcd_wcmd(0x38);         
  90   1          belay1(5);
  91   1      
  92   1          lcd_wcmd(0x0c);      //显示开,关光标
  93   1          belay1(5);
  94   1          lcd_wcmd(0x06);      //移动光标
  95   1          belay1(5);
  96   1          lcd_wcmd(0x01);      //清除LCD的显示内容
  97   1          belay1(5);
  98   1      }
  99          
 100          /*******************************************************************/
 101          /*                                                                 */
 102          /*  设定显示位置                                                   */
 103          /*                                                                 */
 104          /*******************************************************************/
 105          
 106          void lcd_pos(uchar pos)
 107          {                          
 108   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 109   1      }
 110          
 111          /*******************************************************************/
 112          void belay(uchar x);  //x*0.14MS
 113          void belay1(int ms);
 114          uchar count,s1num,timer0_tick,count=0;
 115          typedef struct{
 116                              char hour;
 117                              char minute;
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 3   

 118                              char second;
 119                        }time;
 120          
 121          typedef struct{
 122                              uint year;
 123                              uchar month;
 124                              char day;
 125                        }date;
 126          time now={0,0,0};
 127          date today={2008,1,29};
 128          char code dayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
 129          char code weekday[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
 130          
 131          uchar monthday(uchar year,uchar month)
 132          {
 133   1         if(month==2 && year%4==0)            //润年的2月有29天
 134   1              return(29);
 135   1         else
 136   1              return(dayofmonth[month-1]);    //非闰年时的该月份天数
 137   1      }
 138          
 139          void display_week()  //由年月日计算星期
 140          {
 141   1           char days;
 142   1           days=(today.day+1+2*today.month+3*(today.month+1)/5+today.year+today.year/4-today.year/100+today.year
             -/400)%7;
 143   1           display_string(&weekday[days][0]);   
 144   1      }
 145          
 146           static void timer0_initialize(void)   //timer0 initialize
 147           {
 148   1           EA=0;              //设置不接受所有中断
 149   1           timer0_tick=0;
 150   1           TR0=0;                //关闭Timer0
 151   1           TMOD=0X01;         //设置Timer0为模式2,16位工作模式
 152   1           TL0=(TIMER0_COUNT & 0X00FF);    //设置Timer0低八位数值
 153   1           TH0=(TIMER0_COUNT >> 8);     //设置Timer0高八位数值
 154   1           PT1=1;              //设置Timer0的优先级为最高
 155   1           ET0=1;           //设置接受Timer0的中断
 156   1           TR0=1;             //启动Timer0
 157   1           EA=1;            //设置系统接受中断
 158   1       }
 159          
 160          void write_time(uchar add,uchar number)
 161          {
 162   1           gotoxy(2,add);
 163   1              display_data(number);
 164   1      }
 165          void write_riqi(uchar add,uchar number)
 166          {
 167   1           gotoxy(1,add);
 168   1              display_data(number);
 169   1      }
 170          
 171          void keyscan()
 172          {
 173   1              uchar mode_num;
 174   1              if(plus|dec==0) 
 175   1              {
 176   2                      delay(5);
 177   2                      if(plus|dec==0)
 178   2                      {       mode_num++;
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 4   

 179   3                              while(!plus|dec);
 180   3                     TR0=0;
 181   3                     write_com(0x0f);
 182   3                 }
 183   2                              if(mode_num==1) gotoxy(1,4);
 184   2                              while(!mode);
 185   2                     if(mode_num==2) gotoxy(1,7);while(!plus|dec);
 186   2                      if(mode_num==3) gotoxy(1,10);while(!plus|dec);
 187   2                     if(mode_num==4) gotoxy(2,2);while(!plus|dec);
 188   2                     if(mode_num==5) gotoxy(2,5);while(!plus|dec);
 189   2                      if(mode_num==6) gotoxy(2,8);while(!plus|dec);
 190   2                      if(mode_num==7)
 191   2                      {
 192   3                              mode_num=0;
 193   3                              write_com(0x0c);
 194   3                              TR0=1;
 195   3                      }
 196   2            }
 197   1              if(mode_num!=0)
 198   1              {
 199   2                      if(plus==0)
 200   2                      {
 201   3                              delay(5);
 202   3                              if(plus==0)
 203   3                              {
 204   4                                      delay(5);
 205   4                                      while(!plus);
 206   4                                      delay(5);
 207   4                          if(mode_num==1)
 208   4                                      {
 209   5                                              today.year++;
 210   5                                           write_riqi(1,today.year/100);
 211   5                               write_riqi(3,today.year%100);
 212   5                               gotoxy(1,12);
 213   5                               display_week();
 214   5                               gotoxy(1,4);
 215   5                                                       while(!plus);
 216   5                                      }
 217   4                          if(mode_num==2)
 218   4                                      {
 219   5                                              today.month++;
 220   5                               if(today.month==13) today.month=1;
 221   5                                           write_riqi(6,today.month);
 222   5                               gotoxy(1,12);
 223   5                               display_week();
 224   5                               gotoxy(1,7);
 225   5                                                       while(!plus);
 226   5                                      }
 227   4                          if(mode_num==3)
 228   4                                      {
 229   5                                              today.day++;
 230   5                               if(today.day>monthday(today.year,today.month))
 231   5                               today.day=1;
 232   5                                           write_riqi(9,today.day);
 233   5                               gotoxy(1,12);
 234   5                               display_week();
 235   5                               gotoxy(1,10);while(!plus);
 236   5                                      }
 237   4                                      if(mode_num==4)
 238   4                                      {
 239   5                                              now.hour++;
 240   5                                              if(now.hour==24) now.hour=0;
C51 COMPILER V8.02   TEXT1                                                                 04/18/2008 20:54:48 PAGE 5   

 241   5                                           write_time(1,now.hour);
 242   5                               gotoxy(2,2);
 243   5                                      }
 244   4                                      if(mode_num==5)
 245   4                                      {
 246   5                                              now.minute++;
 247   5                                              if(now.minute==60) now.minute=0;
 248   5                                              write_time(4,now.minute);
 249   5                               gotoxy(2,5);while(!plus);

⌨️ 快捷键说明

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