51单片机DA

  1 /**************************************************************************************                                                                                        
  2 *                      DA-PWM输出实验                                                  *                                
  3 实现现象:下载程序后DA模块上的指示灯呈呼吸灯效果,由暗变亮再由亮变暗                                                                                        
  4 注意事项:要将AD/DA模块上的短接片将OUT和LED短接,板子丝印上有。                                                                                        
  5           如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。                                                                                  
  6 ***************************************************************************************/                                                                                        
  7                                                                                         
  8 #include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器                                                                            
  9                                                                                         
 10 typedef unsigned int u16;      //对数据类型进行声明定义                                                                                    
 11 typedef unsigned char u8;                                                                                        
 12                                                                                         
 13 //--定义使用的IO口--//                                                                                        
 14 sbit PWM=P2^1;                                                                                        
 15 bit DIR;                                                                                        
 16                                                                                         
 17 //--定义一个全局变量--//                                                                                         
 18 u16 count,value,timer1;                                                                                        
 19                                                                                         
 20 /*******************************************************************************                                                                                        
 21 * 函 数 名         : Timer1Init                                                                                        
 22 * 函数功能           : 定时器1初始化                                                                                
 23 * 输    入         : 无                                                                                        
 24 * 输    出         : 无                                                                                        
 25 *******************************************************************************/                                                                                        
 26 void Timer1Init()                                                                                        
 27 {                                                                                        
 28     TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。                                                                                    
 29                                                                                         
 30     TH1 = 0xFF;                                                                                     
 31     TL1 = 0xff;   //1us                                                                                    
 32                                                                                         
 33     ET1=1;//打开定时器1中断允许                                                                                    
 34     EA=1;//打开总中断                                                                                    
 35     TR1=1;//打开定时器                                                                                    
 36 }                                                                                        
 37                                                                                         
 38                                                                                         
 39 /*******************************************************************************                                                                                        
 40 * 函 数 名       : main                                                                                        
 41 * 函数功能         : 主函数                                                                                
 42 * 输    入       : 无                                                                                        
 43 * 输    出         : 无                                                                                    
 44 *******************************************************************************/                                                                                        
 45 void main()                                                                                        
 46 {                                                                                        
 47     Timer1Init();  //定时器1初始化                                                                                    
 48     while(1)                                                                                    
 49     {                                                                                    
 50         if(count>100)                                                                                
 51         {                                                                                  
 52             count=0;                                                                            
 53             if(DIR==1)                       //DIR控制增加或减小                                                        
 54             {                                                                            
 55               value++;                                                                            
 56             }                                                                            
 57             if(DIR==0)                                                                            
 58             {                                                                            
 59               value--;                                                                            
 60             }                                                                            
 61                                                                                         
 62         }                                                                                
 63                                                                                         
 64         if(value==1000)                                                                                
 65         {                                                                                
 66           DIR=0;                                                                                
 67         }                                                                                
 68         if(value==0)                                                                                
 69         {                                                                                
 70           DIR=1;                                                                                
 71         }                                                                                
 72                                                                                         
 73         if(timer1>1000)  //PWM周期为1000*1us                                                                                
 74         {                                                                                
 75             timer1=0;                                                                            
 76         }                                                                                
 77         if(timer1 <value)                                                                                
 78         {                                                                                
 79             PWM=1;                                                                            
 80         }                                                                                
 81         else                                                                                
 82         {                                                                                
 83             PWM=0;                                                                            
 84         }                                                                                
 85     }                                                                                    
 86 }                                                                                        
 87                                                                                         
 88 /*******************************************************************************                                                                                        
 89 * 函 数 名       : Time1                                                                                        
 90 * 函数功能         : 定时器1的中断函数                                                                                
 91 * 输    入       : 无                                                                                        
 92 * 输    出       : 无                                                                                        
 93 *******************************************************************************/                                                                                        
 94                                                                                         
 95 void Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断                                                                                        
 96 {                                                                                        
 97     TH1 = 0xFF;                                                                                     
 98     TL1 = 0xff;   //1us                                                                                    
 99     timer1++;                                                                                     
100     count++;                                                                                        
101                                                                                         
102 }                                                                                        

猜你喜欢

转载自www.cnblogs.com/clam-hao/p/10076622.html