Ⅰ 單片機兩位數碼管顯示數字
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,dat=29;
void t0isr() interrupt 1
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
分類
數碼管也稱LED數碼管,不同行業人士對數碼管的稱呼不一樣,其實都是同樣的產品。按發光二極體單元連接方式可分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極體的陽極接到一起形成公共陽極(COM)的數碼管,共陽數碼管在應用時應將公共極COM接到+5V,當某一欄位發光二極體的陰極為低電平時,相應欄位就點亮,當某一欄位的陰極為高電平時,相應欄位就不亮。
以上內容參考:網路-數碼管
Ⅱ 在KEIL環境下的51編程LED兩位數倒計時
#include<AT89X51.H>
unsigned char flag1=0;
unsigned char counter=0;
unsigned char first=0;
unsigned char second=0;
unsigned char code dptable[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段碼表
main()
{
TMOD=0x10;//定時器T1,方式1
TH1=0xfa;//晶振為3.6864MHz,每5ms進一次中斷
TL1=0x00;
TR1=1;
ET1=1;
EA=1;
while(1)
{
P1_0=1;//P1口為位選
P2=dptable[second];//P2口為段選
P1_0=0;
while(flag1==0);//動態掃描,每個數碼管亮5ms
flag1=0;
P1_0=1;
P2=dptable[first];
P1_1=0;
while(flag1==0);
flag1=0;
P1_1=1;
}
}
void interT1() interrupt 3//5ms進一次中斷
{
TH1=0xfa;
TL1=0x00;
flag1=1;
counter++;
if(counter==200)//定時至1s
{
counter=0;
first--;
if(first==255)
{
first=9;
second--;
}
if(second==255)
{
second=7;
first=9;
}
}
}
Ⅲ keil寫程序 單片機二位數碼管顯示倒計時
#include<reg52.h>
#define uchar unsigned char
#define an P0 //共陰數碼管的陽極埠
sbit wei1=P2^4; //共陰數碼管的陽極埠,我的是四位的,下面語句中把1,2關了,只用到了3,4。
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數碼管0~9的十六進制碼
void delay(uchar xms) //軟體延時
{
int i,j;
for(i=xms;i>0;i--)
for(j=125;j>0;j--);
}
void display(int tens,ones) //用來顯示數字的函數,顯示此時的十位,個位。
{
int i,j;
for(i=2;i>0;i--)//通過改變i和j的值,可以改變計時時間。
for(j=50;j>0;j--)
{
wei3=1;//掃描原理。
wei4=0;
an=num[tens];
delay(5);
wei3=0;
wei4=1;
an=num[ones];
delay(5);
}
}
void main()
{
int onesp=0,tensp=0;//定義ones place和tens place。
wei1=0;
wei2=0;
while(1)
{
for(tensp=9;tensp>=0;tensp--)
{
for(onesp=9;onesp>=0;onesp--)
{
display(tensp,onesp);//調用函數顯示此時的數字。
}
}
}
}
這個程序測試可用,從99計數到00。只用了比較簡單知識,不涉及定時器和系統中斷。不懂可以追問。
Ⅳ keil編程開關閉合狀態數碼管靜態顯示
51單片機怎樣用鍵盤控制數碼管顯示的方法。如下參考:1.首先,編寫代碼並點亮數碼管。2.在編寫源代碼之後,確保原始代碼是正確的。3.確認代碼正確後,進入下一步,就是在這一行代碼(箭頭所指)中,刪除這四個單詞。4.然後如圖所示,四個單詞已被刪除,只要修改相應的代碼編號即可。5.表示數字0的代碼在這里進行了更改,如圖所示。6、最後寫代碼,將生成的十六進制文件寫進單片機應答,數碼管顯示的數字變為0。
Ⅳ 用keil軟體,匯編語言編程使兩個數碼管同時顯示不同內容,比如以「37為例,,,謝謝,」
兩個光腳控制選中的數碼管,然後其他管腳輸入數字。把這個過程放在一個循環里,不停的循環。
Ⅵ 用單片機實現2位靜態數碼管(共陽)控制,其中系統還包括4個獨立按鍵(中斷形式),
2位共陽數碼管分別接在P0口和P口。難點是4個按鍵要採用中斷方式,所以,4個按鍵不但接成獨立式按鍵,還要用一個4輸入與門得到一個中斷請信號加到P3.2上,用INT0中斷。右移,左移指定的位,用小數點顯示。模擬圖如下。
Ⅶ 求2位數碼管顯示C程序
首先,你沒有給出數碼管的相應電路,這里就用Display()函數來代替你的顯示程序。按鍵也沒有給出電路,這里以普通IO按鍵來編寫程序。
unsigned
char
disp_data;
//定義一個用於存儲需要顯示數值的全局變數
void
Display(unsigned
char
disp)
//數碼管顯示函數,輸入參數為要顯示的值。
void
Delay_ms(unsigned
char
disp)
//毫秒級延時函數,用於按鍵去抖動。
void
main()
{
disp_data=50;
Display(disp_data);
//初始顯示"50"
while(1);
//循環查詢+-按鍵的狀態
{
if(K+
==
0)
//判斷K+是否被按下(假如按鍵按下時為低電平)
{
Delay_ms(20);
//延時,去抖動
if(k+
==
0)
//再次判斷
{
disp_data++;
//數值+1
if(disp_data>80)
//判斷數據是否超出范圍
{
//已經超出
disp_data=80;
//使數據保持在80;
Display(disp_data);
//顯示數據
}
else
//沒有超出
{Display(disp_data);}
//顯示數據
}
}
if(K-
==
0)
//判斷K-是否被按下(假如按鍵按下時為低電平)
{
Delay_ms(20);
//延時,去抖動
if(k-
==
0)
//再次判斷
{
disp_data--;
//數值-1
if(disp_data<50)
//判斷數據是否超出范圍
{
//已經超出
disp_data=50;
//使數據保持在50;
Display(disp_data);
//顯示數據
}
else
//沒有超出
{Display(disp_data);}
//顯示數據
}
}
}
}
瀏覽器里直接打的代碼,整體思路應該是對的,需要注意的是K+\K-這樣的變數keil中是非法的,實際程序中請自行改正。
Ⅷ keil 用c51如何編寫按鍵通過74hc164控制兩個共陽極數碼管
要用74hc164控制兩個共陽極數碼管,應該用單片機的串口,並用方式0,74HC164的A、B端接P3.0,CLK端接P3.1。四個按鍵接法錯誤,是不能識別按鍵的,應該按下圖這接地,不要用二極體。左上角的四個LED是不會亮,也要用下圖這種LED,模擬時才會亮。4個LED和4個按鍵不能與數碼管的段控端abcdefg共用。模擬圖有這么多錯誤,就是寫程序也沒用。
Ⅸ 在2位數碼管上持續穩定顯示字形"EL"。在單片機上怎麼弄
對於一位的數碼管,如圖示共陽極,那麼在P0埠輸出要顯示字元的七段碼即可;