按键设置占空比,PWM控速

上传人:博****1 文档编号:487628202 上传时间:2023-12-26 格式:DOC 页数:10 大小:73.50KB
返回 下载 相关 举报
按键设置占空比,PWM控速_第1页
第1页 / 共10页
按键设置占空比,PWM控速_第2页
第2页 / 共10页
按键设置占空比,PWM控速_第3页
第3页 / 共10页
按键设置占空比,PWM控速_第4页
第4页 / 共10页
按键设置占空比,PWM控速_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《按键设置占空比,PWM控速》由会员分享,可在线阅读,更多相关《按键设置占空比,PWM控速(10页珍藏版)》请在金锄头文库上搜索。

1、/*接法:P0段选;P3键盘功能:通过按键设置PWM占空比进而控制电机转速*/原理图:程序:#include #include#define uint unsigned int/下面用uint代替unsigned int(无符号整数)#define uchar unsigned char/下面用uchar代替unsigned char(无符号字符型数)#define GPIO_DIG P0/下面用GPIO_DIG代替P0口,P0口送数码管段选信号#define keyport P3/keyport代替P3,P3口键盘扫描sbit shi = P25;/数码管位选(十位) ,用shi代替 P25

2、sbit ge = P26;/数码管位选(个位)sbit LED = P27;/P27控制LED闪烁sbit PWM = P10;/P10输出pwmunsigned char code table17 = /定义一个数组存放共阴极数码管码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar temp=0,0; /临时存放占空比的数组uchar duty=0,0; /存放占空比的数组,duty0存十位duty1存个位char flag = 0; /按键的一个标志按一次键加1,

3、uchar key = 0; /存放键值uchar t0; /存放占空比()uint timer1;uint count;uint period;uint t = 0;/* 子函数声明*/void delay10ms(void); /10ms延时软件消抖的声明void delayxms(uint x);/延时xms的函数的声明void matrixscan(void); /键盘检测函数的声明void Time1Config(void);/定时器设置函数的声明void set(void);/设置占空比的函数void display(void);/数码管动态显示函数声明/* 主函数*/void m

4、ain()Time1Config();while(1)set();matrixscan();display();t0=duty0*10+duty1;/* 子函数定义*/*延时10ms函数的定义(无入口参数无返回值)*/void delay10ms() uchar a,b,c;for(a=1;a0;a-)for(b=38;b0;b-)for(c=130;c0;c-);/*延时xms函数的定义(入口参数是无符号整形数x的值是多少延时几毫秒,无返回值)*/void delayxms(uint x) /误差 0us unsigned char a,b,c;for(;x0;x-) for(c=1;c0;

5、c-) for(b=142;b0;b-) for(a=2;a0;a-);/*数码管动态显示函数的定义(无入口参数无返回值)*/void display(void)P0=tableduty0;shi = 0;delayxms(10);shi = 1;P0=tableduty1;ge = 0;delayxms(10);ge = 1;/*35键盘扫描函数的定义(无入口参数无返回值)*/void matrixscan() uchar temp; keyport=0xfe; /第1行通低电平(1111,1110)temp=keyport; /读P3电平temp=temp3; /右移三位if(temp!=

6、0x1f) /检测不等说明高5位中有低电平,有键按下delay10ms(); /去抖延时temp=keyport; /读P3电平temp=temp3; /右移三位if(temp!=0x1f) /检测不等说明高5位中有低电平,有键按下 temp=keyport; /读P3电平flag+; switch(temp) /根据temp分类case 0xf6: /1111 0110 key=0; break;case 0xee: /1110 1110key=1; break;case 0xde: /1101 1110key=2; break;case 0xbe: /1011 1110key=3; bre

7、ak;case 0x7e: /0111 1110key=4; break;default:break;temp=keyport;/读P3电平temp=temp3; while(temp != 0x1f) /松键检测(加了这一段松开才给key赋值,不加这句按了就变) temp = keyport;/读P3电平temp=temp3;/右移三位 keyport=0xfd; /第2行通低电平(1111 1101)temp=keyport; /读P3电平temp=temp3; /右移三位if(temp!=0x1f) /检测不等说明高5位中有低电平,有键按下 delay10ms(); /去抖延时temp=

8、keyport; /读P3电平temp=temp3; /右移三位if(temp!=0x1f) /检测不等说明高5位中有低电平,有键按下temp=keyport; /读P3电平flag+;switch(temp)case 0xf5: /1111 0101key=5;break;case 0xed: /1110 1101key=6;break;case 0xdd: /11011101key=7;break;case 0xbd: /1011 1101key=8;break;case 0x7d: /0111 1101key=9;break;default:break;temp=keyport; /读P

9、3电平temp=temp3; /右移三位while(temp!=0x1f) /松键检测(加了这一段松开才给key赋值,不加这句按了就变) temp=keyport; /读P3电平 temp=temp3; /右移三位keyport=0xfb; /第3行通低电平(1111 1011)temp=keyport; /读P3电平temp=temp3; /右移三位if(temp!=0x1f) /检测不等说明高5位中有低电平,有键按下delay10ms(); /延时消抖,temp=keyport; /读P3电平temp=temp3; /右移三位if(temp!=0x1f) /检测不等temp=keyport

10、; /读P3电平flag+;switch(temp)temp=keyport; /读P3电平case 0xf3: /1111 0011key=10;break;case 0xeb: /1110 1011key=11;break;case 0xdb: /1101 1011key=12;break;case 0xbb: /1011 1011key=13;break;case 0x7b: /0111 1011key=14;break;temp=keyport; /读P3电平temp=temp3; /右移三位while(temp!=0x1f) /检测不等temp=keyport; /读P3电平temp=temp3; /右移三位

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号