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

📄 temp.lst

📁 单片机显示程序,通过轮循方式是数码管亮,十分经典
💻 LST
📖 第 1 页 / 共 2 页
字号:

 177   1              Tcount=Tcount+1;
 178   1      }
 179          
 180          
 181          //短延时函数
 182          void delay(void)
 183          {
 184   1              unsigned int i=1200;
 185   1              while(i--);
 186   1      }
 187          //这里,延时30可以使数码管闪烁
 188          void Delay(int time)  
 189          {
 190   1              while(time--)   
 191   1                      delay();
 192   1      }
 193          
 194          /*----------------------------------------------------------------------------
 195          调用方式:write_8bit(unsigned char ch)  ﹫2001/03/23
 196          函数说明:内函数,私有,用户不直接调用。
 197          -------------------------------------------------------------------------------
 198          */
 199          void  write_8bit(unsigned char ch)
 200          {
 201   1          unsigned char i=8;
 202   1          SCL=0;
 203   1          _nop_();_nop_();_nop_();_nop_();_nop_();
 204   1          while (i--)
 205   1          {
 206   2              SDA=(bit)(ch&0x80);
 207   2              _nop_();_nop_();_nop_();_nop_();_nop_();
 208   2              ch<<=1;
 209   2              SCL=1;
 210   2              _nop_();_nop_();_nop_();_nop_();_nop_();
 211   2              SCL=0;
 212   2              _nop_();_nop_();_nop_();_nop_();_nop_();
 213   2          }
 214   1          _nop_();_nop_();_nop_();_nop_();_nop_();
 215   1          _nop_();_nop_();_nop_();_nop_();_nop_();
 216   1      }
 217          
 218          /*------------------------------------------------------------------------------
 219          调用方式:void ACK(void)  ﹫2001/03/23
 220          函数说明:内函数,私有,用户不直接调用。
 221          -------------------------------------------------------------------------------
 222          */
 223          void ACK(void)
 224          {
 225   1         unsigned char time_1;
 226   1          SDA=1;
 227   1          SCL=0;
 228   1          _nop_();_nop_();_nop_();_nop_();_nop_();
 229   1          SCL=1;
 230   1          time_1=5;
 231   1          while(SDA) {if (!time_1) break;} //ACK
 232   1          SCL=0;
 233   1          _nop_();_nop_();_nop_();_nop_();_nop_();
 234   1      }
 235          
 236          
 237          unsigned char ReadIIC_24C01(unsigned char address)
 238          {
C51 COMPILER V7.02b   TEMP                                                                 09/10/2005 10:01:41 PAGE 5   

 239   1            unsigned char ddata=0;
 240   1            unsigned char i=8;
 241   1      
 242   1          SCL=1;
 243   1          _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();   //Tsu:STA
 244   1          SDA=0;
 245   1          _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
 246   1          SCL=0;             //START
 247   1      
 248   1          write_8bit( (address<<1) | 0x01);   //写页地址和操作方式
 249   1          ACK();
 250   1      
 251   1          while (i--)
 252   1          {
 253   2              SDA=1;
 254   2              ddata<<=1;
 255   2              SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;
 256   2              if (SDA) ddata|=0x01;
 257   2          }
 258   1      
 259   1          SCL=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 260   1          SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 261   1              SDA=1;   //STOP
 262   1          delay();
 263   1          return ddata;
 264   1      
 265   1      }
 266          void WriteIIC_24C01(unsigned char address,unsigned char ddata)
 267          {
 268   1      
 269   1          SCL=1;
 270   1          _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();   //Tsu:STA
 271   1          SDA=0;
 272   1          _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
 273   1          SCL=0;             //START
 274   1      
 275   1          write_8bit( (address<<1) & 0xfe);   //写页地址和操作方式,对于24C32-24C256,page不起作用
 276   1      
 277   1          ACK();
 278   1          write_8bit(ddata);      //发送数据
 279   1          ACK();
 280   1          SDA=0;
 281   1              _nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 282   1              SDA=1;   //STOP
 283   1              delay();
 284   1      }
 285          //芯片初始化
 286          void init(void)
 287          {
 288   1              uchar i=10;
 289   1              Tcount=0;                        //用来产生长延时的标志                      
 290   1              KeyCount=0;                      //Ok_Key键所处状态标志
 291   1              Write=0;                         //修改后的数据是否写入EEPROM标志
 292   1              
 293   1              b=ReadIIC_24C01(0x00);           //从EEPROM里读取百位数据
 294   1              s=ReadIIC_24C01(0x01);           //从EEPROM里读取十位数据
 295   1              g=ReadIIC_24C01(0x02);           //从EEPROM里读取个位数据
 296   1              
 297   1              TimeSet=b*100+s*10+g;            //根据从EEPROM里读取的数据,计算出预设的时间初值
 298   1              TimeCount=TimeSet;                   //所要定时的标志
 299   1      
 300   1              while(i--)                       //开机后,将原来所存初始值取出,闪烁10次
C51 COMPILER V7.02b   TEMP                                                                 09/10/2005 10:01:41 PAGE 6   

 301   1              {
 302   2                      P0=tab[b];
 303   2                      P2=tab[s];
 304   2                      P1=tab[g];      
 305   2                      Delay(50);
 306   2                      P0=0x80;
 307   2                      P2=0x80;
 308   2                      P1=0x80;
 309   2                      Delay(50);
 310   2              }
 311   1      
 312   1              EA=1; //开全局中断                                                  
 313   1              ET0=1;//开定时器中断
 314   1              TR0=1;//开定时器0中断
 315   1      
 316   1              EX0=1;//开外部中断
 317   1              IT0=1;//开INTO中断
 318   1              TH0=(65536-50000)/256;  //设置定时器高8位初值
 319   1              TL0=(65536-50000)%256;  //设置定时器低8位初值
 320   1              
 321   1      }
 322          
 323          main()
 324          {
 325   1              init();
 326   1              while(1)
 327   1              {
 328   2                      if(Write) //如果向EEPROM写标志使能,将调整后的数据写入EEPROM内
 329   2                      {
 330   3                              WriteIIC_24C01(0x00,b);
 331   3                              WriteIIC_24C01(0x01,s);
 332   3                              WriteIIC_24C01(0x02,g);
 333   3                              TimeSet=b*100+s*10+g;   //根据设定值来计算出设定值
 334   3                              TimeCount=TimeSet;          //将设定值赋给定时标志
 335   3      
 336   3                              ET0=1;                  //定时器中断使能
 337   3                              TR0=1;  
 338   3                              TH0=(65536-50000)/256;  //设置定时器高8位初值
 339   3                              TL0=(65536-50000)%256;  //设置定时器低8位初值*/
 340   3                              Write=!Write;
 341   3                      }
 342   2                      if(TimeCount==0)
 343   2                      {
 344   3                              TimeCount=TimeSet;      //如果定时完成,重新开始
 345   3                      }
 346   2              }
 347   1      }
 348          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1042    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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