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

下载本文档

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

文档简介

1、/*接法:P0段选;P3键盘功能:通过按键设置PWM占空比进而控制电机转速*/原理图:n:-XiA.tfTAUTFET XIE 耳rcaM ra.wi PDDf7 IDPH .-fflD*.rn旳吟r p .t Sa 2 3 2 2pj-ilfTT HXtHO 片*TniTF程序:#in clude#in clude#defi ne uint un sig ned int/下面用uint代替unsigned int(无符号整数)#defi ne uchar un sig ned char/下面用uchar代替unsigned char (无符号字符型数)#define GPIO DIG P0/

2、下面用GPIO DIG 代替P0 口,P0 口送数码管段选信号#define keyportP3/keyport 代替 P3 ,P3 口键盘扫描sbit shi = P2A5;/ 数码管位选(十位) ,用 shi 代替 P2A5sbit ge=卩2人6;/ 数码管位选(个位)sbit LED = P2A7;/P2A7 控制 LED 闪烁sbit PWM = P1A0;/P1A0 输出 pwmunsigned char code table17 = / 定义一个数组存放共阴极数码管码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0

3、x7c,0x39,0x5e,0x79,0x71;uchar temp=0,0;/ 临时存放占空比的数组uchar duty=0,0;/ 存放占空比的数组, duty0 存十位 duty1存个位char flag = 0;/ 按键的一个标志按一次键加 1 ,uchar key = 0;/ 存放键值uchar t0;/ 存放占空比()uint timer1;uint count;uint period;uint t = 0;/*子函数声明*void delay10ms(void);/10ms 延时软件消抖的声明void delayxms(uint x);/ 延时 xms 的函数的声明void ma

4、trixscan(void);/ 键盘检测函数的声明void Time1Config(void);/ 定时器设置函数的声明void set(void);/ 设置占空比的函数void display(void);/ 数码管动态显示函数声明/*主函数*void main()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-)f

5、or(c=130;c0;c-);,无返回值) */* 延时 xms 函数的定义(入口参数是无符号整形数 x 的值是多少延时几毫秒void delayxms(uint x) / 误差 0usunsigned char a,b,c;for(;x0;x-)for(c=1;c0;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

6、;/*3 X5键盘扫描函数的定义(无入口参数无返回值)*/void matrixscan()uchar temp;keyport=0xfe;/第 1行通低电平(1111,1110)temp=keyport;/ 读 P3 电平temp=temp3;/ 右移三位if(temp!=0x1f)/ 检测不等说明高5 位中有低电平,有键按下5 位中有低电平,有键按下delay10ms();temp=keyport;temp=temp3;if(temp!=0x1f)temp=keyport;flag+;switch(temp)case 0xf6:key=0;break;case 0xee:key=1;bre

7、ak;case 0xde:key=2;break;case 0xbe:key=3;break;case 0x7e:/ 去抖延时/ 读 P3 电平/ 右移三位/ 检测不等说明高/ 读 P3 电平/ 根据 temp 分类/1111 0110/1110 1110/1101 1110/1011 1110/0111 1110key=4;break;default :break;temp=keyport;/ 读 P3 电平temp=temp3;while(temp != 0x1f)/ 松键检测 (加了这一段松开才给 key 赋值,不加这句按了就变 )temp = keyport;/ 读 P3 电平temp

8、=temp3;/ 右移三位keyport=0xfd;/ 第 2 行通低电平( 1111 1101 )temp=keyport;/ 读 P3 电平temp=temp3;/ 右移三位if(temp!=0x1f)/ 检测不等说明高 5 位中有低电平,有键按下delay10ms();/ 去抖延时temp=keyport;temp=temp3;if(temp!=0x1f)temp=keyport;flag+;switch(temp)case 0xf5:key=5;break;case 0xed:key=6;break;case 0xdd:key=7;break;case 0xbd:key=8;break

9、;case 0x7d:key=9;/ 读 P3 电平/ 右移三位/ 检测不等说明高 5 位中有低电平,有键按下/ 读 P3 电平/1111 0101/1110 1101/1101 1101/1011 1101/0111 1101break;default :break;temp=keyport;/ 读 P3 电平temp=temp3;/ 右移三位while(temp!=0x1f)/ 松键检测 (加了这一段松开才给 key 赋值,不加这句按了就变 )temp=keyport;/ 读 P3 电平temp=temp3;/ 右移三位keyport=0xfb;/ 第 3 行通低电平( 1111 1011

10、 )temp=keyport;/ 读 P3 电平temp=temp3;/ 右移三位if(temp!=0x1f)/ 检测不等说明高 5 位中有低电平,有键按下delay10ms();temp=keyport;/ 延时消抖,/ 读 P3 电平/ 检测不等/ 读 P3 电平/ 读 P3 电平/1111 0011/1110 1011/1101 1011/1011 1011/0111 1011if(temp!=0x1f)temp=keyport;flag+; switch(temp)temp=keyport;case 0xf3:key=10; break;case 0xeb:key=11; break;

11、case 0xdb:key=12; break;case 0xbb:key=13;break;case 0x7b: key=14; break;temp=keyport;/ 读 P3 电平temp=temp3;/ 右移三位while(temp!=0x1f)/ 检测不等temp=keyport;/ 读 P3 电平temp=temp3;/ 右移三位/* 定时器设置函数的定义(无入口参数无返回值) */void Time1Config()1 为定时器TMOD|= 0x10; / 设置定时计数器工作方式/* 定时器赋初始值, 12MHZ 下定时 */TH1 = 0xFE;TL1 = 0x0C;ET1

12、= 1; / 开启定时器 1 中断EA = 1;/ 开总中断void set(void)while(key=14)/Reset 键按下flag=0;while(key=14)/ 当 Reset 键按下/*设置十位 */while(flag=0)/* 数码管十位闪烁 */if(timer1=11) / 如果是 sure ,delete , clear 或 Reset flag=0;*设置个位 *while(flag=1|flag=8)2,3,4. 输入个位shi=0;P0=tabletemp0;delayxms(10);shi=1;/* 实现个位闪烁/flag=1 时第一次输入个位, flag=

13、8 第/ 十位的位选/ 十位的段选/ 延时显示/ 关闭位选*/if(timer11200&flag=1200&flag8)ge=1;/* 两位都输入后显示十位个位 */if(timer1=8)P0=tabletemp1;ge=0;delayxms(10);ge=1;if(timer1=1200&flag=8)P0=tabletemp1;ge=0;按下数字键 09入的是确定键确定键delayxms(10);ge=1;*matrixscan();if(key=8)/ 如果个位第一次/ 保存个位/ 取消操作键/ 如果个位第一次输/ 如果设置完毕, 按下duty0=temp0;duty1=temp1;flag=0;break;if(key = 12)if(flag=2)key=14;flag=0; if(flag=8)flag=1;if(key = 13)flag=0;key=14;/ 按下退格键/ 如果清除十位/ 如果清除个位/ 按下清空键/ 返回到设置界面重if(flag=0)新来过break;1 定时器 0 的中断号 0 外void Time1(void) interrupt 3 /3 为定时器 1 的中断号部中断 1 2 外部中断 2 4 串口中断TH1 = 0xFE; / 重新

温馨提示

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

评论

0/150

提交评论