頻率計程序 數(shù)碼管閃爍嚴(yán)重 請教怎么修改 謝謝
-
//程序說明:這是6位數(shù)顯頻率計,外部方波接到單片機(jī)的P3.4(T0),通過數(shù)碼管顯示所測的頻率 #include
#include #define uchar unsigned char #define unit unsigned int #define ulong unsigned long //uchar code dispbit[]={... //程序說明:這是6位數(shù)顯頻率計,外部方波接到單片機(jī)的P3.4(T0),通過數(shù)碼管顯示所測的頻率 #include #include #define uchar unsigned char #define unit unsigned int #define ulong unsigned long //uchar code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 定義位選 uchar code dispbit[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; // 定義位選 uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xbf};//定義段碼 uchar dispbuf[8]={0,0,0,0,0,0,11,10}; //顯示緩沖 uchar temp[8]; uchar dispcount; uchar T0count;//T0計數(shù) uchar timecount;//時間計數(shù) bit flag; ulong x; void main(void) { TMOD=0x15; TH0=0; TL0=0; TH1=(65536-4000)/256; TL1=(65536-4000)%256; TR1=1; TR0=1; ET0=1; ET1=1; EA=1; while(1) { uchar i; if(flag==1) { flag=0; x=T0count*65536+TH0*256+TL0; for(i=0;i<8;i++) { temp[i]=0; } i=0; while(x/10) { temp[i]=x%10; x=x/10; i++; } temp[i]=x; for(i=0;i<6;i++) { dispbuf[i]=temp[i]; } timecount=0; T0count=0; TH0=0; TL0=0; TR0=1; } } } void t0(void) interrupt 1 using 1//T0工作在計數(shù)狀態(tài)下,T0的Z大計數(shù)頻率為250KHz { T0count++; } void t1(void) interrupt 3 using 2 { TH1=(65536-4000)/256; TL1=(65536-4000)%256; timecount++; if(timecount==250) { TR0=0; timecount=0; flag=1; } P0=dispcode[dispbuf[dispcount]]; P2=dispbit[dispcount]; dispcount++; if(dispcount==8) { dispcount=0; } } 展開
全部評論(2條)
-
- wang471849718 2010-09-16 00:00:00
- 適當(dāng)加個電容可以不閃
-
贊(2)
回復(fù)(0)
-
- shunhua804 2010-09-24 00:00:00
- 多掃描幾次,就不閃了,可以去我的博客上看看,估計會對你有用。
-
贊(11)
回復(fù)(0)
熱門問答
- 頻率計程序 數(shù)碼管閃爍嚴(yán)重 請教怎么修改 謝謝
- //程序說明:這是6位數(shù)顯頻率計,外部方波接到單片機(jī)的P3.4(T0),通過數(shù)碼管顯示所測的頻率 #include
#include #define uchar unsigned char #define unit unsigned int #define ulong unsigned long //uchar code dispbit[]={... //程序說明:這是6位數(shù)顯頻率計,外部方波接到單片機(jī)的P3.4(T0),通過數(shù)碼管顯示所測的頻率 #include #include #define uchar unsigned char #define unit unsigned int #define ulong unsigned long //uchar code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 定義位選 uchar code dispbit[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; // 定義位選 uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xbf};//定義段碼 uchar dispbuf[8]={0,0,0,0,0,0,11,10}; //顯示緩沖 uchar temp[8]; uchar dispcount; uchar T0count;//T0計數(shù) uchar timecount;//時間計數(shù) bit flag; ulong x; void main(void) { TMOD=0x15; TH0=0; TL0=0; TH1=(65536-4000)/256; TL1=(65536-4000)%256; TR1=1; TR0=1; ET0=1; ET1=1; EA=1; while(1) { uchar i; if(flag==1) { flag=0; x=T0count*65536+TH0*256+TL0; for(i=0;i<8;i++) { temp[i]=0; } i=0; while(x/10) { temp[i]=x%10; x=x/10; i++; } temp[i]=x; for(i=0;i<6;i++) { dispbuf[i]=temp[i]; } timecount=0; T0count=0; TH0=0; TL0=0; TR0=1; } } } void t0(void) interrupt 1 using 1//T0工作在計數(shù)狀態(tài)下,T0的Z大計數(shù)頻率為250KHz { T0count++; } void t1(void) interrupt 3 using 2 { TH1=(65536-4000)/256; TL1=(65536-4000)%256; timecount++; if(timecount==250) { TR0=0; timecount=0; flag=1; } P0=dispcode[dispbuf[dispcount]]; P2=dispbit[dispcount]; dispcount++; if(dispcount==8) { dispcount=0; } } 展開
- 單片機(jī)做頻率計數(shù)碼管的顯示C語言程序
- #include
float time=0; float freq=0; unsigned char dsh=0; unsigned char dsz=0; unsigned char dsl=0; main() {EA=1; ET0=1; ET1=1; TMOD=0x061; TH0=-1000/256; TL0=-1000%256; TH1=0xfb; TL1=0xfb; TR0=1; TR1=1; while...
- 數(shù)碼管顯示的頻率計拜托了各位 謝謝
- 數(shù)碼管顯示的頻率計,不是畢業(yè)論文,是簡單的課程設(shè)計,從哪可以找到簡單點的報告交給老師,急,麻煩解答下
- FPGA,頻率計,數(shù)碼管顯示問題!
- 做頻率計,到數(shù)碼管顯示,燒入板中,顯示亂碼,不知道什么問題,也不知道掃描時鐘怎么設(shè)置,下面程序的CLK,指的是什么??求大神解答! LIBRARY IEEE; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity display is port(in7,in... 做頻率計,到數(shù)碼管顯示,燒入板中,顯示亂碼,不知道什么問題,也不知道掃描時鐘怎么設(shè)置,下面程序的CLK,指的是什么??求大神解答! LIBRARY IEEE; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity display is port(in7,in6,in5,in4,in3,in2,in1,in0:in std_logic_vector(3 downto 0); lout7:out std_logic_vector(7 downto 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); clk:in std_logic ); end display; architecture phtao of display is signal s:std_logic_vector(2 downto 0); signal lout4:std_logic_vector(3 downto 0); begin process (clk) begin if (clk'event and clk='1')then if (s="111") then s<="000"; else s<=s+1; end if; end if; sel<=s; end process; process (s) begin case s is when "000"=>lout4<=in6; when "001"=>lout4<=in5; when "010"=>lout4<=in4; when "011"=>lout4<="0000"; when "100"=>lout4<=in3; when "101"=>lout4<=in2; when "110"=>lout4<=in1; when "111"=>lout4<="0000"; when others=>lout4<="XXXX"; end case; case lout4 is when "0000"=>lout7<="00111111"; when "0001"=>lout7<="00000110"; when "0010"=>lout7<="01011011"; when "0011"=>lout7<="01001111"; when "0100"=>lout7<="01100110"; when "0101"=>lout7<="01101101"; when "0110"=>lout7<="01111101"; when "0111"=>lout7<="00000111"; when "1000"=>lout7<="01111111"; when "1001"=>lout7<="01100111"; when "1010"=>lout7<="00111111"; when "1111"=>lout7<="01000000"; when others=>lout7<="XXXXXXXX"; end case; end process; end phtao; 展開
- CNC數(shù)控機(jī)床程序怎么修改?
- 單片機(jī)頻率計的這段程序怎么理解
- stc12c5a60s2單片機(jī)頻率計程序
- 急
- 這個程序該如何修改??
- #include
void main() { long int i; int n; double w; scanf("%ld",&i); n=i/1000000; if(n>10) n=10; switch(n) { case 0:w=i*0.1;break; case 1:w=100000*0.1+(i-100000)*0.075;break; case 2: case 3:w=100000*0.1+100000*0.075+... #include void main() { long int i; int n; double w; scanf("%ld",&i); n=i/1000000; if(n>10) n=10; switch(n) { case 0:w=i*0.1;break; case 1:w=100000*0.1+(i-100000)*0.075;break; case 2: case 3:w=100000*0.1+100000*0.075+(i-200000)*0.05;break; case 4: case 5:w=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;break; case 6: case 7: case 8: case 9:w=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;break; case 10:w=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;break; } printf("獎金是:%lf\n",w); } 展開
- 51單片機(jī)頻率計的中斷程序怎么設(shè)計
- 有一個信號由200hz的NRZ碼控制輸出兩個頻率不同的方波(1600,800)?,F(xiàn)在要還原,如果檢測到1600則p3.5輸出高電平,800則輸出低電平。我的設(shè)想是定時一個5ms的中斷,對輸入的方波電平0→1進(jìn)行計數(shù)。計數(shù)值大于(8+4)/2=6的話輸出1,小于輸出0。請問這樣可以... 有一個信號由200hz的NRZ碼控制輸出兩個頻率不同的方波(1600,800)。現(xiàn)在要還原,如果檢測到1600則p3.5輸出高電平,800則輸出低電平。我的設(shè)想是定時一個5ms的中斷,對輸入的方波電平0→1進(jìn)行計數(shù)。計數(shù)值大于(8+4)/2=6的話輸出1,小于輸出0。請問這樣可以嗎?對于定時器計時器還有中斷的使用不大明白,可否簡略寫下程序。謝謝 展開
- 單片機(jī)簡易頻率計,怎么編程序測正弦信號的?
- 測方波信號的我知道,就是用計數(shù)器來計數(shù),但正弦信號不能這樣子的吧。
- 經(jīng)過調(diào)試后的三菱plc,怎么再修改程序
- 利用芯片74138控制的數(shù)碼管的C程序
- voidReadKey(void);//掃描鍵盤獲取鍵值voidmain(void)//入口函數(shù){while(1){ReadKey();//調(diào)用鍵盤掃描if(l_key!=0xff)//如果有鍵按下,將其輸出P2口LED燈顯示,{switch(l_key){case0x7... void ReadKey(void); //掃描鍵盤 獲取鍵值
void main(void) //入口函數(shù)
{
while(1){
ReadKey(); //調(diào)用鍵盤掃描
if(l_key!=0xff) //如果有鍵按下,將其輸出P2口LED燈顯示,
{ switch(l_key)
{ case 0x7e:
num=1;
break;
case 0xbe:
num=2;
break;
case 0xde:
num=3;
break;
case 0xee:
num=4;
break;
} P2=table[num] ; } //這里取反是因為LED燈采用共陰接法 } } void ReadKey(void) //讀鍵盤值 { P0=0xfe; //將diyi列拉低,掃描是否有按鍵按下,diyi列按鍵包括:0,4,8,C l_key=P0; //讀取鍵值 if(l_key!=0xfe) //如果l_key不等于0xfe,說明有鍵按下,就返回,否則繼續(xù)掃描下一列 return; P0=0xfd; //將第二列拉低,掃描是否有按鍵按下,第二列按鍵包括:1,5,9,D l_key=P0; //讀取鍵值 if(l_key!=0xfd) //如果l_key不等于0xfd,說明有鍵按下,就返回,否則繼續(xù)掃描下一列 return; P0=0xfb; //將第三列拉低,掃描是否有按鍵按下,第三列按鍵包括:2,6,A,F(xiàn) l_key=P0; //讀取鍵值 if(l_key!=0xfb) //如果l_key不等于0xfb,說明有鍵按下,就返回,否則繼續(xù)掃描下一列 return; P0=0xf7; //將第四列拉低,掃描是否有按鍵按下,第四列按鍵包括:3,7,B,F(xiàn) l_key=P0; //讀取鍵值 if(l_key!=0xf7) //如果l_key不等于0xf7,說明有鍵按下,就返回,否則掃描完畢將l_key=0xff return; l_key=0xff; } void delay() { unsigned int x,y; for(x=100;x>0;x--) for(y=200;y>0;y--); } 這個程序是用來掃描diyi列鍵盤,diyi個和第二個鍵按下,數(shù)碼管會顯示1和2,但是第三個鍵和第四個鍵按下,就不顯示不出來三和四,這是為什么呢? 展開
- 跪求單片機(jī)at89c52頻率計c語言程序
- 還有跪求那個方波的名字叫神馬~~~
- 基于單片機(jī)AT89C52頻率計,求程序,求助
- 跪求簡易頻率計的電路圖和程序
- 求一個簡易單片機(jī)頻率計設(shè)計程序
- 頻率測量精度為1HZ 誤差小于10HZ通過LCD1602顯示出來
- 低頻頻率計的原理圖和程序[匯編語言]
- 設(shè)計要求:1、 工作電壓:5V 2、 數(shù)字顯示位數(shù):5位數(shù)字顯示 3、 頻率范圍:1Hz~99999Hz 5、 分辨率:1Hz 6、 被測信號:周期性信號 Z好有原理圖和程序[匯編語言]的一起發(fā)來,畢業(yè)設(shè)計要用,很急啊?。Q441769013 郵箱:wengkaiwc@163.com
- 數(shù)字式頻率計 Multisim仿真圖修改 滿意給50分
- 面包板中數(shù)碼管怎么連接
4月突出貢獻(xiàn)榜
推薦主頁
最新話題





參與評論
登錄后參與評論