|
發布時間: 2018-12-25 17:45
正文摘要:#include<reg51.h> #define uint unsigned int #define uchar unsigned char &nb ... |
| 請問這個有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(); } |