源码 1、 PWM的使用方法
/************************** 名称:void pwm0_set(u16 Pec) 功能:pwm0 设置, 参数Pec为占空比 **/ void pwm0_set(u16 Pec) { u16 Val=0; Write_Dgus(0x87,0x2042); //配置频率 100kHz=825.7536MHz/0x2042(8258) Write_Dgus(0x86,0x5A01); //配置分频系数 pwm0配置100khz/1=100khz Val=(u32)Pec*0x2042/100; Write_Dgus(0x92,Val); //配置占空比 } 2、 ADC的使用方法 /****************************************** 名称:void ad_deal() 功能:AD处理函数,根据ad值调节pwm占空比 ****/ void ad_deal() { u16 Val=0,Va2=0; Val=Read_Dgus(0x38);//AD6 Va2=Read_Dgus(0x39);//AD7 if(Val>1240) // AD6的电压大于62mv=1240*3300/65535时配置pwm1的占空比为100% { pwm1_set(100); }else{ // AD6的电压小于于62mv时配置pwm1的占空比0% pwm1_set(0); } if(Va2>1240)//AD7的电压大于62mv=1240*3300/65535时配置pwm0的占空比为100%
{ pwm0_set(100); }else{// AD7的电压小于于62mv时配置pwm0的占空比0% pwm0_set(0); } }
3、 IO的使用方法
/************************************************ 名称:void io_init() 功能:io口每秒翻转一次 *****/ void io_init() { P1MDOUT =0xFF; P2MDOUT =0xF0; //P2^0 P2^1 P2^2 P2^ 3 input P2^4 P2^5 P2^6 P2^ 7 output P3MDOUT =0x0F; //开启P3_2和P3_3的输出 P3_2=RTC_SCL P3_3=RTC_SDA PORTDRV = 0x01; //IO驱动能力设定 4mA=0,8mA=1,16mA=2,32mA=3
} sbit IOP_20 = P2^0; /************************************************ 名称:void io_deal() 功能:io口每秒翻转一次 *****/ void io_deal() {
if(SysTick_IO==0) { SysTick_IO=1000; //在定时器中断中每ms减一 P1=~P1; //IO口翻转 P2=~P2; P3=~P3; } if(IOP_20) //读取io口P2^0的状态 { Write_Dgus(0x2100,1); // 往变量地址0x2100写1 }else { Write_Dgus(0x2100,0); // 往变量地址0x2100写0
} }
4、 UART的使用方法
void Uart2_Init(u32 baud_rate){ u16 i=0; i=1024-FOSC/64/baud_rate; SREL2H = (u8)(i>>8); //波特率 = FCLK/64*(1024-SREL) SREL2L = (u8)i; // MUX_SEL|=0x40; //UART2引出,UART3不引出,WDT关闭 ADCON = 0x80; //选择SREL0H:L作为波特率发生器 SCON2 = 0x50; //接受使能和模式设置 PCON &= 0x7F; //SMOD=0 IEN0 |= 0X10; //ES0=1 串口2 接受+发送中断 EA = 1; }
附: /************************************************ 名称:void test_all() 功能:测试程序统一处理在main中调用 *****/ void test_all() { io_deal();//io口处理函数 ad_deal();//ad处理函数,根据ad值调节pwm占空比 }
/************************************************ 名称:void Main() 功能:程序入口 Main函数 *****/
void Main() { Sys_Cpu_Init(); //系统初始化 uart_init();// 串口初始化 io_init();// io口初始化 while(1) { Clock(); //rtc驱动 if(Count_num1==0) { Sw_Data_Send ();//数据自动上传 Count_num1=10;//在定时中断中自减 } uart_frame_deal();//串口数据处理 test_all(); //测试程序 } }
/********************************************************************* 名称:void Sys_Timer2_isr() interrupt 5 功能:定时器中断 *******/ void Sys_Timer2_isr() interrupt 5 //1MS进入中断函数 { TF2=0;//清除定时器2的中断标志位 if(TimVal<255)TimVal++; SysTick_RTC++; if(T_O5>0)T_O5--; if(T_O4>0)T_O4--; if(T_O3>0)T_O3--; if(T_O2>0)T_O2--; if(SysTick_IO>0)SysTick_IO--; if(Count_num1>0) Count_num1--; }
|