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

📄 main.lst

📁 红外遥控时钟温度计语音报时间和温度deshejifangan
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   MAIN                                                                  05/14/2008 01:19:09 PAGE 1   


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

line level    source

   1          /**************************************************************/
   2          /*                                                                                                                        */
   3          /*                                                                                                                        */
   4          /*                      胡寓洋设计,红外遥控1602时钟,语音播报                    */
   5          /*                      红外解码为gguoqing 版主编写,特此感谢                     */
   6          /*                                                                                                                        */
   7          /*                                                                                                                        */
   8          /*                                                                                                                        */
   9          /**************************************************************/
  10          #include<reg52.h>
  11          #include"lcd1602.h"
  12          #include"ds18b20.h"
  13          #include"ir_decode.h"
  14          #include"luyin.h"
  15          #define uchar unsigned char 
  16          #define uint unsigned int
  17          #define TIMER0_COUNT 0xEE11
  18          void keyscan1();
  19          uchar ak;
  20          
  21          uchar count,s1num,timer0_tick,count=0;
  22          typedef struct{
  23                              char hour;
  24                              char minute;
  25                              char second;
  26                        }time;
  27          
  28          typedef struct{
  29                              uint year;
  30                              uchar month;
  31                              char day;
  32                        }date;
  33          time now={0,0,0};
  34          date today={2008,1,29};
  35          char code dayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
  36          char code weekday[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
  37          uchar ss,sg,fs,fg,ms,mg;
  38          
  39          uchar monthday(uchar year,uchar month)
  40          {
  41   1         if(month==2 && year%4==0)            //润年的2月有29天
  42   1              return(29);
  43   1         else
  44   1              return(dayofmonth[month-1]);    //非闰年时的该月份天数
  45   1      }
  46          
  47          void display_week()  //由年月日计算星期
  48          {
  49   1           char days;
  50   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;
  51   1           display_string(&weekday[days][0]);   
  52   1      }
  53          
  54           static void timer0_initialize(void)   //timer0 initialize
C51 COMPILER V8.02   MAIN                                                                  05/14/2008 01:19:09 PAGE 2   

  55           {
  56   1           EA=1;              //设置不接受所有中断
  57   1           timer0_tick=0;
  58   1           TR0=0;                //关闭Timer0
  59   1           TMOD=0X01;         //设置Timer0为模式2,16位工作模式
  60   1           TL0=(TIMER0_COUNT & 0X00FF);    //设置Timer0低八位数值
  61   1           TH0=(TIMER0_COUNT >> 8);     //设置Timer0高八位数值
  62   1           PT0=1;              //设置Timer0的优先级为最高
  63   1           ET0=1;           //设置接受Timer0的中断
  64   1           TR0=1;             //启动Timer0
  65   1           EA=1;            //设置系统接受中断
  66   1       }
  67          
  68          void write_time(uchar mk,uchar add,uchar number)         
  69          {
  70   1                if(mk==0)
  71   1                {ak=0;}
  72   1                if(mk==1)
  73   1                {ak=1;}
  74   1                if(mk==2)
  75   1                {ak=2;}
  76   1               
  77   1               gotoxy(2,add);
  78   1              display_data(ak,number);//now.minute    now.second      now.hour         
  79   1                                      
  80   1              
  81   1      
  82   1      }
  83          
  84          void write_riqi(uchar add,uchar number)
  85          {
  86   1              //displaybuffer1[6]=number/10;//日期十位
  87   1              //displaybuffer1[7]=number%10;//日期个位
  88   1           gotoxy(1,add);
  89   1              display_data(3,number);
  90   1      }
  91          
  92          
  93          void IR_IN() interrupt 0 using 0
  94          {
  95   1        unsigned char j,k,N=0;
  96   1       
  97   1           EX0 = 0; 
  98   1               EX1=1;
  99   1                 
 100   1               belay(15);
 101   1               if (IRIN==1) 
 102   1           { EX0 =1;
 103   2                 return;
 104   2                } 
 105   1                                 //确认IR信号出现
 106   1        while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
 107   1          {belay(1);}
 108   1      
 109   1       for (j=0;j<4;j++)         //收集四组数据
 110   1       { 
 111   2        for (k=0;k<8;k++)        //每组数据有8位
 112   2        {
 113   3         while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
 114   3           {belay(1);}
 115   3          while (!IRIN)          //等 IR 变为高电平
 116   3           {belay(1);}
C51 COMPILER V8.02   MAIN                                                                  05/14/2008 01:19:09 PAGE 3   

 117   3           while (IRIN)           //计算IR高电平时长
 118   3            {
 119   4          belay(1);
 120   4          N++;           
 121   4          if (N>=30)
 122   4               { EX0=1;
 123   5               return;}                  //0.14ms计数过长自动离开。
 124   4            }                        //高电平计数完毕                
 125   3           IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
 126   3           if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
 127   3           N=0;
 128   3        }//end for k
 129   2       }//end for j
 130   1                      
 131   1         if (IRCOM[2]!=~IRCOM[3])
 132   1         { EX0=1;
 133   2           return; }
 134   1              if(IRCOM[3]==0XFE)//1
 135   1              {
 136   2                      if(IRCOM[3]==0xfe)
 137   2                      {       
 138   3                              mode=0;
 139   3                      
 140   3      
 141   3                      }
 142   2                      
 143   2              }
 144   1              if(IRCOM[3]==0XFd)      //2
 145   1              {
 146   2                      if(IRCOM[3]==0xfd)
 147   2                      {
 148   3                              plus=0;
 149   3              
 150   3                      
 151   3                      }
 152   2                      
 153   2              }
 154   1              if(IRCOM[3]==0XFc)         //3
 155   1              {
 156   2                      if(IRCOM[3]==0xfc)
 157   2                      {
 158   3                              dec=0;
 159   3              
 160   3                      }
 161   2                      
 162   2              }
 163   1              if(IRCOM[3]==0XFb)                //4
 164   1              {
 165   2                      if(IRCOM[3]==0xfb)
 166   2                      {
 167   3                              dc=0;
 168   3                              
 169   3              
 170   3                      }
 171   2                      
 172   2              }
 173   1      
 174   1              if(IRCOM[3]==0XFA)
 175   1              {       if(IRCOM[3]==0XFA)
 176   2                      {recstart=0;}
 177   2              }
 178   1              
C51 COMPILER V8.02   MAIN                                                                  05/14/2008 01:19:09 PAGE 4   

 179   1      
 180   1      
 181   1      
 182   1              keyscan1();
 183   1      
 184   1                      
 185   1      
 186   1      
 187   1        
 188   1                
 189   1                                         
 190   1      
 191   1           EX0 = 1; 
 192   1      }
 193          void keyscan1()

⌨️ 快捷键说明

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