當前位置:首頁 » 編程語言 » c語言數碼管60秒
擴展閱讀
拍進京證多長時間上傳 2022-08-18 06:30:11
淘寶上傳素材怎麼弄 2022-08-18 06:29:58

c語言數碼管60秒

發布時間: 2022-06-27 02:07:58

❶ 求C51單片機匯編語言控制兩位數碼管60秒倒計時的程序,最好能說明下思路

#include <at89x52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define seg P0
#define sw P2
int tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int dis[]={0,0};
uint X;
uchar Count=0;
uchar sec=60;
void display()
{
int a;
int m=0x01;
dis[0]=sec/10;
dis[1]=sec%10;
for(a=0;a<2;a++)
{
seg=0xff;
seg=tab[dis[a]];
sw=m;
m=_crol_(m,1);
}
}
void TINT0() interrupt 1
{
TL0=-50000%256;
TH0=-50000/256;
if(++Count==20)
{
if(sec>0)sec--;
Count=0;
}
}
void Main()
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TL0=-50000%256;
TH0=-50000/256;
while(1)
{
if(sec==0)sec=60;
display();
}

}

❷ 用c語言編程,使51單片機數碼管從0顯示到60

#include <REGX52.H>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define DataPort P0

#define RS_CLR RS = 0
#define RS_SET RS = 1

#define RW_CLR RW = 0
#define RW_SET RW = 1

#define EN_CLR EN = 0
#define EN_SET EN = 1

sbit RS = P1^3; //定義埠
sbit RW = P1^4;
sbit EN = P1^5;
sbit wx = P2^6;
sbit dx = P2^7;
sbit beep = P2^2;

unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

/*
* 功 能:延時,若干毫秒
* 參 數:毫秒數
* 返回值:無
*/
void DelayMs(unsigned int i) //一個延時函數,這個函數在11.0592M晶振下的延時時間大概為1ms
{
unsigned int j,k;

for(j=i; j>0; j--)
for(k=114; k>0; k--);
}

/*
* 功 能:延時
* 參 數:延時的數量
* 返回值:無
*/
void delay(uint x)
{
uint a,b;
for(a=x; a>0; a--)
for(b=10; b>0; b--);
}

/*
* 功 能:顯示計時的秒數
* 參 數:無
* 返回值:無
*/
void display(uchar d2, uchar d1)
{
P0 = table[d2];
dx = 1;
dx = 0;

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

P0 = table[d1];
dx = 1;
dx = 0;

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

}

void main()
{
uchar i, second=0, d1, d2, dat=0xFF;

while(1)
{
DelayMs(1000);
second++;
dat--;
P1 = dat;
if(second == 60)
{
second = 0;
}

d2 = second / 10;
d1 = second % 10;

for(i=50; i>0; i--)
{
display(d2, d1);
}
}
}

❸ 求一個簡單的單片機用數碼管顯示計時60秒的C語言程序,程序一定要帶有解釋和Proteus 模擬電路圖.

/***程序模擬用89c52數碼管用共陽極數碼管

P0口段選,P3.0和P3.1位選

定時器2用法見網路「T2CON」***/

#include<reg52.h>

#defineuintunsignedint

#defineucharunsignedchar

ucharcodenum[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//共陽極數碼管0-9數組以及全滅和「-」符號

uchardatada[2];//定義顯示緩存

uintsec;//定義秒

uchara;//顯示位選擇

//延時子程序

voidd(uinti)

{uintj;

for(;i>0;i--)

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

}

//顯示函數

voidprt()

{

da[0]=sec/10;//十位存入顯示緩存

da[1]=sec%10;//各位存入顯示緩存

P0=num[da[a]];//將要顯示的數據付給P0

d(5);//延遲一小段時間

P3<<=1;//P3數據向左移移位

P0=0xff;//消隱

a++;//顯示數據指向下一位

if(a>1){a=0;P3=0x01;}//第二個數據掃完,指向第一個數據

}

//定時器中斷子函數

timer2()interrupt5

{

staticuchart;

TF2=0;

t++;

if(t==20)//定時夠20次即1s

{

t=0;//t清零

sec++;//秒加1

if(sec==60)sec=0;//

}

}

//主函數

voidmain()

{ //

RCAP2H=(65536-50000)/256; //

RCAP2L=(65536-50000)%256; //定時器2定時50MS

TR2=1; //啟動定時器2

ET2=1; //打開定時器2中斷

EA=1; //開總中斷

P3=0x01;

while(1)

{prt(); //顯示

}

}

望採納···

❹ 怎麼讓一組數碼管顯示完60秒倒計時後讓下一組接著顯示,然後以此不斷循環,求大神指點,電路和代碼是啥

可以用兩個二位一體共陰數碼管,即為兩組。倒計時用定時器定時50ms,採用中斷方式,並對中斷計數20次就是1秒。用一個變數做秒計數,每一秒減一,即可以實現倒計時了。第一組數碼管顯示倒計時模擬結果如下。

❺ 使用2個數碼管設計一個60秒倒計時C語言程序,要求用定時器中斷定時1秒。 模擬元件數碼管為7SEG-COM-CATHODE

7SEG-COM-CATHODE為共陰管

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharnum=60,shi,ge;

ucharcodeTAB[]={

0x3F,/*0*/

0x06,/*1*/

0x5B,/*2*/

0x4F,/*3*/

0x66,/*4*/

0x6D,/*5*/

0x7D,/*6*/

0x07,/*7*/

0x7F,/*8*/

0x6F,/*9*/

};

voidT0INTinit()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

voidmain()

{

T0INTinit();

while(1)

{

shi=num/10;

ge=num%10;

P0=TAB[shi];

P2=TAB[ge];

}

}

voidT0INT()interrupt1

{

uchari;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++;

if(i==20)

{

i=0;

num--;

if(num==0)

num=60;

}

}

❻ 關於51單片機60秒倒計時的c語言程序,delay和dispiay部分分別什麼意思啊,具體點

delay(int t)這個是延時子程序,如果採用20M晶振的話,調用一次延時t毫秒。
display()是數碼管動態掃描顯示子程序,位控位為P3.0、P3.1,段碼控制為P1。掃描間隔時間為5毫秒左右。

❼ 急~!!用數碼管顯示60秒的秒錶設計(單片機AT89C51)

;程序如下:

;fosc = 11.0592MHz

SP1 BIT P3.2
LED BIT P3.4
;-------------------------------
ORG 0000H
SJMP START
ORG 000BH
MOV TH0, #4CH
JNB F0, T0_END
DJNZ R5, T0_END
MOV R5, #20
INC R4
CJNE R4, #60, T0_E1 ;最大為59
MOV R4, #0
CLR LED
T0_E1:
CALL DISP
CJNE R4, #5, T0_END ;LED亮5s
SETB LED
T0_END:
RETI
;-------------------------------
DISP:
PUSH ACC
PUSH B
MOV A, R4
MOV B, #10
DIV AB
MOV DPTR, #TABLE
MOVC A, @A + DPTR
MOV P1, A
MOV A, B
MOVC A, @A + DPTR
MOV P2, A
POP B
POP ACC
RET
TABLE:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;-------------------------------
START:
MOV TMOD, #01H
MOV TH0, #4CH
SETB TR0
SETB ET0
SETB EA
M_LOOP:
MOV R4, #0
MOV R5, #20
CALL DISP
WT: JB SP1, $
CALL DELAY
JB SP1, WT
JNB SP1, $
CPL F0
JNB F0, WT
SJMP M_LOOP
DELAY:
MOV R6, #40
DJNZ R7, $
DJNZ R6, $ - 2
RET

END

❽ 紅燈亮60秒在數碼管倒計數60s;黃燈亮5秒數碼管倒計時65s;綠燈亮60秒數碼管倒計時60s,用C編寫

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint temp,temp1,temp2,num,shi,ge,i,j;
uchar code table[]={0x01,0x67,0x12,0x42,0x64,0x48,0x08,0x63,0x00,0x40};
sbit E1=P0^7;
sbit welay1=P2^6;
sbit welay2=P2^7;
sbit SNL=P2^2;
sbit SNY=P2^1;
sbit SNR=P2^0;
sbit EWL=P2^5;
sbit EWY=P2^4;
sbit EWR=P2^3;
void init()
{
P0=0xff;
P2=0xff;
temp=0;
temp1=0;
temp2=0;
shi=0;
ge=0;
E1=0;
TMOD=0x21;
TH0=0x3c; //50ms
TL0=0xb0;
EA=1;
ET0=1;
TF0=0;
TR0=1;
}
void delay(uchar z)
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}

void display()
{
shi=num/10;
ge=num%10;
P0=table[ge];
welay2=1;
welay1=0;
delay(10);
welay1=1;
P0=table[shi];
welay1=1;
welay2=0;
delay(10);
welay2=1;
}
void time0() interrupt 1 using 1
{
temp++;
temp1++;
TH0=0x3c;
TL0=0xb0;
//display();
TR0=1;
}
void main()
{
init();
while(1)
{
if(temp==0)
{
EWL=0;
SNR=0;
num=31;
temp1=0;
for(i=30;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==600) //
{
EWL=1;
num=6;
j=0;
for(i=12;i>0;i--)
{
j++;
if(j%2==0)
{
num--;
}
temp2=temp;
EWY=!EWY; //燈閃爍
while(temp-temp2!=10)
{
display();
};
}
}
if(temp==720)
{
EWY=1;
EWR=0;
SNR=1;
SNL=0;
num=24;
temp1=0;
for(i=24;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}

}
if(temp==1200)
{
SNL=1;
j=0;
num=6;
for(i=12;i>0;i--)
{
temp2=temp;
SNY=!SNY;
j++;
if(j%2==0)
{
num--;
}
while(temp-temp2!=10)
{
display();
};
}
SNY=1;
EWR=1;
temp=0;
}
}

}

直接修改顯示的時間就可以達到要求。

❾ 求C語言程序:數碼管60秒倒數

共陰數碼管,首先通過小工具將0-9的10個數字的a-f點亮方式定義到數組中.
之後就是定義一個位元組的BCD碼,4位高為一個數字 0-9 左邊,4位低為數字右邊.這樣只要對這個BYTE值取下標就可以顯示出來.思路希望對你有幫助.你這個是靜態方式,比較浪費IO口,另外既然P0口拉了,最好P2口也拉一下,不過stc是有強推輸出,可以不拉.

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

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

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