導航:首頁 > 操作系統 > 單片機99秒錶

單片機99秒錶

發布時間:2022-12-31 10:27:32

⑴ 編一個AT89C51單片機00 —99 秒的匯編程序,要求有循環和暫停,用兩個獨立數碼管顯示

;利用中斷的99秒計時器,動態掃描兩位數碼管

;P0口接J3,數據埠

;P2.2接J2B端子,表示段碼鎖存

;P2.3接J2A端子,標志位碼鎖存

LATCH1BITP2.2

LATCH2BITP2.3

ORG00H

JMPSTART

ORG0BH

JMPTIM0

START:MOVR3,#00;中斷循環次數

MOVR4,#0;時間初值

MOVDPTR,#TABLE

MOVSP,#40H

MOVTMOD,#01H;定時器工作方式

MOVTH0,#HIGH(65536-3800)

MOVTL0,#LOW(65536-3800);初值4MS

SETBTR0

MOVIE,#82H;開中斷

TIM0:

MOVTH0,#HIGH(65536-3800)

MOVTL0,#LOW(65536-3800)

INCR3

CJNER3,#250,X1;1S

MOVR3,#0

MOVA,R4;十進制轉換

MOVB,#10

DIVAB

MOV20H,B;個位

MOV21H,A;十位

INCR4

CJNER4,#100,LEDSCAN;到100則清零

MOVR4,#0

LEDSCAN:CALLSCAN;調用數碼管掃描

X1:PUSHACC

PUSHPSW

CALLSCAN

POPPSW

POPACC

RETI

SCAN:

MOVA,21H

MOVCA,@A+DPTR

MOVP0,A

SETBLATCH1

CLRLATCH1

MOVP0,#11111110B;掃描子程序

SETBLATCH2

CLRLATCH2

CALLDELAY1

MOVA,20H

MOVCA,@A+DPTR

MOVP0,A

SETBLATCH1

CLRLATCH1

MOVP0,#11111101B;0代表選通該位數碼管

SETBLATCH2

CLRLATCH2

CALLDELAY1

RET

DELAY:MOVR5,#50;典型延時程序

D1:MOVR6,#40

D2:MOVR7,#248

CALLSCAN

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

DELAY1:MOVR6,#4;掃描延時

D3:MOVR7,#248

DJNZR7,$

DJNZR6,D3

RET

TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;共陰字碼表

是用動態掃描的方法顯示的,用了2個鎖存器,8個數碼管的。

附上電路圖

⑵ 求大神寫一下單片機at89c52控制秒錶電路循環顯示0到99的程序

我寫的是共陽極,你想共陰極,自己改RXD和TDX輸入電平以及P2碼值就好。

根據你題目要求連接的。兩個LED動態顯示,交替間隔時間常量stime我設的50ms,因為我是模擬軟體,間隔太短顯示不出交替效果,你用板子測試的話,可以把間隔調小。

另外你題目暫停按鈕連在普通引腳, 如果按鈕直接連外部中斷0來實現暫停會更敏感。

#include <reg52.h>

#define uint unsigned int

#define uchar unsigned char

#define an P2

#define stime 50 //LED交替閃爍間隔時間

void init();

void pause();

sbit wei1=P3^0;

sbit wei2=P3^1;

sbit s2=P1^4;

sbit s3=P1^6;

//共陽極

void delay(uint xms);

uint g=0;

uint s=0;

uint count=0;

uint ispause=0;

void main()

{

uchar nums[10]={0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x98};

init();

while(1)

{

if(s2==0 && ispause==0)

{

if(s2==0)

{

while(s2==0);

ispause=1;

pause();

}

}

else if(s3==0 && ispause==1)

{

if(s3==0)

{

while(s3==0);

ispause=0;

pause();

}

}

if(s==0)

{

an=nums[g];

wei1=0;

wei2=1;

}

else

{

an=nums[s];

wei1=1;

wei2=0;

delay(stime);

an=nums[g];

wei1=0;

wei2=1;

delay(stime);

}

}

}

void pause()

{

EA=~EA;

}

void init()

{

TMOD=0x02; //T0 工作模式2 自動裝填8位 200us

TH0=0x38;

TL0=0x38;

EA=1;

ET0=1;

TR0=1;

}

void ct() interrupt 1

{

if(count<5000)

count++;

else

{

count=0;

if(g==9)

{

g=0;

if(s==9)

s=0;

else

s++;

}

else

g++;

}

}

void delay(uint xms)

{

uint i,j;

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

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

}

⑶ 單片機99秒倒計時

用定時器,很簡單的,我這里有個程序你可以參考一下
#include "clock.h"

void delay(uint t)
{
uint i;
while(t--)
{
/* 對於12M時鍾,約延時1ms */
for (i=0;i<100;i++)
{}
}
}

void main()
{
initial();
P0=0x00;
sec=min=hour=0;
flag=1;

while(1)
{
while(flag)
{
display(0,hour/10);
display(1,hour%10);
//display(2,3);
display(3,min/10);
display(4,min%10);
//display(5,6);
display(6,sec/10);
display(7,sec%10);
flag=0;
}
}
}

void display(uchar digit,uchar num)
{
P2=0x00;
P1=n[num];
P2=m[digit];
delay(1);
}

void initial(void)
{
//--INT0的配置----------
IT0=1; // INT0為0低電平觸發(為1則為下降沿觸發)
EX0=1; // INT0中斷開,允許INT0中斷

//--T0的配置:定時器------------
TMOD = 0x11; //定時器0,1 定時,工作方式1(16位裝載方式)

TH0 = 0x3c;//定時50ms,12M晶體振盪器
TL0 = 0xb0;
TR0 = 1; //允許T0中斷
ET0 = 1;

EA=1; // CPU所有中斷開(IE最高位MSB)
}

void timer_0() interrupt 1 using 2
{
FT0++;
if(FT0==20)
{
sec++;
FT0=0;
}

if(sec>59)
{
min++;
sec=0;
}

if(min>59)
{
hour++;
min=0;
}

if(hour>24)hour=0;

TH0 = 0x3c;//定時50ms,12M晶體振盪器
TL0 = 0xb0;

flag=1;
}

//INT0中斷 由P3.2引腳產生
void int_0() interrupt 0 using 0
{
if(key1==0)hour++;
if(key2==0)hour--;
if(key3==0)min++;
if(key4==0)min--;
if(hour<0)hour=0;
if(min<0)min=0;
}

#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

uchar n[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar m[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchar FT0,sec,min,hour,flag;

sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^6;
sbit key4=P3^7;

void display(uchar,uchar);
void timer_0();
void initial(void);
void int_0(); //外部中斷0

⑷ 怎麼用c語言寫單片機89C51的程序,要寫的程序是,0~99秒的秒錶,到99s停止,並且有滴的一聲

可根據以下程序修改:
#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);
}
}

//中斷子程序
//因為 中斷程序很短,只花不到1ms,而中斷間隔50ms,完全沒必要關中斷
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==100)//100次是5 秒
{ a=0;b++;}
if(b==100)
{ b=0;}
}

⑸ 單片機 0-99秒錶程序 求解答!!

你在中斷函數裡面把定時器中斷和定時器給禁止了,出來的時候沒有開,在中斷程序里後面的兩句改為tr0=1;et0=1;就會跑了,希望答案對你有幫助

⑹ 單片機兩位秒錶0-99

用定時器產生1秒中斷,在中斷里計時變數(全局)遞增,大於99時,清零。

⑺ 51單片機製作一個秒錶

//功能:0~99秒的簡易秒錶設計,兩個靜態數碼管,定時器採用中斷方式
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int

uchar count=0;//對50ms定時時間進行計數
uchar miao=0; //秒計數器

//函數名:timer_1()
//函數功能:定時器T1的中斷函數,T1在工作方式1下每50秒產生中斷,執行該中斷函數
//形式參數:無
//返回值:無
void timer_1() interrupt 3 //T1的中斷類型號為3
{
TH1=(65536-50000)/256; //重新設置T1計數初值高8位
TL1=(65536-50000)%256; //重新設置T1計數初值低8位
count++; //50ms計數器加1
if(count==20) //1s時間到
{
count=0; //50ms計數器清0
miao++; //秒計數器加1
if(miao==100)miao=0; //miao計數到100,則從0開始計數
}
}

bit b=0;
void int_0() interrupt 0
{
if(b == 0){TR1 = 0;b = 1;}
else
{
b = 0;
TR1 = 1;
}
}

void int_1() interrupt 2
{
miao=0;
count = 0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
}

//函數名:disp
//函數功能:將i的值顯示在兩個靜態連接的數碼管上
//形式參數:i,取值范圍0~99
//返回值:無
void disp(uchar i)
{
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定義0~9顯示碼,共陽極數碼管
P1=led[i/10]; //顯示i高位
P2=led[i%10]; //顯示i地位
}
void main()
{
TMOD=0x10;//設置T1在工作方式1
TH1=(65536-50000)/256;//設置T1計數初值高8位,定時時間50ms
TL1=(65536-50000)%256;//設置T1計數初值低8位
ET1=1;//開放T1中斷允許
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1=1;
EA=1;//開放總中斷允許
TR1=1;//啟動T1開始計時
while(1)
{
disp(miao);//顯示秒計數器值
}
}

⑻ 用51單片機0-99位的秒錶,為什麼後三位也會顯示比較暗的數呢

「鍋派」視頻看多了吧?
估計LZ說的東西,是不開啟的位,也有微亮的效果。這是典型的殘影,從程序看得出來,LZ應該去了解過殘影,或者說,教這個程序的人,比以前增加了殘影改善。但那都是亂來的,因為他根本不明白殘影產生的原理。
除了殘影,難道LZ就沒發現,按住按鍵,整個顯示就沒了嗎??這才是這個程序最致命的地方。殘影,只能算個瑕疵,而這個卻叫「系統崩潰」。
還有,且不論你的命名規則亂來,就說這個 ge、shi、與 temp的使用,就可以知道LZ 對C語音的掌握遠遠沒有理解就開始亂用了。

⑼ 『求助』用51單片機定時器實現99秒錶倒計時

K1EQUP1.0
K2EQUP1.1
K3EQUP1.2
ORG0000H
LJMPMAIN
ORG000BH
LJMPT0ISR
ORG0030H
MAIN:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-10000)
MOVTL0,#LOW(65536-10000)
SETBET0
SETBTR0
SETBEA
MOVR0,#9
MOVR1,#9
MOVR2,#0
MOVR3,#99
CLR00H
CLR01H
LOOP:
JBK1,LP01
JNBK1,$
CLR01H
INCR3
CJNER3,#100,LOOP0
MOVR3,#0
SJMPLOOP0
LP01:
JBK2,LP02
JNBK2,$
CLR01H
CJNER3,#0,LP011
MOVR3,#99
SJMPLOOP0
LP011:
DECR3
SJMPLOOP0
LP02:
JBK3,LOOP
JNBK3,$
SETB01H
SJMPLOOP
LOOP0:
MOVA,R3
MOVB,#10
DIVAB
MOVR0,B
MOVR1,A
SJMPLOOP
T0ISR:
CLRTR0
MOVTH0,#HIGH(65536-10000)
MOVTL0,#LOW(65536-10000)
SETBTR0
MOVDPTR,#TABLE
T0C:
CPL00H
JB00H,T001
MOVP3,#0FDH
MOVA,R1
MOVCA,@A+DPTR
MOVP2,A
SJMPT002
T001:
MOVP3,#0FEH
MOVA,R0
MOVCA,@A+DPTR
MOVP2,A
T002:
JNB01H,T0E
INCR2
MOVA,R2
CJNEA,#100,T0E
MOVR2,#0
MOVA,R0
JZT003
DECR0
SJMPT0E
T003:
MOVA,R1
JZT004
DECR1
MOVR0,#9
T0E:
RETI
T004:
CLR01H
MOVR4,#16
T005:
CPLP0.0
LCALLDELAY
DJNZR4,T005
RETI
DELAY:
MOVR6,#200
DLY:
MOVR7,#250
DJNZR7,$
DJNZR6,DLY
RET
TABLE:;共陰極數碼管顯示代碼表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6FH;56789

END

⑽ 單片機秒錶

用定時器加數碼管做就可以了吧

閱讀全文

與單片機99秒錶相關的資料

熱點內容
手機app如何申報個人所得稅零申報 瀏覽:690
如何截獲手機app連接的ip 瀏覽:330
冰箱壓縮機是否需要電容 瀏覽:344
python列表每一行數據求和 瀏覽:274
自己有一台伺服器可以玩什麼 瀏覽:656
社會學波普諾pdf 瀏覽:584
解壓做食物的小視頻 瀏覽:758
pdf怎麼單獨設置文件夾 瀏覽:474
業務邏輯程序員 瀏覽:659
addto新建文件夾什麼意思 瀏覽:160
有伺服器地址怎麼安裝軟體 瀏覽:659
安卓如何完全清除數據 瀏覽:690
安卓安卓證書怎麼信任 瀏覽:53
伺服器被攻擊如何解決 瀏覽:221
學霸變成程序員 瀏覽:881
c語言編譯錯誤fatalerror 瀏覽:441
ipv4內部伺服器地址怎麼分配 瀏覽:463
java線程安全的方法 瀏覽:952
重復命令畫梯形 瀏覽:166
在疫情就是命令 瀏覽:330