導航:首頁 > 操作系統 > 51單片機數碼管動態顯示程序

51單片機數碼管動態顯示程序

發布時間:2023-07-21 11:27:18

Ⅰ 51單片機 讓數碼管自動顯示0至9的C程序。有沒有比這個更簡單的

可以通過代碼優化的方式來簡化代碼。

一、設置延時函數

延時函數在單片機中有著讓現實延時的能力,本程序中可以通過採用for循環方式進行延時,具體代碼如下:

void delay()

uinti,j;

for(i=100;i>0;i--)

for(j=1000;j>0;j--);

二、設置數碼管顯示數組

數組定義簡單,而且訪問很方便。所有元素類型相同,在數碼管顯示程序中可以讓程序代碼減少。數組代碼如下:

chara[10]={0xff,0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9};

三、設置數碼管顯示循環

數碼管顯示循環可以不用編寫一次又一次的數碼管顯示代碼,既方便又簡潔。具體代碼如下:

for(inti=0;i<10;i++)

P0=a[i];

delay();

(1)51單片機數碼管動態顯示程序擴展閱讀

單片機程序進行簡化可以查看是否有反復出現的代碼序列,整合成循環進行更改。同一類型且用法相同的變數可以整合成數組,方便對各個內容進行訪問。有特定功能的代碼段可以定義一個函數進行訪問。

注意:用C51語言編輯的單片機程序與普通C語言不同,C51語言中的數據類型和標准c中的數據類型不同。

Ⅱ 51單片機如何利用4個七段數碼管採用動態顯示顯示4位數字,如2035

//***************************************
//顯示函數 函數名:display56()
//***************************************
//變數定義:
unsigned char qian,,shi,ge; //定義顯示緩沖區
unsigned char table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa7};
//表:共陽數碼管 0 1 2 3 4 5 6 7 8 9 c
//延時子函數,短暫延時
void delay56()
{
unsigned char i56=210;
while(i56--);
}
void display56()
{
P0=table[qian]; // 查得千位,送P0
SMG_q=0; // 打開千位數碼管
delay56(); // 延時
P0 = 255; // 防止數碼管臟亂
SMG_q=1; // 關閉數碼管
P0=table[];// 選擇百位數碼管
SMG_b=0;
delay56(); //延時
P0 = 255;
SMG_b=1; //
P0=table[shi];// 選擇十位數碼管
SMG_s=0;
delay56(); //
P0 = 255;
SMG_s=1; //
P0=table[ge];//選擇個位數碼管,
SMG_g=0;
delay56(); //
P0 = 255;
SMG_g=1; //
}
你想顯示什麼,分別為qian,,shi ,ge

Ⅲ 51單片機數碼管顯示的程序是什麼

#include //52系列單片機頭文件x0dx0a#define uchar unsigned char //宏定義x0dx0a#define uint unsigned intx0dx0asbit la=P2^6; //申明u1鎖存器的鎖存端x0dx0asbit wela=P2^7; // u2x0dx0auchar num1,num2;x0dx0auchar code table[]={ //數組定義x0dx0a 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,x0dx0a 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};x0dx0auchar code aable[]={ //位選數組定義x0dx0a 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};x0dx0a void delays(uint); //子函數申明x0dx0ax0dx0a void main() x0dx0a{x0dx0a while(1)x0dx0a {x0dx0a for(num1=0;num1<48;num1++)//6個數循環顯示x0dx0a {x0dx0a wela=1;//打開u2鎖存端x0dx0a P0=aable[num1%6];//送入位選信號x0dx0a wela=0;//關閉u2鎖存端x0dx0a //delays(1);x0dx0a la=1;//打開u1鎖存端x0dx0a P0=table[num1%16];//送入段選信號x0dx0a la=0;//關閉u1鎖存端x0dx0a delays(1);x0dx0a }x0dx0a }x0dx0a}x0dx0a/*---------主函數-----------------------------------------------*/x0dx0ax0dx0avoid delays(uint xs)x0dx0a{x0dx0a uint i,j,k;x0dx0a for(i=xs;i>0;i--)x0dx0a for(j=1000;j>0;j--)x0dx0a for(k=110;k>0;k--);x0dx0a}x0dx0a/*----------------延時程序-----------------------------------------------*/

Ⅳ 51單片機顯示八位數碼管的C語言程序

1、最開始,我們先打開keil。

Ⅳ 51單片機怎麼用按鍵控制一個數碼管,按一下顯示一個數字,順序顯示

1、首先,要把代碼寫好,點亮數碼管。

Ⅵ 運用51單片機實現4位8段LED數碼管的動態數字顯示,寫出C語言程序

#include<reg52.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
count;
uint
disnum;
sbit
la=P2^6;
sbit
wela=P2^7;
uchar
code
table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
display(uchar,uchar,uchar);
delay(uchar);
void
main()
{
EA=1;
ET1=1;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(1)
{
if(count==20)
{
count=0;
//
if(disnum==1000)
//
disnum=0;
disnum++;
}
display(disnum/100,disnum%100/10,disnum%100%10);
}
}
void
tim1()
interrupt
3
using
3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++;
}
display(uchar
,uchar
shi,uchar
ge)
{
P0=table[];
la=1;
la=0;
P0=0xfe;
wela=1;
wela=0;
delay(1);
P0=table[shi];
la=1;
la=0;
P0=0xfd;
wela=1;
wela=0;
delay(1);
P0=table[ge];
la=1;
la=0;
P0=0xfb;
wela=1;
wela=0;
delay(1);
}
delay(uchar
x)
{
uchar
a,b;
for(a=x;a>0;a--)
for(b=255;b>0;b--);
}
//你自己看一下,有不對的就改點.別忘了給分啊

Ⅶ 51單片機電子鍾程序數碼管顯示

#include<reg51.h>

#define uchar unsigned char

sbit la=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
unsigned char j,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;
uchar shi20,shi10,fen20,fen10,miao20,miao10,new,ok=1,wei;
unsigned int pp;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1)
{
la=0;
P0=table[shi2];
la=1;
la=0;

wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);

P0=table[shi1]|0x80;
la=1;
la=0;

P0=0xfd;
wela=1;
wela=0;
delay(5);

P0=table[fen2];
la=1;
la=0;

P0=0xfb;
wela=1;
wela=0;
delay(5);

P0=table[fen1]|0x80;
la=1;
la=0;

P0=0xf7;
wela=1;
wela=0;
delay(5);

P0=table[miao2];
la=1;
la=0;

P0=0xef;
wela=1;
wela=0;
delay(5);

P0=table[miao1];
la=1;
la=0;

P0=0xdf;
wela=1;
wela=0;
delay(5);
}

void keyscan0()
{
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xbb:
ok=0;
break;

case 0x7b:
ok=1;
break;
}
}
}
}

void keyscan()
{
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
wei++;
break;

case 0xde:
key=1;
wei++;
break;

case 0xbe:
key=2;
wei++;
break;

case 0x7e:
key=3;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
wei++;
break;

case 0xdd:
key=5;
wei++;
break;

case 0xbd:
key=6;
wei++;
break;

case 0x7d:
key=7;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
wei++;
break;

case 0xdb:
key=9;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
}
}

void main()
{
TMOD=0x01;

TH0=(65536-46080)/256;// 由於晶振為11.0592,故所記次數應為46080,計時器每隔50000微秒發起一次中斷。
TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12
ET0=1;
EA=1;

while(1)
{ keyscan0();

if(ok==1)
{ TR0=1;
wei=0;

if(pp==20)
{ pp=0;
m++;
if(m==60)
{
m=0;
f++;
if(f==60)
{
f=0;
s++;
if(s==24) //為24h一個循環,若要12h,只需在此改為12即可。
{
s=0;
}
}
}
}

a0=s%10;
a1=s/10;
b0=f%10;
b1=f/10;
c0=m%10;
c1=m/10;
display(a1,a0,b1,b0,c1,c0);
}
else
{ TR0=0;
keyscan();
if(key!=10)
{

switch(wei)
{
case 1: if(key<3) //小時最高位為2
a1=key;
else
wei--;
break;
case 2: if(a1==1|a1==0)
a0=key;
else
if(key<5)
a0=key; //當小時最高位為2時,低位最高為4
break;
case 3: if(key<7) //分鍾最高位為6
b1=key;
else
wei--;
break;
case 4: b0=key; break;
case 5: if(key<7) //秒最高位為6
c1=key;
else
wei--;
break;
case 6: c0=key; break;
}
key=10;
}
m=c1*10+c0;
f=b1*10+b0;
s=a1*10+a0;
display(a1,a0,b1,b0,c1,c0);
}
}
}

void time0() interrupt 1
{ TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
pp++;
}

Ⅷ 51單片機的共陰數碼管怎麼顯示數字(c語言)

要讓51單片機共陰數碼管顯示數字,只需要將單片機的P2埠輸出數字對應的段碼即可。

以顯示數字「0」為例,c語言程序如下:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

//數碼管的段碼編碼

Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void main(){//主函數

P0 = table[0];//顯示0,大家可以修改裡面的數據。

while(1);//程序不再執行其他步驟;

}

(8)51單片機數碼管動態顯示程序擴展閱讀:

數字0-9的對應段碼:

數字0 0x3f

數字1 0x06

數字2 0x5b

數字3 0x4f

數字4 0x66

數字5 0x6d

數字6 0x7d

數字7 0x07

數字8 0x7f

數字9 0x6f

閱讀全文

與51單片機數碼管動態顯示程序相關的資料

熱點內容
安卓國服光遇小王子季節什麼時候結束 瀏覽:537
恢復的音樂在哪個文件夾 瀏覽:595
qq傳輸文件夾壓縮包 瀏覽:911
sha1加密演算法java 瀏覽:232
單片機ds1302程序 瀏覽:738
杜比壓縮開還是關怎樣判斷 瀏覽:366
對象類型轉換java編譯和運行 瀏覽:284
行政命令是什麼 瀏覽:371
android調用系統郵件 瀏覽:33
測溫軟體app是如何實現的 瀏覽:585
江蘇伺服器機房按需定製雲主機 瀏覽:639
c程序員筆試 瀏覽:694
excel怎麼引用統一文件夾 瀏覽:249
怎麼把微信抖音加密 瀏覽:304
android滑動進度條 瀏覽:834
javagmt轉換 瀏覽:826
linux查看snmp 瀏覽:25
ug80車床編程 瀏覽:518
怎麼加速python計算素數 瀏覽:243
腰椎第五節壓縮性骨折 瀏覽:93