单片机源代码:
#include #define Tpwm 0xfc18//PWM周期对应的计数值1ms,基于12MHz晶振 unsigned int duty[]={0,/*0*/ 0xff9c/*100us*/,0xff38/*200us*/,0xfed4/*300us*/, 0xfe70/*400us*/,0xfe0c/*500us*/,0xfda8/*600us*/, 0xfd44/*700us*/,0xfce0/*800us*/,0xfc7c/*900us*/, 0xfc18/*1000us*/};//PWM高电平时间 unsigned char i=0; sbit P32 = P3^2; sbit P33 = P3^3; sbit PWMOUT = P2^0; sbit PWMIN1 = P2^1; sbit PWMIN2 = P2^2; bit flag = 1;//PWM输出电平状态,1为输出高电平时间,0为输出低电平时间 void delay10ms(int n); void main(void) { PWMOUT = 0;//初始化L293D ,停止电机 PWMIN1 = 0; PWMIN2 = 1; EA = 1; //开总中断 IT0 = 1; //中断方式为跳变 IT1 = 1; EX0 = 1; //打开外部中断0 EX1 = 1; //打开外部中断1 ET0 = 1; //开定时器0中断允许 TMOD = 0x01; //设置定时方式 while(1) //等待中断 { /*在此可以实现其它任务*/ } } //10ms延时函数 void delay10ms(int n) { int i=0,j; while(n--) { for(i=0;i<10;i++) { for(j = 0; j < 125; j++); } } } void keySpeeddownISR() interrupt 0 //按键中断服务程序 { EA = 0; //关中断 delay10ms(2); //延时消抖 if (!P32) //确认按键按下,滤除键盘抖动干扰 {//减少PWM高电平时间 if(i>0) i--; if((TR0=1) && (i == 0)) { TR0 = 0; PWMOUT = 0; } } EA = 1; } void keySpeedupISR() interrupt 2 //按键中断服务程序 { EA = 0; //关中断 delay10ms(2); //延时消抖 if (!P33) //确认按键按下,滤除键盘抖动干扰 {//增加PWM高电平时间 if(i<=10) i++; if((TR0 == 0) && (i > 0)) {//启动PWM,电机顺时针旋转 PWMIN1 = 0; PWMIN2 = 1; PWMOUT = 1; TH0 = duty[i]>>8; TL0 = duty[i]&0xff; TR0 = 1; flag = 1; } } EA = 1; } void T0ISR() interrupt 1 //定时器0中断服务程序 { EA = 0; //关中断 if(flag) {//高电平时间结束,输出低电平补齐PWM周期 PWMOUT = 0; TH0 = (65535-(duty[i]-Tpwm))>>8; TL0 = (65535-(duty[i]-Tpwm))&0xff; flag = 0; }else {//周期结束 PWMOUT = 1; TH0 = duty[i]>>8; TL0 = duty[i]&0xff; flag = 1; } EA = 1; }
上一篇:51单片机+TM1638驱动数码管测试程序
下一篇:4*4矩阵按键《行列反转法》扫描依次显示0-f
推荐阅读最新更新时间:2024-11-07 07:32
设计资源 培训 开发板 精华推荐
- pc扩展vl822+fe2.1+rtl8153(全验证完毕)
- 【未验证】 bm3451-6至8串保护板
- 使用 AD9281 双通道、8 位分辨率 CMOS ADC 作为外部基准的典型应用
- 2.9寸墨水屏驱动板(已验证)
- AKD7719-A,AK7719 DSP 音频评估板
- TWR-MCF51AG: ColdFire MCF51AG塔式系统模块
- LTC2195CUKG、16 位、125Msps 低功耗双通道 ADC 的典型应用
- 适用于STM32G031K8 MCU的STM32 Nucleo-32开发板,支持Arduino nano连接
- [视频]万粉UP疑似盗平台IP6518模块设计资料流出
- STK404-140 厚膜混合IC 单通道AB类音频功率放大器IC 120W典型应用