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

📄 counter3.lst

📁 89s51单片机做的计数器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   COUNTER3                                                              12/07/2006 03:10:11 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE COUNTER3
OBJECT MODULE PLACED IN counter3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE counter3.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          ////////////////////////////
   2          //private counter
   3          //cjy 2006 11.28 at GDUT
   4          ///////////////////////////
   5          #include "reg52.h"
   6          #include "math.h"
   7          #include "24c02.h"
   8          ////////端口定义///////////
   9          #define com_port  P0//共阳
  10          #define bit_port   P2 //位选
  11          sbit motor     =P3^1;//总计数LED
  12          sbit src       =P3^0;//可控硅 
  13          sbit relay     =P3^6;//继电器 
  14          sbit count_in  =P3^2;//计数传感器输入
  15          ///////按键定义///////////
  16          #define set   1
  17          #define right 2
  18          #define up    3
  19          #define rst   4
  20          /////////led数码管笔画表////////////
  21          unsigned char code led_tab[]={     
  22                  0xC0,/*0*/
  23                  0xF9,/*1*/
  24                  0xA4,/*2*/
  25                  0xB0,/*3*/
  26                  0x99,/*4*/
  27                  0x92,/*5*/
  28                  0x82,/*6*/
  29                  0xF8,/*7*/
  30                  0x80,/*8*/
  31                  0x90,/*9*/
  32                          0x88,/*A*/
  33                  0x83,/*b*/
  34                  0xBF,/*-*/};
  35          ///////函数声明/////////////////////
  36          void sys_init(void);
  37          void led_display(void);
  38          void conver(void);
  39          unsigned char scan_key(void);
  40          unsigned get_key(void);
  41          void delay(unsigned int t);
  42          void read_all(void);
  43          void write_all(void);
  44          void write_fall(void);
  45          void write_rise(void);
  46          ///////变量声明/////////////////////
  47          struct buff//定义一个结构体
  48          {
  49           unsigned char count_bits[6];//
  50           unsigned long  count_num;
  51          };
  52          struct buff count_buff[5];
  53          struct buff *p;
  54          char count_bit;
  55          unsigned char status=0;
C51 COMPILER V7.06   COUNTER3                                                              12/07/2006 03:10:11 PAGE 2   

  56          unsigned int fall,rise;
  57          bit flash_all=0;
  58          bit last_status=0;
  59          unsigned char add_time=0;
  60          ////////////主函数//////////////////
  61          void main(void)
  62          { // i=10,temp;
  63   1       sys_init();
  64   1       x24c02_init();
  65   1       count_bit=-1;
  66   1       status=0;
  67   1       p=count_buff; 
  68   1       read_all(); //for (temp=0;temp<100;temp++) x24c02_write(temp, 0);
  69   1         ///x24c02_write(10, 1);y=x24c02_read(10);p->count_num= y;p->count_num<<=8;y=123;p->count_num|=y;
  70   1       conver();
  71   1       while(1)
  72   1          { 
  73   2               switch(get_key())
  74   2             {
  75   3             case set:
  76   3                      flash_all=0;
  77   3                          p++;status++;count_bit=-1;
  78   3                          if(status>3) 
  79   3                      {p=count_buff; status=0;}
  80   3                              write_all();
  81   3                          break;
  82   3             case right:
  83   3                      flash_all=(status==0);
  84   3                      count_bit--;
  85   3                          if(count_bit<0) 
  86   3                            {
  87   4                                  if(status==1||status==2)
  88   4                          count_bit=3 ;
  89   4                              else   
  90   4                                      count_bit=5;
  91   4                             }
  92   3                     break;
  93   3             case up: 
  94   3                     if(count_bit>0)
  95   3                            {
  96   4                                if((p->count_bits[count_bit])==9)
  97   4                                 p->count_num-=9*pow(10,(count_bit));
  98   4                                 else
  99   4                                  p->count_num+=pow(10,count_bit);   
 100   4                                 }
 101   3                         if(status==0&&flash_all==1)
 102   3                               {    
 103   4                              p=count_buff;   
 104   4                                      flash_all=0;
 105   4                                      count_bit=-1;
 106   4                                  write_all();
 107   4                               }
 108   3                     break;
 109   3             case rst:
 110   3                     status=0; 
 111   3                         p=count_buff; 
 112   3                         flash_all=0; 
 113   3                         count_bit=-1;
 114   3                         count_buff[0].count_num=0;
 115   3                         write_all();
 116   3                     break;
 117   3            default:  
C51 COMPILER V7.06   COUNTER3                                                              12/07/2006 03:10:11 PAGE 3   

 118   3                              ;     
 119   3                          break;
 120   3             }
 121   2            conver();
 122   2            led_display();
 123   2               }
 124   1      
 125   1      }
 126          //T0中断服务程序
 127          void timer0_int (void) interrupt 1
 128          {
 129   1       
 130   1       if(last_status^count_in)
 131   1        {   
 132   2                if(last_status)
 133   2                   {
 134   3                     fall++; 
 135   3                         if(fall>=count_buff[2].count_num)
 136   3                           {
 137   4                         fall=0;
 138   4                                 src=0;relay=0;
 139   4                               }
 140   3                    write_fall();
 141   3                        }
 142   2               else
 143   2                        {
 144   3                         rise++;
 145   3                         if(rise>=(count_buff[1].count_num-count_buff[2].count_num))
 146   3                             { 
 147   4                              rise=0;
 148   4                              count_buff[0].count_num++; //write_all();
 149   4                          src=1;relay=1;
 150   4                                 } 
 151   3                         write_rise();
 152   3                         }
 153   2              if(count_buff[1].count_num<=count_buff[0].count_num)
 154   2                {
 155   3                 motor=1;
 156   3                 relay=1;
 157   3                }
 158   2          last_status=count_in;
 159   2        }
 160   1      
 161   1      }
 162          void sys_init(void)
 163          {
 164   1      //这里编写需要初始化的参数
 165   1      TMOD=0x02;//T0,方式2,8位自动重装
 166   1      TH0=0;//12MHZ 晶振时,0.256ms
 167   1      TL0=0;
 168   1      ET0=1;
 169   1      EA=1;
 170   1      TR0=1;//开定时器
 171   1      }
 172          
 173          ////////////////////////////////////////////////////
 174          void conver(void)
 175          {
 176   1       unsigned long int i;
 177   1       unsigned char j;
 178   1       i=p->count_num;
 179   1       for(j=0;j<6;j++)
C51 COMPILER V7.06   COUNTER3                                                              12/07/2006 03:10:11 PAGE 4   

 180   1       {

⌨️ 快捷键说明

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