超声波驱鼠器设计原理和C程序源码参考
用的物料:STC单片机一个,蜂鸣器一个,LED一个,稳压器一个.
参考程序:
#include
/************* 功能说明 **************
本程序使用定时器做软件PWM。
定时器0做16位自动重装,中断,从T0CLKO高速输出PWM。
本例程是使用STC15F/L系列MCU的定时器T0做模拟PWM的例程。
PWM可以是任意的量程。但是由于软件重装需要一点时间,所以PWM占空比最小为32T/周期,最大为(周期-32T)/周期, T为时钟周期。
PWM频率为周期的倒数。假如周期为6000, 使用24MHZ的主频,则PWM频率为4000HZ。
******************************************/ typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32;
#define MAIN_Fosc 24000000UL //定义主时钟
//#define PWM_DUTY 1200 //定义PWM的周期,数值为时钟周期数,假如使用24.576MHZ的主频,则PWM频率为6000HZ。 u16 PWM_DUTY=1200;
#define PWM_HIGH_MIN 32 //限制PWM输出的最小占空比。用户请勿修改。
#define PWM_HIGH_MAX (PWM_DUTY-PWM_HIGH_MIN) //限制PWM输出的最大占空比。用户请勿修改。
sfr P1M1 = 0x91; //P1M1.n,P1M0.n =00--->Standard, 01--->push-pull sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain sfr AUXR = 0x8E; sfr INT_CLKO = 0x8F;
//sbit P_PWM = P3^5; //定义PWM输出引脚。
sbit P_PWM = P1^2; //定义PWM输出引脚。STC15W204S sbit led = P1^1;
u16 pwm; //定义PWM输出高电平的时间的变量。用户操作PWM的变量。
u16 PWM_high,PWM_low; //中间变量,用户请勿修改。
void delay_ms(unsigned char ms); void LoadPWM(u16 i); void pwmflash();
/******************** 主函数**************************/ void main(void) {
P_PWM = 0;
//P3M1 &= ~(1 << 5); //P3.5 设置为推挽输出 //P3M0 |= (1 << 5);
P1M1 &= ~(1 << 4); //P1.4 设置为推挽输出 STC15W204S P1M0 |= (1 << 4);
TR0 = 0; //停止计数 ET0 = 1; //允许中断 PT0 = 1; //高优先级中断
TMOD &= ~0x03; //工作模式,0: 16位自动重装 AUXR |= 0x80; //1T TMOD &= ~0x04; //定时
INT_CLKO |= 0x01; //输出时钟
TH0 = 0; TL0 = 0;
TR0 = 1; //开始运行
EA = 1;
pwm = PWM_DUTY / 10; //给PWM一个初值,这里为10%占空比 LoadPWM(pwm); //计算PWM重装值
while (1) { // pwmflash();
while(PWM_DUTY>400) { PWM_DUTY-=100; pwmflash(); led=0; delay_ms(10); led=1; delay_ms(10); }
while(PWM_DUTY<1200) { PWM_DUTY+=100; pwmflash(); led=0; delay_ms(10); led=1; delay_ms(10); } /**/ } }
//========================================================================
// 函数: void delay_ms(unsigned char ms) // 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟. // 返回: none. // 版本: VER1.0 // 日期: 2013-4-1 // 备注:
//========================================================================
void delay_ms(unsigned char ms) {
unsigned int i; do{
i = MAIN_Fosc / 13000; while(--i) ; }while(--ms);
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库超声波驱鼠器设计原理和C程序源码参考在线全文阅读。
相关推荐: