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

📄 temp.lst

📁 单片机显示程序,通过轮循方式是数码管亮,十分经典
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02b   TEMP                                                                 09/10/2005 10:01:41 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE TEMP
OBJECT MODULE PLACED IN Temp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Temp.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg51.h"
   2          #include "intrins.h"
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          sbit SDA=P3^0;
   7          sbit SCL=P3^1;
   8          
   9          sbit Ok_Key=P0^7;
  10          sbit Up_Key=P2^7;
  11          sbit Down_Key=P1^7;
  12          
  13          bit Key;
  14          bit Flash;
  15          bit Write;
  16          
  17          uchar b;
  18          uchar s;
  19          uchar g;
  20          
  21          uint Tcount;
  22          uint TimeCount;
  23          uint TimeSet;
  24          uchar KeyCount; 
  25          
  26          //unsigned code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  27          //上面注释的是标准的数码管字形码,由于P0.0、P1.0和P2.0是键盘端口
  28          //所以,就将这些字形码的最高位置1,这样不会对键盘扫描产生负面影响
  29          
  30          unsigned code tab[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  31          //函数列表
  32          void delay(void);
  33          void Delay(int time);
  34          void delay1(void);
  35          void write_8bit(unsigned char ch);
  36          void ACK(void);
  37          uchar ReadIIC_24C01(unsigned char address);
  38          void WriteIIC_24C01(unsigned char address,unsigned char ddata);
  39          void init(void);
  40          void DataDivision(uint Ddata);
  41          void LedFlash(uchar No);
  42          void KBScan(void);
  43          void Display(void);
  44          void delays(void);
  45          
  46          //键盘中断服务程序
  47          //首先INT0触发,进入中断服务程序。然后检测是哪个键按下
  48          //如果是Ok_Key按下,检测它处于哪个状态(分为四个状态:修改百位、十位、个位和确认),然后显示对应的要修改信
             -息
  49          //如果下一个外部中断触发,同样确认是哪个键,再根据Ok_Key键所处的状态,对的位进行增加、减少修改,同时也可以
             -进行
  50          //进行数据确认并写入EEPROM,这样,时间设定就完成了,接下来单片机进行倒计时
  51          void intersvr0(void) interrupt 0 using 1
  52          {
  53   1              ET0=0;
C51 COMPILER V7.02b   TEMP                                                                 09/10/2005 10:01:41 PAGE 2   

  54   1              TR0=0;  
  55   1              if(!Ok_Key)            //中断触发后,确认是哪一个键按下
  56   1                      {
  57   2                              if(KeyCount==0)//第一次按Ok_Key键,进入第一个状态,修改百位
  58   2                              {
  59   3                                      KeyCount++;
  60   3                                      P1=0x80;
  61   3                                      P2=0x80;
  62   3                                      P0=tab[b];      
  63   3                              }
  64   2                              else if(KeyCount==1)//第二次按Ok_Key键,进入第二个状态,修改十位
  65   2                              {
  66   3                                      KeyCount++;
  67   3                                      P0=tab[b];
  68   3                                      P2=tab[s];
  69   3                                      P1=0x80;
  70   3                              }
  71   2                              else if(KeyCount==2)//第三次按Ok_Key键,进入第三个状态,修改个位
  72   2                              {
  73   3                                      KeyCount++;
  74   3                                      P0=tab[b];
  75   3                                      P2=tab[s];
  76   3                                      P1=tab[g];      
  77   3                              }
  78   2                              else               //确认,并把数据写入EEPROM
  79   2                              {
  80   3                                      KeyCount=0;
  81   3                                      Write=1;
  82   3                              }
  83   2                      }
  84   1                      else if(!Up_Key)       //中断触发后,确认是哪一个键按下
  85   1                      {
  86   2                              if(KeyCount==1)    //Ok_Key键位于第一个状态,对百位数据进行调整
  87   2                              {
  88   3                                      if(b==9)
  89   3                                              b=0;
  90   3                                      else
  91   3                                              b=b+1;
  92   3                                      P1=0x80;
  93   3                                      P2=0x80;
  94   3                                      P0=tab[b];
  95   3                              }
  96   2                              else if(KeyCount==2) //Ok_Key键位于第二个状态,对百位数据进行调整
  97   2                              {
  98   3                                      if(s==9)
  99   3                                              s=0;
 100   3                                      else
 101   3                                              s=s+1;
 102   3                                      P1=0x80;
 103   3                                      P2=tab[s];
 104   3                                      P0=tab[b];
 105   3                              }
 106   2                              else if(KeyCount==3) //Ok_Key键位于第三个状态,对百位数据进行调整
 107   2                              {
 108   3                                      if(g==9)
 109   3                                              g=0;
 110   3                                      else
 111   3                                              g=g+1;
 112   3                                      P1=tab[g];
 113   3                                      P2=tab[s];
 114   3                                      P0=tab[b];
 115   3                              }
C51 COMPILER V7.02b   TEMP                                                                 09/10/2005 10:01:41 PAGE 3   

 116   2                              else
 117   2                                      return;
 118   2                      }
 119   1                      else if(!Down_Key)      //中断触发后,确认是哪一个键按下
 120   1                      {
 121   2                              if(KeyCount==1)     //Ok_Key键位于第一个状态,对百位数据进行调整
 122   2                              {
 123   3                                      if(b==0)
 124   3                                              b=9;
 125   3                                      else
 126   3                                              b=b-1;
 127   3                                      P1=0x80;
 128   3                                      P2=0x80;
 129   3                                      P0=tab[b];
 130   3                              }
 131   2                              else if(KeyCount==2) //Ok_Key键位于第二个状态,对百位数据进行调整
 132   2                              {       
 133   3                                      if(s==0)
 134   3                                              s=9;
 135   3                                      else
 136   3                                              s=s-1;
 137   3                                      P1=0x80;
 138   3                                      P2=tab[s];
 139   3                                      P0=tab[b];
 140   3                              }
 141   2                              else if(KeyCount==3)//Ok_Key键位于第三个状态,对百位数据进行调整
 142   2                              {       
 143   3                                      if(g==0)
 144   3                                              g=9;
 145   3                                      else
 146   3                                              g=g-1;
 147   3                                      P1=tab[g];
 148   3                                      P2=tab[s];
 149   3                                      P0=tab[b];
 150   3                              }               
 151   2                              else
 152   2                                      return;
 153   2                      }       
 154   1      }
 155          
 156          
 157          /////////////////
 158          //12M晶振最大延时为65.536ms,这里延时为50ms
 159          void time0(void) interrupt 1 using 1
 160          {               
 161   1              
 162   1              TH0=(65536-50000)/256;             //设置定时器高8位初值
 163   1              TL0=(65536-50000)%256;             //设置定时器低8位初值
 164   1      
 165   1              if(Tcount==20)                     //通过调整数字可以确定计数的最小单位
 166   1              {                                  //例如,如果为20,表示每1s数码管数据改变一次,如果为1200,则是1m改变一
             -次
 167   2                      Tcount=0;
 168   2                      TimeCount=TimeCount-1;         //用来长时间定时
 169   2              }
 170   1              b=TimeCount/100;                   //将当前数据的百、十、个位分离
 171   1              s=(TimeCount/10)%10;
 172   1              g=TimeCount%10;
 173   1      
 174   1              P0=tab[b];                         //分离后的数据显示到数码管
 175   1              P2=tab[s];
 176   1              P1=tab[g];
C51 COMPILER V7.02b   TEMP                                                                 09/10/2005 10:01:41 PAGE 4   

⌨️ 快捷键说明

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