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

📄 table_lamp_uart.lst

📁 《爱上单片机》配书光盘
💻 LST
字号:
C51 COMPILER V6.12  TABLE_LAMP_UART                                                        07/27/2009 15:25:36 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE TABLE_LAMP_UART
OBJECT MODULE PLACED IN Table_lamp_UART.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Table_lamp_UART.c DEBUG OBJECTEXTEND

stmt level    source

   1          /*********************************************************************************************
   2          程序名:    触控调光台灯(UART串口调试版)
   3          编写人:    杜洋 
   4          编写时间:  2009年 7月 25日
   5          硬件支持:  STC12C2052  12MHz
   6          接口说明:  P3.7(PWM0)用PWM控制LED,P1.5~P1.7接3路触摸键  
   7          修改日志:  
   8            NO.1-20090725_0622 完成触控开关LED灯部分和PWM调光部分程序。
   9          	NO.2-20090725_0638 完成开关灯时的渐变亮度。
  10          	NO.3-20090725_1208 加入UART串口调试程序。								
  11          /*********************************************************************************************
  12          说明:电路制作时需要将触摸键和VCC线放在一起,然后触摸时将手同时触摸按键引脚和VCC线。
  13          
  14          /*********************************************************************************************/
  15          
  16          #include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列单片机头文件
  17          
  18          sbit ON_OFF_Key = P1 ^ 7; //ON/OFF开关键
  19          sbit Add_Key = P1 ^ 6; //加亮度(+)
  20          sbit Doc_Key = P1 ^ 5; //减亮度(-)
  21          //LED与P3.7(PWM0)连接
  22          
  23          unsigned char Bright=0x88; //全局变量,亮度值
  24          bit POWER=0; //LED灯开/关状态标志位 
  25          
  26          
  27          /*********************************************************************************************
  28          函数名:PWM初始化函数
  29          调  用:PWM_init();
  30          参  数:无
  31          返回值:无
  32          结  果:将PCA初始化为PWM模式,初始占空比为0
  33          备  注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
  34          /**********************************************************************************************/
  35          void PWM_init (void){
  36   1      CMOD=0x02; //设置PCA定时器
  37   1       	CL=0x00; 
  38   1       	CH=0x00;
  39   1      	CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
  40   1       	CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
  41   1       	CCAP0H=0x00; // PWM0初始时为0
  42   1       	CR=1; //启动PCA定时器
  43   1      }
  44          /**********************************************************************************************/
  45          
  46          /*********************************************************************************************
  47          函数名:PWM0占空比设置函数
  48          调  用:PWM0_set();
  49          参  数:0x00~0xFF(亦可用0~255)
  50          返回值:无
  51          结  果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
  52          备  注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
  53          /**********************************************************************************************/
  54          void PWM0_set (unsigned char a){
  55   1      	CCAP0L= a; //设置值直接写入CCAP0L
C51 COMPILER V6.12  TABLE_LAMP_UART                                                        07/27/2009 15:25:36 PAGE 2   

  56   1       	CCAP0H= a; //设置值直接写入CCAP0H
  57   1      }
  58          /**********************************************************************************************/
  59          
  60          /*********************************************************************************************
  61          函数名:毫秒级CPU延时函数
  62          调  用:DELAY_MS (?);
  63          参  数:1~65535(参数不可为0)
  64          返回值:无
  65          结  果:占用CPU方式延时与参数数值相同的毫秒时间
  66          备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
  67          /*********************************************************************************************/
  68          void DELAY_MS (unsigned int a){
  69   1      	unsigned int i;
  70   1      	while( --a != 0){
  71   2      		for(i = 0; i < 600; i++);
  72   2      	}
  73   1      }
  74          /*********************************************************************************************/
  75          
  76          /*********************************************************************************************
  77          函数名:UART串口初始化函数
  78          调  用:UART_init();
  79          参  数:无
  80          返回值:无
  81          结  果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
  82          备  注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
  83          /**********************************************************************************************/
  84          void UART_init (void){
  85   1      	EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
  86   1      	ES = 1; //允许UART串口的中断
  87   1      
  88   1      	TMOD = 0x20;	//定时器T/C1工作方式2
  89   1      	SCON = 0x50;	//串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
  90   1      	TH1 = 0xF3;	//定时器初值高8位设置
  91   1      	TL1 = 0xF3;	//定时器初值低8位设置
  92   1      	PCON = 0x80;	//波特率倍频(屏蔽本句波特率为2400)
  93   1      	TR1 = 1;	//定时器启动    
  94   1      }
  95          /**********************************************************************************************/
  96          
  97          /*********************************************************************************************
  98          函数名:UART串口发送函数
  99          调  用:UART_T (?);
 100          参  数:需要UART串口发送的数据(8位/1字节)
 101          返回值:无 
 102          结  果:将参数中的数据发送给UART串口,确认发送完成后退出
 103          备  注:
 104          /**********************************************************************************************/
 105          void UART_T (unsigned char UART_data){ //定义串口发送数据变量
 106   1      	SBUF = UART_data;	//将接收的数据发送回去
 107   1      	while(TI == 0);		//检查发送中断标志位
 108   1      	TI = 0;			//令发送中断标志位为0(软件清零)
 109   1      }
 110          /**********************************************************************************************/
 111          
 112          /*********************************************************************************************
 113          函数名:主函数
 114          调  用:无
 115          参  数:无
 116          返回值:无
 117          结  果:程序开始处,无限循环
C51 COMPILER V6.12  TABLE_LAMP_UART                                                        07/27/2009 15:25:36 PAGE 3   

 118          备  注:
 119          /**********************************************************************************************/
 120          void main (void){
 121   1      	PWM_init(); //PWM初始化
 122   1      	UART_init(); //串口小秘书在此初始化了 ^_^
 123   1      
 124   1      	P1M0 = 0xff; //将P1接口设置为高阻态输入 
 125   1      	P1M1 = 0x00; //触摸按键启用
 126   1      
 127   1      	DELAY_MS (200); //延时等待I/O接口电平状态稳定
 128   1      
 129   1      	while(1){ //循环程序部分
 130   2      		unsigned char a; //临时变量
 131   2      
 132   2      		UART_T (Bright); //把亮度值发给PC机 @_@|||
 133   2      		
 134   2      		if(ON_OFF_Key == 1){ //开关键按下
 135   3      			if(POWER == 0){ //如果当前状态为关,则执行开灯程序
 136   4      				for(a=0;a<=Bright;a++){ //
 137   5      					PWM0_set(a);
 138   5      					DELAY_MS (20); //渐暗的时间间隔		
 139   5      				}
 140   4      				PWM0_set(Bright); //达到存储的LED亮度
 141   4      				POWER = 1; //把状态标志位变成开	
 142   4      			}else{ //如果当前状态为开,则执行关灯程序
 143   4      				for(a=Bright;a>0;a--){ //循环渐暗
 144   5      					PWM0_set(a);
 145   5      					DELAY_MS (20); //渐暗的时间间隔	
 146   5      				}
 147   4      				PWM0_set(0); //关LED
 148   4      				POWER = 0; //把状态标志位变成关
 149   4      			}
 150   3      			while(ON_OFF_Key == 1); //等待按键放开
 151   3      		}
 152   2      
 153   2      		if(Add_Key == 1 && POWER == 1){ //加亮度键按下,同时在开灯状态下
 154   3      			Bright++; //亮度值加1
 155   3      			PWM0_set(Bright); //将值写入PWM控制LED亮度
 156   3      			if(Bright >= 0xFD){ //如果亮度值大于0xFD,则不再增加
 157   4      				Bright = 0xFD;
 158   4      			}
 159   3      			DELAY_MS (20); //渐变亮度的时间间隔
 160   3      		}
 161   2      
 162   2      		if(Doc_Key == 1 && POWER == 1){ //减亮度键按下,同时在开灯状态下
 163   3      			Bright--; //亮度值减1
 164   3      			PWM0_set(Bright); //将值写入PWM控制LED亮度
 165   3      			if(Bright < 0x08){ //如果亮度值小于0x08,则不再减少
 166   4      				Bright = 0x08;
 167   4      			}
 168   3      			DELAY_MS (20); //渐变亮度的时间间隔
 169   3      		}
 170   2      	}
 171   1      }
 172          /**********************************************************************************************/
 173          
 174          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    228    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V6.12  TABLE_LAMP_UART                                                        07/27/2009 15:25:36 PAGE 4   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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