| 请问这个有pcb图吗 |
大懒猫的可乐 发表于 2018-12-30 19:37 是共阳 |
| 第一:检查一下数码管是共阴还是共阳,代码里面是共阳 |
wulin 发表于 2018-12-29 15:58 谢谢你占空比程序 现在有另外的问题就是 输出电压和占空比不线性 |
周超然 发表于 2018-12-28 10:24 pwm周期20ms pwm端波形没有问题 按键也能控制占空比增减 |
huiyu 发表于 2018-12-28 15:12 数码管显示问题需要改中断时间和数码管延时时间 我的分别是 20ms 和 2ms 按键消抖目前没整明白 |
| 嗯 按键防抖的确没有考虑到 还请这位朋友点拨一下。还有就是现在波形输出无误且可调了。但是数码管不能正常显示 只能亮88 00 |
|
先各个部分确认,你的显示有没有问题?数字都正常显示么? 还有就是pwm用个定时器控制频率,01多少控制占空比,自己去研究下,不难 |
| 还有,朋友你的占空比上下限的设定真的弄反了哈哈哈 |
|
void Motor_speed_high(void) { if(Key1==0) { Delay(10); if(Key1==0) { count0 += 25; if(count0 >= 100) { count0 = 100; } } while(!Key1); } } 这是我用PWM调电机转速时的程序,就比你多了延时防抖 |
我要上哈工大 发表于 2018-12-26 11:23 嗯 按键防抖的确没有考虑到 还请这位朋友点拨一下。还有就是现在波形输出无误且可调了。但是数码管不能正常显示 只能亮88 00,不知道怎么回事 |
MR_CHEN12 发表于 2018-12-26 12:26 首先感谢这位朋友的回答 。占空比可调的程序我已经有了。现在的问题就是两位共阳极数码管显示的问题。不知道这位朋友能不能帮我看一下程序哪里出问题了 或者电路图。谢谢 |
| 我有PWM输出占空比可调周期可调的程序,通过按键调解,并在1602显示当前PWM的信息,需要吗 |
| 你占空比上下限那里有点问题吧。。上下限反了,超过上限应该就是100,不应该是0.。我觉得;还要就是按键防抖延时我好像没看到。? |
| 啊。我也是初学者。刚刚看了下,我对PWM目前还不是很了解;等我过两天学习了再和你交流~ |
|
本帖最后由 wulin 于 2018-12-29 16:41 编辑 占空比1~99可调,
#include<reg52.h> typedef unsigned char uchar; typedef unsigned int uint; sbit Key1=P3^0; sbit Key2=P3^1; sbit PWM=P1^0; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar count,time,i; void delayms(uint k) { uint i,j; for(i=k;i>0;i--) for(j=110;j>0;j--); } void Timer0Init() //100微秒@12.000MHz { TMOD |= 0x02; //设置定时器模式 TL0 = 0x9C; //设置定时初值 TH0 = 0x9C; //设置定时重载值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 EA=1; ET0=1; } void display() { static bit num=0; P0=0x00; if(num) { P2=~0xfe; P0=table[i/10]; num=~num; } else { P2=~0xfd; P0=table[i%10]; num=~num; } } void main( ) { Timer0Init(); count=99; i=100-count; while(1) { if(!Key1)// { delayms(10); if(!Key1) { if(count>1) count--; while(!Key1); i=100-count; } } if(!Key2) { delayms(10); if(!Key2) { if(count<99) count++; while(!Key2); i=100-count; } } } } void timer0() interrupt 1 { time++; if(count>=time) PWM=1; else PWM=0; if(time>99) time=0; if(time%10==0) display(); } |