按键设置占空比,PWM控速_第1页
按键设置占空比,PWM控速_第2页
按键设置占空比,PWM控速_第3页
按键设置占空比,PWM控速_第4页
按键设置占空比,PWM控速_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品F*mmmm接法:P0段选;P3键盘功能:通过按键设置PWM占空比进而控制电机转速*/原理图:一 :-XiA.rca'Mra.wi PD?Df7金 tfTAUIDPH fflD*.A ?疔-rn时吟r p .t" FETSa方一XIE耳23 2 2pj-ilfTT -7HXtHO 片1-*TnI YiTF程序:#include<reg51.h>#defi ne uint un sig ned int#in clude<math.h>下面用uint代替unsigned int(无符号整数)#defi ne uchar un sig ned char下

2、面用uchar 代替 unsigned char(无符号字符型数)#define GPIO DIG P0下面用GPIO DIG代替P0 口,P0 口送数码管段选感谢下载载精品信号#define keyport P3/keyport代替P3 ,P3 口键盘扫描sbit shi = P2 A5;sbit ge =2 人 6;sbit LED = P2A7;sbit PWM = P1A0;/数码管位选(十位),用shi代替P2A5/数码管位选(个位)/P2A7控制LED闪烁/P1A0 输出 pwmunsigned char code table17 = /定义一个数组存放共阴极数码管码表0x3f,0

3、x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar temp=0,0;临时存放占空比的数组/存放占空比的数组,duty0存十位duty1存个位char flag = 0;/按键的一个标志按一次键加 1 ,uchar key = 0;uchar t0;/存放键值/存放占空比()uint timer1;uint count;感谢下载载精品uint period;uint t = 0;F*mmmm子函数声明*void delay10ms(void);void delayxms(uint x);

4、void matrixscan(void);void Time1Config(void);void set(void);void display(void);/10ms延时软件消抖的声明/延时xms的函数的声明/键盘检测函数的声明/定时器设置函数的声明/设置占空比的函数/数码管动态显示函数声明F*mmmm主函数*void main()Time1Config();while(1)set();matrixscan();display();t0=duty0*10+duty1;感谢下载载精品F*mmmm*/子函数定义*/*延时10ms函数的定义(无入口参数无返回值)*/ void delay10ms(

5、)(uchar a,b,c;for(a=1;a>0;a-)for(b=38;b>0;b-)for(c=130;c>0;c-);)*/*延时xms函数的定义(入口参数是无符号整形数 x的值是多少延时几毫秒,无返回值)void delayxms(uint x) / 误差 0us(unsigned char a,b,c;for(;x>0;x-)for(c=1;c>0;c-)for(b=142;b>0;b-)for(a=2;a>0;a-);/*数码管动态显示函数的定义(无入口参数无返回值)*/感谢下载载精品void display(void) (P0=tabl

6、eduty0;shi = 0;delayxms(10);shi = 1;P0=tableduty1;ge = 0;delayxms(10);ge = 1;/*3 X5键盘扫描函数的定义(无入口参数无返回值)*/void matrixscan() (uchar temp;keyport=0xfe;/ 第 1 行通低电平 (1111,1110)temp=keyport;/ 读 P3 电平temp=temp>>3;/ 右移三位if(temp!=0x1f)检测不等说明高5位中有低电平,有键按下(感谢下载载精品delay10ms();/右移三位temp=keyport;temp=temp&g

7、t;>3;/检测不等说明高if(temp!=0x1f)读P3电平5位中有低电平,有键按下temp=keyport;flag+;switch(temp)(case 0xf6:key=0;break;case 0xee:key=1;break;case 0xde:key=2;break;case 0xbe:key=3;break;case 0x7e:/去抖延时/读P3电平/根据temp分类/1111 0110/1110 1110/1101 1110/1011 1110/0111 1110感谢下载载精品key=4;break;default :break;temp=keyport;/读P3电平

8、这句按了就变)temp=temp>>3;while(temp != 0x1f)/松键检测(加了这一段松开才给 key赋值,不加keyport=0xfd;temp=keyport;temp=temp>>3;temp = keyport;temp=temp>>3;(delay10ms();/读P3电平/右移三位/第2行通低电平(1111 1101 )/读P3电平/右移三位/检测不等说明高5位中有低电平,有键按下/去抖延时感谢下载载精品temp=keyport;/读 P3 电平temp=temp>>3;/右移三位if(temp!=0x1f)/检测不等说

9、明高5位中有低电平,有键按下(temp=keyport;/读P3电平flag+;switch(temp)(case 0xf5:/1111 0101key=5;break;case 0xed:key=6; /1110 1101break;case 0xdd:key=7;/1101 1101break;case 0xbd:key=8; /1011 1101break;case 0x7d:key=9;/0111 1101感谢下载载精品break;default :break;temp=keyport;/读P3电平/右移三位while(temp!=0x1f)temp=temp>>3;/松键

10、中测(加了这一段松开才给key赋值,不加这句按了就变)temp=keyport;/读P3电平keyport=0xfb;temp=keyport;temp=temp>>3;temp=temp>>3;/右移三位delay10ms();temp=keyport;temp=temp>>3;/第3行通低电平(1111 1011 )/读P3电平/右移三位/检测不等说明高5位中有低电平,有键按下/延时消抖,/读P3电平/右移三位感谢下载载精品/检测不等/读P3电平/读P3电平/1111 0011/1110 1011/1101 1011/1011 1011/0111 101

11、1if(temp!=0x1f)(temp=keyport;flag+; switch(temp)(temp=keyport;case 0xf3:key=10; break;case 0xeb:key=11; break;case 0xdb:key=12; break;case 0xbb:key=13;break;case 0x7 b: key=14;break;感谢下载载精品)temp=keyport;/ 读 P3 电平temp=temp>>3;/ 右移三位while(temp!=0x1f)/ 检测不等(temp=keyport;/ 读 P3 电平temp=temp>>

12、3;/ 右移三位)/*定时器设置函数的定义(无入口参数无返回值)*/void Time1Config()(1为定时器TMOD|= 0x10; /设置定时计数器工作方式/*定时器赋初始值,12MHZ下定时*/TH1 = 0xFE;TL1 = 0x0C;ET1 = 1; /开启定时器1中断EA = 1;/开总中断TR1 = 1; /开启定时器)感谢下载载精品void set(void)/Reset键按下while(key=14)flag=0;while(key=14)/当Reset键按下/*设置十位/while(flag=0)/*数码管十位闪烁*/if(timer1<1200)P0=tabl

13、e0;shi=0;elseshi=1;/*/matrixscan();/键盘扫描if(key<=9)/如果是09数字键感谢下载载精品temp0=key; / 保存十位)if(key=10) /cancel 键按下(flag=0;break; /出设置界面)if(key>=11) / 如果是 sure , delete , clear 或 Reset flag=0;)*广景设置个位*2,3,4输入个位while(flag=1|flag>=8)/flag=1时第一次输入个位,flag>=8第shi=0;/十位的位选P0=tabletemp0;delayxms(10);shi

14、=1;/*实现个位闪烁/十位的段选/延时显示/关闭位选*/感谢下载载精品if(timer1<1200&&flag<8)(P0=table0;ge=0;delayxms(10);ge=1;if(timer1>=1200&&flag<8)ge=1;/*两位都输入后显示十位个位*/if(timer1<1200&&flag>=8)(P0=tabletemp1;ge=0;delayxms(10);ge=1;if(timer1>=1200&&flag>=8)(P0=tabletemp1;ge=0

15、;感谢下载载精品按下数字键09delayxms(10);ge=1;)*matrixscan();if(key<=9&&flag=2)/如果个位第一次temp1=key;/ 保存个位flag=8;)if(key=10)/取消操作键 flag=0;break;)if(key=11&&flag=2)入的是确定键/如果个位第一次输flag=1;if(key=11&&flag>=8)/如果设置完毕,按下确定键感谢下载载精品duty0=temp0;duty1=temp1;flag=0;break;)if(key = 12)/按下退格键if(fla

16、g=2)/如果清除十位key=14;flag=0; if(flag>=8)flag=1;/如果清除个位if(key = 13)flag=0;/按下清空键key=14;感谢下载载精品/返回到设置界面重1定时器0的中断号0外if(flag=0)新来过break;)void Timel(void) interrupt 3 /3为定时器 1 的中断号部中断1 2外部中断2 4串口中断TH1 = 0xFE;/重新赋初值TL1 = 0x0C;timer1+;count+;period+;*产生 pwm*/if(period>=100)/pwm 周期 0.5ms*100period=0; if(period < t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论