Ⅰ 基於51單片機數碼管動態顯示程序
你要把你的數碼管電路發出來才能寫程序的!!
Ⅱ 單片機數碼管動態顯示代碼
如下:
Ⅲ 單片機 數碼管動態顯示代碼
if(Countnum[3]++=9) 單片機裡面判斷是否相等是用==的而不是=
你應該寫成if(Countnum[3]++==9)
而且你的寫法和不規范,這個寫法的意思是Countnum[3]是否等於9,然後Countnum[3]加1
其它的錯誤也是一樣
Ⅳ C語言單片機代碼 數碼管動態顯示
這里的16個元素代表的是從十六進制數0~9、A、B、C、D、E、F的段碼,根據什麼來填這些數組元素?那就要看你設計程序時定義數組的作用才能確定.table[1]對應的元素為0x06,是十六進制數,轉換成二進制數是00000110B,分別對應於數碼管的Dp、g、f、e、d、c、b、a 腳,所以在共陰數碼管上點亮b、c兩段,顯示的是數字1,其它同理。
Ⅳ 數碼管動態顯示工作原理
1、多個數碼管的段碼連接在一起,位碼分別控制。
2、由於段碼連接在一起,如果數碼管全亮,則顯示的數據相同,所以為了顯示不同的數字,任何時刻,只能有一個數碼管顯示,其餘不顯示。
3、用軟體使這幾個數碼管輪流顯示我們需要的數字。
4、只要更新頻率足夠快(>100Hz),肉眼看起來,這些數碼管就同時顯示我們需要的數字了。
(5)單片機數碼管動態顯示擴展閱讀:
數碼管的最常見形式有10個陰極,形狀為數字0到9,某些數碼管還有一個或兩個小數點。然而也有其他類型的數碼管顯示字母、標記和符號。如一種「數碼管」,其陰極為一個模板製成的面具,上面有數字形狀的孔。一些俄羅斯的數碼管,如IN-14,使用倒立的數字2代表5,大概是為了節約生產成本,而沒有明顯的技術或美學方面的原因。俄羅斯的數碼管大部分都使用了倒立的2作為5。
將170伏的直流電壓加在陰極和陽極之間,每一個陰極可以發出氖的的紅橙色光。由於混合氣體的不同,不同類型的數碼管之間的顏色有所區別。壽命較長的數碼管在製造中加入了汞,減少了濺射,結果發出的光的顏色為藍色或紫色調。在某些情況下,這些顏色被玻璃上的紅色或橙色過濾塗層過濾。
Ⅵ 幫忙看一下,51單片機的4位數碼管動態顯示
你的現象應該是那兩位數碼管在
16 以前顯示的是 0 和 一個數,如15 時顯示的是 0 和 F、14 時顯示的是 0 和 e。。。
16 時顯示的是 1 和 0 ,17 時顯示的是 1 和 1
disbuf[0]=(((firstdat&0xf0)>>4)&0x0f);
disbuf[1]=firstdat&0x0f;
disbuf[2]=(((seconddat&0xf0)>>4)&0x0f);
disbuf[3]=seconddat&0x0f;
這里不用這么麻煩吧,直接
disbuf[0]=firstdat>>4; 右移時,低四位被移出,高四位移入0,就是你要的結果了
disbuf[1]=firstdat&0x0f;
disbuf[2]=seconddat>>4;
disbuf[3]=seconddat&0x0f;
或者
disbuf[0]=firstdat/16; 除以16 得到 16 進制的十位
disbuf[1]=firstdat%16; 對16取余得到 16進制的個位
disbuf[2]=seconddat/16;
disbuf[3]=seconddat%16;
就行了吧
我想應該不會出現沒消影的,不知道你說的消影是指什麼現象
Ⅶ 51單片機數碼管動態顯示從右往左
這是四位數碼管從右從左流動顯示,像滾動字幕一樣的。用不著矩陣按鍵哪。
其實程序很簡單,沒那麼復雜。程序如下
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共陰段碼碼,0x00為滅
void delay()//延時子程序
{
uint y;
for(y=400;y>0;y--);
}
void main()
{
uchar n,x;
while(1)
{
n++;
if(n>50)//n為顯示一屏顯示次數,n大小可調節流動速度
{
n=0;
x++;//從下一個位置開始顯示
if(x>8)x=0;
}
}
}
模擬結果
Ⅷ 單片機數碼管動態顯示,急救!求C語言程序
我這里有我親自寫匯編源程序,功能是從1-99顯示再返回從99-1顯示,如此循環。這里我剛學單片機的時候寫出來的,不過我沒有現成C程序,用C寫更簡單。要不要這個匯編程序?要的話我就貼出來。
Ⅸ 單片機數碼管動態掃描顯示,時間這樣設置才能更好的顯示一連串數在屏幕上,有沒有數碼規律、
要根據數碼管的數量來定的。
但是,一般來說,每一位數碼管需要一定的顯示時間,也就是說,你輸出一位數碼管的數據點亮這個數碼管之後,需要一定的時間才能熄滅它並點亮下一個數碼管,而不能一輸出就馬上熄滅它,否則亮度會非常低。
另外,全部數碼管全部掃描一遍的總時間最好不要超過25mS,否則閃爍會比較嚴重,通常總的掃描頻率要在60Hz以上,才看不到閃爍。
比如說你要掃描8位數碼管,那麼可以讓每一位數碼管點亮1mS,這樣全部顯示一遍就大約是8mS或稍微多一點點(算上顯示處理的指令執行時間),此時的總掃描頻率就是125Hz左右,這樣的話,即能保證亮度,又看不到閃爍。
Ⅹ 單片機數碼管動態顯示0-100
給你簡單的修改了一下,如果你的數碼管編碼沒錯,應該可以顯示 0~99的
沒添加百位顯示,所以只有 0~99
//數碼管動態顯示+1,顯示範圍0-100,定時時間1s
#include<reg52.h>
sbit la=P2^6; //定義段選信號
sbit wela=P2^7; //定義位選信號
char aa,temp,,shi,ge;
char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(int z); //延遲函數聲明
void display(char d); //顯示函數聲明
void init(); //初始化函數聲明
/*******************************************************************************/
/*******************************************************************************/
void main()
{
init(); //調用初始化子函數
while(1)
{
display(temp); //調用顯示子函數
}
}
/*******************************************************************************/
/*******************************************************************************/
void delay(int z) //延遲子函數
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*******************************************************************************/
/*******************************************************************************/
void display(char d) //顯示子函數
{
char d1,d2;
d2=d%10; //取個位 %求余
d1=(d/10)%10; //取十位
P0=table[d2]; la=0; delay(10); la=1;//個位顯示
P0=table[d1]; wela=0; delay(10); wela=1;//十位顯示
}
/*******************************************************************************/
/*******************************************************************************/
void init() //初始化子函數
{
la=0;
wela=0;
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/*******************************************************************************/
/*******************************************************************************/
void timer0() interrupt 1 //中斷處理子函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //重載初值
aa++;
if(aa==20) //判斷定時是否到達1s
{ aa=0; temp++ ; }
if(temp==100) //限制temp變化的范圍,使之不超過100
{ temp=0; }
}
/*******************************************************************************/
/*******************************************************************************/
/*/////////////////////////////////////////////////////////////////////////////*/