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

📄 main.lst

📁 新手上路
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  01/23/2007 22:31:40 PAGE 1   


C51 COMPILER V7.50, 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          **采用LCD显示时间
   3          **使用T2的16位自动重装模式来精确计时
   4          **clock:18.432M
   5          ***************************/
   6          #include "STC89C51RC.H"
   7          #include "intrins.h"
   8          #include "lcd.h"
   9          
  10          sbit SW    = P1^0;
  11          sbit BMSW1 = P2^3;
  12          sbit BMSW2 = P2^4;
  13          sbit BMSW  = P2^5;
  14          
  15          #define FLASH_BYTE_READ 1
  16          #define FLASH_BYTE_WRITE 2
  17          #define FLASH_SECTOR_CLR 3
  18          #define ISP_TRIG1 0x46
  19          #define ISP_TRIG2 0xb9
  20          #define ISP_EN_T 0x81//设置等待时间和ISP使能
  21          #define FLASH_ADDR_SEC 0x2000//这是第1个扇区,每个扇区512字节,共有10个扇区
  22          #define FLASH_ADDR_MIN 0x2200//这是第2个扇区
  23          #define FLASH_ADDR_HOUR 0x2400//这是第3个扇区
  24          
  25          struct time //定义一个存储时间结构
  26          {
  27                  unsigned char hour,min,sec;
  28          };
  29          struct time curtime = {0,0,0};//用于存放当前时间
  30          struct time disptime = {24,60,60};//用于存放显示时间,赋个不正确的值,上电时用来刷新显示
  31          extern unsigned char pdata disp_buffer[15];
  32          unsigned char delayNs;
  33          unsigned char delayN33ms;
  34          
  35          
  36          /***********************************************
  37          功能:时钟计时中断
  38          描述:定时器2的中断服务程序,每33ms重装一次定时器
  39               18.432M晶振,30次中断为1秒
  40          参数:无
  41          返回:无
  42          ***********************************************/
  43          void timer2_int() interrupt 5 using 3
  44          {
  45   1              static unsigned char time2_count = 0;
  46   1              TF2 = 0;//time2需要软件清除中断标志位
  47   1              time2_count++;
  48   1              delayN33ms--;
  49   1              if(time2_count >= 30)
  50   1              {
  51   2                      time2_count = 0;
  52   2                      delayNs--;
  53   2                      curtime.sec++;
  54   2              }
  55   1              if(curtime.sec >= 60)
C51 COMPILER V7.50   MAIN                                                                  01/23/2007 22:31:40 PAGE 2   

  56   1              {
  57   2                      curtime.sec = 0;
  58   2                      curtime.min++;
  59   2              }
  60   1              if(curtime.min >= 60)
  61   1              {
  62   2                      curtime.min = 0;
  63   2                      curtime.hour++;
  64   2              }
  65   1              if(curtime.hour >= 24)curtime.hour = 0;
  66   1      }
  67          
  68          /***********************************************
  69          功能:FLASH扇区擦除
  70          描述:擦除1个扇区
  71          参数:扇区地址
  72          返回:无
  73          ***********************************************/
  74          void flash_clr(unsigned int sector_addr)
  75          {
  76   1              ISP_ADDRH = sector_addr >> 8;
  77   1              ISP_ADDRL = sector_addr & 0x00ff;
  78   1              ISP_CONTR = ISP_EN_T;
  79   1              ISP_CMD = FLASH_SECTOR_CLR;
  80   1              ISP_TRIG = 0x46;
  81   1              ISP_TRIG = 0xb9;//0x46,0xb9是特定的触发信号
  82   1              _nop_();
  83   1      }
  84          
  85          
  86          /***********************************************
  87          功能:FLASH写
  88          描述:写1个字节至FLASH
  89          参数:地址,要写的1个字节数据
  90          返回:无
  91          ***********************************************/
  92          void flash_write(unsigned int addr,unsigned char byte)
  93          {
  94   1              ISP_DATA = byte;
  95   1              ISP_ADDRH = addr >> 8;
  96   1              ISP_ADDRL = addr & 0x00ff;
  97   1              ISP_CONTR = ISP_EN_T;
  98   1              ISP_CMD = FLASH_BYTE_WRITE;
  99   1              ISP_TRIG = 0x46;
 100   1              ISP_TRIG = 0xb9;//0x46,0xb9是特定的触发信号
 101   1              _nop_();
 102   1      }
 103          
 104          /***********************************************
 105          功能:FLASH读
 106          描述:读1个字节从FLASH
 107          参数:地址
 108          返回:读出的1个字节数据
 109          ***********************************************/
 110          unsigned char flash_read(unsigned int addr)
 111          {
 112   1              ISP_ADDRH = addr >> 8;
 113   1              ISP_ADDRL = addr & 0x00ff;
 114   1              ISP_CONTR = ISP_EN_T;
 115   1              ISP_CMD = FLASH_BYTE_READ;
 116   1              ISP_TRIG = 0x46;
 117   1              ISP_TRIG = 0xb9;//0x46,0xb9是特定的触发信号
C51 COMPILER V7.50   MAIN                                                                  01/23/2007 22:31:40 PAGE 3   

 118   1              _nop_();
 119   1              return(ISP_DATA);
 120   1      }
 121          
 122          /***********************************************
 123          功能:主函数
 124          描述:主函数
 125          参数:无
 126          返回:无
 127          ***********************************************/
 128          void main (void)
 129          {
 130   1              unsigned char i,j;
 131   1              unsigned char stat = 0;
 132   1              bit bmsw_temp,wink;
 133   1              IE = 0xa0;//中断允许ET2
 134   1              RCAP2H = 0x38;//自动重装数
 135   1              RCAP2L = 0x00;//33MS中断一次
 136   1              T2CON = 0x04;//T2工作在16位自动重装模式并开始计时
 137   1      
 138   1              P0 = 0xff;
 139   1              P1 = 0xff;
 140   1              P2 = 0xff;
 141   1              P3 = 0xff;
 142   1      
 143   1              bmsw_temp = BMSW1;//
 144   1              lcd_init();//LCD 初始化
 145   1      //      while(delay3s);
 146   1      //      write_char(1,37);//第一个字符全显
 147   1              disp_buffer[0] = 0x12;//显示两处间隔秒点
 148   1              lcd_update(0,1);
 149   1              if(SW)//这样来控制上电时是否读FLASH
 150   1              {
 151   2                      curtime.sec = flash_read(FLASH_ADDR_SEC);//读FLASH,
 152   2                      curtime.min = flash_read(FLASH_ADDR_MIN);//读FLASH,
 153   2                      curtime.hour = flash_read(FLASH_ADDR_HOUR);//读FLASH,
 154   2              }
 155   1              do//主循环
 156   1              {

⌨️ 快捷键说明

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