![]() |
robinsonlin 發表于 2018-12-26 10:13 如下。麻煩看一下 是不是哪里有問題 #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar time; double count=50; //定義占空比,并初始占空比為50% sbit PWM=P3^0; //P2^0口輸出PWM sbit zkb_add=P3^6; //占空比增加的按鍵 的I/O口 sbit zkb_dec=P3^7; //占空比減小 的按鍵 的I/O口 sbit dula=P2^2; sbit wela=P2^3; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陰極數碼管0~9編碼 /************函數聲明**************/ void delayms(uint z); //延時 void keyscan(); //掃描按鍵 void timer0_init(); //定時器0初始化 /****************延時處理**********************/ void delayms(uint z) //延時xms程序 { uint x,y; for(y=z;x>0;x--) for(y=110;y>0;y--); } /*******數碼管顯示占空比********************/ void display_pwm(int num)//占空比顯示 { uchar shi; shi=num/10; dula=0; P1=table[shi]; delayms(10); dula=1; wela=0; P1=table[0]; delayms(10); wela=1; } void keyscan() //按鍵掃描 { if(zkb_add==0) { delayms(1); count=count+10; //每按一次占空比增加按鍵占空比加10% if(count>=100) //限定占空比上限 { count=0; } } if(zkb_dec==0) { delayms(1); count=count-10; //每按一次占空比減小按鍵占空比減10% if(count<0) //限定占空比下限 { count=100; } } } /***********定時器0初始化***********/ void timer0_init() { TMOD=0x01; //定時器0工作于方式1 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; ET0=1; EA=1; } /**************定時0中斷處理******************/ void timer0_int() interrupt 1 { TR0=0; //設置定時器初值期間,關閉定時器 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; time++; if(time<count) //count為占空比 { PWM=1; //輸出高電平 } else PWM=0; if(time>=100) { time=0; } display_pwm(count); } /*********主函數********************/ void main() { timer0_init(); delayms(1); while(1) { keyscan(); } } |
那你就得把程序貼出來,大家才能知道問題在哪里呀 |
devcang 發表于 2018-12-26 00:11 經過檢查 圖沒有問題 現在問題就是段選和位選編程那部分 只用一個段選就好用 用兩個就出問題 |
網上代碼多的很,自己去百度查找下就清除了,就是7個IO口01控制一個數碼管。 |
先找一段代碼,看一下,就清楚了。。。。。。。 |