導航:首頁 > 操作系統 > 單片機兩位數碼管幾個倒計時循環

單片機兩位數碼管幾個倒計時循環

發布時間:2022-11-01 07:29:54

單片機共陰極兩位數碼管動態顯示15秒倒計時

沒有具體的原理圖,所以就從原理上說明一下吧,首先應該先根據原理圖推出每個數碼管每個數字對應的8位驅動信號類型,既然是共陰極,那麼如果給數碼管對應的引腳置1,就會讓該位發光,這樣就可以推出從0到9的數碼管驅動序列,如果是以一個51單片機的一個P0口為例,可以編成八位序列的形式以便賦值,比如0xff等,這樣編一個數組。data[9]={//九位數據的內容};以便在主程序中應用。
主程序中實現的過程應該如下(假設是由P0和P1口實現):
while(1)
{
P0=data[1];
P1=data[5];
delay(1);//delay是延時函數,此子函數可以用空循環的形式編寫,以實現1s的延時
P0=data[1];
P1=data[4];
delay(1);
。。。。。。以此類推
}
這樣就會實現無限循環的15s倒計時

㈡ 單片機100秒倒計時程序(兩位數碼管,設置復位和開始兩個按鈕)

簡單說兩句,這個也不是很難,有很多種方案,說一個吧,首先是兩位數碼管的驅動,可以選擇單片機帶max7219然後外擴兩個led數碼管,硬體連接既簡單也成熟,並且單片機驅動程序也是很成熟的,這樣通過程序可以隨時改變數碼管顯示,然後就是復位鍵和開始鍵,可以使用中斷或查詢方式,如果是中斷,直接將其連接到外部中斷和1上,如果是查詢直接連到單片機的兩個GPIO上,最好做個防抖動電路,防止多次運行,具體程序應該也不是很困難,呵呵,就是有點麻煩。

㈢ 求C51單片機匯編語言控制兩位數碼管倒計時程序,從60秒到30秒再到90秒並循環倒計時顯示。

從60秒到30秒再到90秒並循環倒計時顯示。
----
有點不好理解。

從60秒到30秒,看來,是倒計時。
到了30之後,怎麼辦?是立即改為90嗎?
到了90之後,再怎麼辦?是立即改為60嗎?

㈣ 51單片機編程2位數碼管倒計時,從10秒開始每隔一秒減一當減到零有重復回到10秒

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//主程序
void main()
{
P0=0x06; //顯示10
P2=0x3f;
i=0;
Second_Counts=100;
TMOD=0x01; //定時器0方式1
TH0=(65536-50000)/256; //定時器0: 5ms
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1
while(1) ;
}
//T0中斷函數
void DSY_Refresh() interrupt 1
{
TH0=(65536-50000)/256; //恢復定時器0初值
TL0=(65536-50000)%256;
if(++i==2) //50ms*2=0.1s轉換狀態
{
i=0;
Second_Counts--;
P0=DSY_CODE[Second_Counts/100];
P2=DSY_CODE[(Second_Counts/10)%10];
if(Second_Counts<=-1) Second_Counts=100; //顯示10
}
}

㈤ 51單片機接2個led數碼管,怎麼讓數碼管倒計時

先看看下面程序,看懂了,就知道咋編了
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a , b=0;
sbit wei1=P1.0;
sbit wei2=P1.1;
//共陰數碼管七段碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void display( uchar a)) /顯示子程序
{
P0= table[a/10];//十位
wei1=1;
Delay1ms(2) ;
wei1=0;
P0= table[a%10];//個位
wei2=1;
Delay1ms(2) ;
wei2=0;
}
void main(void )//主程序
{
TMOD=0x01;// 定時器1工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定時50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
display(b);
}
}
//中斷子程序
void Timer0(void) interrupt 1

{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)//20次是1 秒
{ a=0;b++;}
if(b==60)
{ b=0;}
}

㈥ 求單片機數碼管倒計時程序

#include<reg52.h>
#include <intrins.h> //內部包含延時函數 _nop_();
#define uchar unsigned char
#define uint unsigned int sbit d1=P2^0; sbit key1=P0^4;
sbit SDATA_595=P0^0; //串列數據輸入 ----接板卡上的SPI 數據信號輸入端
sbit SCLK_595=P0^1; //移位時鍾脈沖(輸入口) ---接板卡上的SPO----串列時鍾線----SHcp移位時鍾信號輸入端
sbit RCK_595=P0^2; //輸出鎖存器控制脈沖 ----接板卡上SPK STcp鎖存信號輸入端
uchar code an[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar num=60;
void delay(uint z);
void aa595_in(uchar Data) {
uchar i;
for(i=0;i<8;i++)
{SCLK_595=0; Data<<=1; SDATA_595=CY;
SCLK_595=1; SCLK_595=0;
}
}
void a595_in(uchar Data) {
uchar i;
for(i=0;i<8;i++) {
SCLK_595=0; Data<<=1; SDATA_595=CY;
SCLK_595=1; SCLK_595=0;
}
}
void aa595_out(void) {
RCK_595=0;
_nop_(); _nop_();
RCK_595=1;
_nop_(); _nop_();
RCK_595=0;
}
void main() {
uchar ge,shi;
while(1) {
if(key1==0) {
delay(10);
if(key1==0)
{d1=0; num--;
if(num==0)
num=60;}
while(!key1);//鬆手檢測
delay(10);//延時10ms
while(!key1);//再鬆手檢測
}
else d1=1;
// aa595_in(an[num]);
// aa595_in(wei[3]);
shi=num/10;
ge=num%10;
a595_in(an[shi]);
aa595_in(wei[3]);
aa595_out();
delay(10);
aa595_in(an[ge]);
aa595_in(wei[2]);
aa595_out();
delay(10);}
}
void delay(uint z) {
uint x,y;
for(x=100;x>0;x--) for(y=z;y>0;y--);
}//延時子程序,延時Zms

㈦ 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。只用了比較簡單知識,不涉及定時器和系統中斷。不懂可以追問。

㈧ 求兩位數碼管顯示一個倒數時間的單片機程序,比如顯示從99到0

//兩位數碼管顯示倒計數99~00,51單片機。
#include<reg52.h> // 倒計數
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar ,shi;
uint a1,a2;
sbit D1=P3^0; // 位選1 P1口段碼輸出
sbit D2=P3^1; // 位選2
sbit key=P3^7; // 啟動/停止
bit y ;
void main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
=0;
shi=0;
while(1)
{
if(key==0)
{
}
}
}
void timer0()interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
a1++;
y = ~y;
if(a1==100)
{
a1=0;
if(key==1) a2--;
if(a2>=100) a2=99;
}
D1 = 1; D2 = 1;
if(y==1)
{
P1=table[a2/10];
D1=0;
}
else
{
P1=table[a2%10];
D2=0;
}
}

㈨ 小白求救,51單片機利用兩個數碼管實現60秒倒計時

個位數能夠顯示正常,那麼就說明十位數的處理代碼出了問題;

給出代碼看看吧

㈩ 單片機交通燈數碼管多次倒計時

這個問題單片機交通燈數碼管多次倒計時,可以參考下我之前的回答幫助

具體的,你看下BJ的網路空間

ES://lsls03BJ

閱讀全文

與單片機兩位數碼管幾個倒計時循環相關的資料

熱點內容
怎麼批量有順序的命名文件夾 瀏覽:209
杭州程序員健身 瀏覽:17
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151