導航:首頁 > 操作系統 > 單片機實驗數碼顯示程序

單片機實驗數碼顯示程序

發布時間:2023-01-22 03:58:21

❶ 51單片機(四位數碼管的顯示)程序

下面這個程序是4x4距陣鍵盤,LED數碼管顯示,一共可以到0-F顯示,你可以稍微改一下就可以實現你的功能了,如還有問題請發信息,希望能幫上你!
#include<at89x52.h>
unsigned char code Dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //數碼管 0-F 代碼
unsigned char k; //設置全局變數k 為鍵盤的鍵值

/************************************鍵盤延時函數****************************/

void key_delay(void) //延時函數
{
int t;
for(t=0;t<500;t++);
}

/************************************鍵盤掃描函數******************************/
void keyscan(void) //鍵盤掃描函數
{
unsigned char a;
P2 = 0xf0; //鍵盤初始化
if(P2!=0xf0) //有鍵按下?
{
key_delay(); //延時
if(P2!=0xf0) //確認真的有鍵按下?
{
P2 = 0xfe; //使行線P2.4為低電平,其餘行為高電平
key_delay();
a = P2; //a作為緩存
switch (a) //開始執行行列掃描
{
case 0xee:k=15;break;
case 0xde:k=11;break;
case 0xbe:k=7;break;
case 0x7e:k=3;break;
default:P2 = 0xfd; //使行線P2.5為低電平,其餘行為高電平

a = P2;
switch (a)
{
case 0xed:k=14;break;
case 0xdd:k=10;break;
case 0xbd:k=6;break;
case 0x7d:k=2;break;
default:P2 = 0xfb; //使行線P2.6為低電平,其餘行為高電平

a = P2;
switch (a)
{
case 0xeb:k=13;break;
case 0xdb:k=9;break;
case 0xbb:k=5;break;
case 0x7b:k=1;break;
default:P2 = 0xf7; //使行線P2.7為低電平,其餘行為高電平

a = P2;
switch (a)
{
case 0xe7:k=12;break;
case 0xd7:k=8;break;
case 0xb7:k=4;break;
case 0x77:k=0;break;
default:break;
}
}
}
break;
}
}
}
}

/****************************** ***主函數*************************************/
void main(void)
{
while(1)
{
keyscan(); //調用鍵盤掃描函數
switch(k) //查找按鍵對應的數碼管顯示代碼
{
case 0:P0=Dig[0];break;
case 1:P0=Dig[1];break;
case 2:P0=Dig[2];break;
case 3:P0=Dig[3];break;
case 4:P0=Dig[4];break;
case 5:P0=Dig[5];break;
case 6:P0=Dig[6];break;
case 7:P0=Dig[7];break;
case 8:P0=Dig[8];break;
case 9:P0=Dig[9];break;
case 10:P0=Dig[10];break;
case 11:P0=Dig[11];break;
case 12:P0=Dig[12];break;
case 13:P0=Dig[13];break;
case 14:P0=Dig[14];break;
case 15:P0=Dig[15];break;
default:break; //退出
}
}
}

/**********************************end***************************************/

❷ 單片機數碼顯示程序解讀幫我讀下!!

程序應該是在數碼管上顯示2010
P2的作用是數碼管位選引腳,P1是段碼
ORG
0000H
;程序入口
;主函數
MAIN:
MOV
DPTR,#TABAL
;將數碼管碼表TABAL賦給DPTR用於查表
MOV
A,#02H
;將立即數02H賦給A
MOVC
A,@A+DPTR
;將TABAL第三個值賦給A,即0A4H賦給A
MOV
P2,#01H
;選通第一個數碼管
MOV
P1,A
;將查到的0A4H賦給P1
ACALL
DELAY
;延時
;以上這一小段就是在第一個數碼管上顯示2,下面類似
MOV
A,#0
MOVC
A,@A+DPTR
MOV
P2,#2H
MOV
P1,A
ACALL
DELAY
MOV
A,#01H
MOVC
A,@A+DPTR
MOV
P2,#04H
MOV
P1,A
ACALL
DELAY
MOV
A,#0
MOVC
A,@A+DPTR
MOV
P2,#8H
MOV
P1,A
ACALL
DELAY
AJMP
MAIN
;跳到MAIN,這里構成循環,不停地掃描數碼管顯示
;以下為延時函數
DELAY:
MOV
R6,#10H
;將10H賦給R6
LOOP1:
MOV
R7,#38H
;將38H賦給R7
LOOP2:
DJNZ
R7,LOOP2
;判斷R7減1是否為0,若不為0則繼續執行LOOP2
DJNZ
R6,LOOP1;判斷R6減1是否為0,若不為0則繼續跳到LOOP1執行
RET
;下面為共陽數碼管碼表
TABAL:
DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,080H,090H
END

❸ 51單片機共陰數碼管利用靜態顯示,讓六個數碼管顯示1~6,程序怎麼寫

代碼如下:

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

#define data P0 //P0口宏定義

/* ***************************************************** */

// 數碼管位選數組定義

/* ***************************************************** */

uchar code leddata[] =

{ 0x3F, //"0"

0x06, //"1"

0x5B, //"2"

0x4F, //"3"

0x66, //"4"

0x6D, //"5"

0x7D, //"6"

0x07, //"7"

0x7F, //"8"

0x6F, //"9"

0x77, //"A"

0x7C, //"B"

0x39, //"C"

0x5E, //"D"

0x79, //"E"

0x71, //"F"

0x76, //"H"

0x38, //"L"

0x37, //"n"

0x3E, //"u"

0x73, //"P"

0x5C, //"o"

0x40, //"-"

0x00, //熄滅

0x00 //自定義};

};

/* ***************************************************** */

// 位定義

/* ***************************************************** */

sbit = P1^7; //段選定義

sbit we = P1^6; //位選定義

/* ***************************************************** */

// 函數名稱:DelayMS()

// 函數功能:毫秒延時

// 入口參數:延時毫秒數(ValMS)

// 出口參數:無

/* ***************************************************** */

void delay(uint z)

{

uint x,y;

for(x = 0; x < z; x++)

for(y = 0; y < 113; y++);

}

/* ***************************************************** */

// 函數名稱:main()

// 函數功能:數碼管靜態顯示

// 入口參數:無

// 出口參數:無

/* ***************************************************** */

void main(void)

{

uchar i;

we = 1;//位選開

data = 0x00;//送入位選數據

we = 0;//位選關

while(1)

{

 for(i = 0;i < 16 ; i++)

 {

 = 1; //段選開

data = leddata[i]; //送入段選數據

 = 0; //段選關

 delay(500); //延時

 }

}

}

(3)單片機實驗數碼顯示程序擴展閱讀

對於74HC573,形象一點,我們只需要將其理解為一扇大門,只不過這扇大門是單向的,其中11引腳(LE)控制著門的開、關狀態,高電平為大門打開,低電平為大門關閉。

D0-D7為輸入,Q0-Q7為輸出,在LE = 1,即輸入高電平時,輸入端=輸出端,輸入是什麼,輸出也就原封不動的輸出;在LE = 0 ,即輸入高電平時,大門關閉,實現鎖存,不再輸出。了解之後,我們按照電路圖,來進行編程,代碼實現。

在實現數碼管的靜態顯示中,用到了兩個鎖存器,兩個I/O口,P1.6和P1.7,分別是位選和段選。

首先定義了個數碼管位選數組,也就是十六進制代碼,這便是後來數碼管顯示數字的核心,接著,用 sbit 定義了位選和段選埠,分別是 P1.6 和 P1.7 ,定義了一個延時函數,其實這一串代碼很有意思,開關開關思想,貫穿始終。

首先把位選打開,送入位選數據後,關閉鎖存器,實現鎖存,進入循環,隨之打開段選鎖存器,送入段選數據後,再次關閉段選。

接下來,這個延時操作對於實際看到數碼管的顯示效果特別重要,因為程序在段選後之後,會馬上消隱,顯示的時間之後幾個微秒,這顯然不太合理,需要在關閉段選後加上延時,這樣一來,才會讓每位數碼管亮度保持均勻。

❹ 51單片機四位一體共陽極數碼管顯示編程

不清楚你的電路構成如何,因此先按下面的假設執行段碼及位碼的輸出;
其中,延時值可根據實驗效果予以調整;
設 P0 為輸出七段碼(共陽極數據);
四位數碼管有4個陽極,設位碼分別與P2.4--P2.7對應,並且=1時表示可點亮數碼管;
sbit wma1=b2^4; //對應左起第1個數碼管的陽極

sbit wma2=b2^5; //對應左起第2個數碼管的陽極
sbit wma3=b2^6;
sbit wma4=b2^7;
void main()
{
wma1=0; wma2=0; wma3=0; wma4=0;
while(1)
{
P0=table[0]; wma1=1; delay(10); wma1=0;
P0=table[1]; wma1=2; delay(10); wma2=0; P0=table[2]; wma1=3; delay(10); wma3=0; P0=table[3]; wma1=4; delay(10); wma4=0; P0=table[4]; wma1=1; delay(10); wma1=0; P0=table[5]; wma1=2; delay(10); wma2=0; P0=table[6]; wma1=3; delay(10); wma3=0; P0=table[7]; wma1=4; delay(10); wma4=0;
}
}

❺ 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/*----------------延時程序-----------------------------------------------*/

❻ 單片機用匯編寫兩個數碼管顯示0到99循環的程序

1、新建項目,做好准備。

❼ 求單片機實驗七段數碼管顯示實驗程序

/* ch03-3-4.c - 七段LED數碼管實驗程序 */
//==聲明區=================================================
#include<reg51.h> //定義8051寄存器的頭文件,P2-17~19
#define SEG P0 //定義七段LED數碼管接至Port 0
/*聲明七段LED數碼管驅動信號數組(共陽)*/
char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //數字0-4
0x92,0x83,0xf8,0x80,0x98}; //數字5-9
void delay(int); //聲明延遲函數
//==主程序==========================================
main() //主程序開始
{ unsigned char i; //聲明無符號變數i
while(1) //無窮循環,程序一直跑
for(i=0;i<10;i++) //顯示0-9,共10次
{ SEG=TAB[i]; //顯示數字
delay(500); //延遲500×1m=0.5秒
} //for循環結束
} //主程序結束
//==子程序==========================================
/* 延遲函數,延遲約x×1ms */
void delay (int x) //延遲函數開始
{ int i,j; //聲明整形變數i,j
for (i=0;i<x;i++) //計數x次,延遲x×1ms
for (j=0;j<160;j++); //計數120次,延遲1ms
} //延遲函數結束

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

動態顯示的是有固定格式的,賦值,開顯示,延時,關顯示,假設p0口接數據顯示位,p2口低4位接片選,
p2=tab[1];
//賦值
p3_0=0;
//開第一位顯示
for(i=0;i<200:i++);//延時
p3_0=1;
//關第一位顯示
p2=tab[2];
p3_1=0;
//開第二位顯示
for(i=0;i<200:i++);
p3_1=1;
這個程序就是讓兩個數碼管分別顯示1和2,注意程序開頭包含頭文件regx52.h,如果是包含reg52.h編譯不了的

閱讀全文

與單片機實驗數碼顯示程序相關的資料

熱點內容
十字軍聖印審判命令聖印宏 瀏覽:308
輕量雲伺服器有顯卡 瀏覽:144
linux文件添加內容 瀏覽:223
永恆之塔單機命令 瀏覽:216
加密貨幣好轉嗎 瀏覽:768
如何將手機上的app發給微信好友 瀏覽:491
解壓文件無效 瀏覽:86
用戶畫像數據建模演算法 瀏覽:848
假睫毛濃密加密 瀏覽:784
ppt教程pdf 瀏覽:112
北京加密狗廠家 瀏覽:869
大地超app怎麼更改個人信息 瀏覽:485
excel自動被加密 瀏覽:180
linux命令行分號 瀏覽:730
linux命令執行文件 瀏覽:169
模擬飛行解壓 瀏覽:339
程序員必讀定律 瀏覽:660
長沙保衛戰薛岳下命令是哪一集 瀏覽:416
hp伺服器如何進iLO界面 瀏覽:142
固定ip伺服器如何加防火牆 瀏覽:235