㈠ 利用單片機設計實現一個60秒倒計時顯示裝置,並且計時到後發出報警聲音。
#include<reg52.h>
sbitbz=P3^1;
unsignedchara[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
unsignedcharn,time=60;
main()
{
P1=a[0];
P2=a[6];
TMOD=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
timer0()interrupt1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(time!=0)
{
n++;
if(n==100)
{
n=0;
time--;
P1=a[time%10];
P2=a[time/10];
}
}
elsebz=~bz;
}
㈡ 小白求救,51單片機利用兩個數碼管實現60秒倒計時
個位數能夠顯示正常,那麼就說明十位數的處理代碼出了問題;
給出代碼看看吧
㈢ 請幫忙寫一個程序:單片機控制液晶顯示器60秒倒計時(C語言)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
uchar code temp[]="00";
uint aa,ee,date1;
void delay(uint aa)
{
uint bb,cc;
for(bb=0;bb<aa;bb++)
for(cc=0;cc<100;cc++);
}
void write_ling(uint com)
{
RS=0;
P0=com;
delay(5);
EN=1;
delay(10);
EN=0;
}
void write_shuju(uint shuju)
{
RS=1;
P0=shuju;
delay(5);
EN=1;
delay(10);
EN=0;
}
void inite() //中斷、1602初始化
{
TMOD=0x01;
TH0=(65536-46080)/256;
TH0=(65536-46080)%256;
EA=1;
ET0=1;
TR0=1;
RW=0;
EN=0;
date1=60;
write_ling(0x38);
write_ling(0x0c);
write_ling(0x06);
write_ling(0x80);
write_ling(0x01);
write_ling(0x80+7);
for(aa=0;aa<2;aa++)
{
write_shuju(temp[aa]);
delay(5);
}
}
void display(uint date)
{
uint ge,shi;
ge=date%10;
shi=date/10;
write_shuju(0x30+shi);//0x30--0x39對應的是1602顯示0--9的ASCLL碼值
write_shuju(0x30+ge);
}
void timer0() interrupt 1
{
TH0=(65536-46080)/256;//11.0592MHZ晶振50Ms
TH0=(65536-46080)%256;
ee++;
if(ee==14)//加上前面延時子函數的延時, 在我的板子上ee=14的時候大概就是一秒鍾
{
ee=0;
date1--;
if(date1==0)
{
date1=60;
}
write_ling(0x80+7);
display(date1);
}
}
void main()
{
inite();
while(1);
}
小弟不才,希望這個程序對你有幫助!
㈣ 求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();
}
}
㈤ 單片機六十秒倒計時程序
;數碼管段選接P2口,位選接P3.0和P3.1,
;採用定時器T0定時10ms,60H為1s計數單元,計數100次為1sORG 0000H ;程序從0地址開始
LJMP MAIN ;跳到MAIN處執行
ORG 000BH ;定時器T0
LJMP TIME0
ORG 0030H
MAIN:MOV TMOD,#01H ;設置T0工作在模式1
MOV TH0,#0D8H ;賦初值,定時10ms
MOV TL0,#0F0H
MOV IE,#82H ;開CPU中斷,開定時器0中斷
MOV R3,#60
SETB TR0 ;啟動T0定時器工作
MOV 60H,#100 ;給60H單元賦初值
CLR 4FH ;清零4FH單元
DISPLAY: ;顯示子程序
MOV DPTR,#TAB ;DPTR指向編碼表位置
MOV A,R3 ;將R3的內容復制到A
MOV B,#10
DIV AB ;A除B,商給A,余數給B
MOVC A,@A+DPTR ;根據A的值取出編碼表中的編碼
MOV P2,A ;由P1口輸出A的內容
CLR P3.0 ;清零P2.0
SETB P3.0 ;置位P2.0 MOV A,B
MOVC A,@A+DPTR ;根據A的值取出編碼表中的編碼
MOV P2,A ;由P1口輸出A的內容
CLR P3.1 ;清零P2.1
SETB P3.1 ;置位P2.1
JNB 4FH,DISPLAY ;判斷1秒時間是否到,沒有到,則跳轉到DIAPLAY處
CLR 4FH ;1秒到,清4FH
LJMP DISPLAY ;調用顯示子程序 TIME0:MOV TH0,#0D8H ;賦初值
MOV TL0,#0F0H
DJNZ 60H,TT ;60H單元自減1,判斷是否為0,不為0則跳轉到TT處
MOV 60H,#100 ;60H單元為0,則重新給其賦值100
SETB 4FH ;同時置位4FH單元
DEC R3 ;R3自加1
CJNE R3,#00H,TT ;判斷R3是否為0,否則跳轉TT處
CLR TR0
TT:RETI
TAB: ;編碼表
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共陰
END ;程序結束
㈥ 求教,利用51單片機編寫兩個數碼管60秒倒計時,個位是從5開始計時之後才是9開始倒計時,十位顯示不
如樓上所說,你沒有初始化num這個參數,那麼默認值就是0,也相當於256,所以一開始進入中斷就是256-1,也就是255,個位是5,十位數是25,所以顯示就成了你現在的模樣。因此初始化以下就好了。
㈦ 51單片機如何使外部中斷顯示60秒倒計時求程序,謝謝。
ORG00H;
SJMPSTAR;
ORG1BH;
SJMPTIS;轉T1中斷服務程序
ORG30H;
STAR:MOVR2,#60H;倒計時初值
MOVR4,#20H;定時中斷溢出計數器
MOVIE,#88H;開中斷
MOVTMOD,#10H;
MOVTH1,#3CH;定時初值
MOVTL1,#0B0H;定時初值
SETBTR1;啟動
ACALLDIS;調用顯示子程序
SJMP$;
TIS:MOVTH1,#3CH;
MOVTL1,#0B0H;
DJNZR4,T1S1;定時1S到否
MOVR4,#20;到1S,重置R4=20
DJNZR2,T1S0;倒計時遞減
CLRTR1;倒計時結束,關定時器
T1S0:ACALLDIS;調顯示
T1S1:RETI;中斷返回
SEG7:INCA;A的值加一
MOVCA,@A+PC;取顯示斷段
RET;;
DB0C0H,0F9H,0A4H,0B0H;;0至3的共陽型顯示碼
DB99H,92H,82H,0F8H;;4至7的共陽型顯示碼
DB80H,90H,88H,83H;8至B的共陽型顯示碼
DB0C6H,0A1H,86H,8EH;;C至F的共陽型顯示碼
DIS:MOVA,R2;;單位元組十六進制數轉為十進制數
MOVB,#10;
DIVAB;
ACALLSEG7;
MOVP1,A;;顯示十位
MOVA,B;;
ACALLSEG7;;
MOVP2,A;;顯示個位
RET;;子程序返回
END;
㈧ 單片機實現60秒倒計時 求教
寫程序最好不要出現超過1ms的死延時,特別是在普通8位單片機的編程,需要時間的地方盡量用定時器來做,單片機運行效率高