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

單片機秒錶實驗

發布時間:2024-11-28 09:59:04

單片機秒錶設計

用AT89C51設計一個2位的LED數碼顯示作為「秒錶」,這應該是一個模擬題,可用兩位一體的共陰數碼管,用定時器T0定時,得到1秒計時。

Ⅱ 求單片機大神 寫10s的秒錶程序,用三個按鍵分別控制秒錶啟動、停止、清零(要求:使用定時器0定時,

/*-----------------------------------------------
數碼管顯示,按鍵控制秒錶
中斷按鍵控制,數碼管顯示,中斷0控制計時和停止,中斷1清零
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

unsigned int second;//定義全局變數
bit GoFlag;//定義停止,計時標志

#define DataPort P0 //定義數據埠 程序中遇到DataPort 則用P0 替換
sbit LATCH1=P2^2;//定義鎖存使能埠 段鎖存
sbit LATCH2=P2^3;// 位鎖存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示段碼值0~9
unsigned char codedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
unsigned char TempData[8]; //存儲顯示值的全局變數

void DelayUs2x(unsigned char t);//函數聲明
void DelayMs(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
void Init_Timer0(void);
void CLR(void);
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char num=0;

EX0=1; //外部中斷0開
IT0=1; //IT1=0表示邊沿觸發
EX1=1; //外部中斷1開
IT1=1; //IT1=1表示邊沿觸發
Init_Timer0();
while (1) //主循環
{

TempData[0]=dofly_DuanMa[second/10];//分解顯示信息,如要顯示68,則68/10=6 68%10=8
TempData[1]=dofly_DuanMa[second%10];
//主循環中添加其他需要一直工作的程序

}
}

/*------------------------------------------------
顯示函數,用於動態掃描數碼管
輸入參數 FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數碼管開始顯示
如輸入0表示從第一個顯示。
Num表示需要顯示的位數,如需要顯示99兩位數值則該值輸入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;

DataPort=0; //清空數據,防止有交替重影
LATCH1=1; //段鎖存
LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位碼
LATCH2=1; //位鎖存
LATCH2=0;

DataPort=TempData[i]; //取顯示數據,段碼
LATCH1=1; //段鎖存
LATCH1=0;

i++;
if(i==Num)
i=0;

}
/*------------------------------------------------
定時器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
//TH0=0x00; //給定初值
//TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
static unsigned char num;
TH0=(65536-20000)/256; //重新賦值 20ms
TL0=(65536-20000)%256;

Display(0,8);
if(GoFlag)
{
num++;
if(num==5)
second++;//秒加1
if(second==10)
second=0;
}
}
/*------------------------------------------------
外部中斷0程序
------------------------------------------------*/
void ISR_INT0(void) interrupt 0
{
GoFlag=!GoFlag; //利用外部中斷打開和關閉定時標志 用於開始和停止計時
}
/*------------------------------------------------
外部中斷1程序
------------------------------------------------*/
void ISR_INT1(void) interrupt 2
{
if(GoFlag==0)//停止時才可以清零
CLR();
}/*------------------------------------------------
數值清零
------------------------------------------------*/
void CLR(void)
{
second=0; //利用外部中斷清零
msecond=0;
}

Ⅲ 單片機編程製作電子秒錶能顯示分(0-99),秒(0-59)

你好
樓主。
很幸運的看到你的問題。
但是又很遺憾到現在還沒有人回答你的問題。也可能你現在已經在別的地方找到了答案,那就得恭喜你啦。
對於你的問題我愛莫能助!
可能是你問的問題有些專業了。或者別人沒有遇到或者接觸過你的問題,所以幫不了你。建議你去問題的相關論壇去求助,那裡的人通常比較多,也比較熱心,可能能快點幫你解決問題。
希望我的回答也能夠幫到你!
祝你好運。
快過年了,
最後祝您全家幸福健康快樂每一天!

Ⅳ 利用51單片機設計一個秒錶 (一定要按要求做到0.01秒)

最低位,是0.01s 變化一次,一秒鍾,變化 100 次。

這么快,人的眼睛,分辨不出來。

只能看到一個 8。


停止時,才能看到穩定的數字。

程序如下:

#include<reg52.h>

sbit P3_5 =P3^5;

unsigned char counet, m[4] = {0,0,0,0};

void display()

{

unsigned char code Tab[] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char code Bit[] = {8, 4, 2, 1};

unsigned char i, j;

for (i = 0; i < 4; i++) {

P0 = Tab[m[i]]; if (i == 2) P0 &= 127;

P2 = Bit[i]; for(; j > 0; j++); P2 = 0;

}

}

void wait_key()

{

while( P3_5) display();

while(!P3_5) display();

}

main()

{

TMOD = 0x02;

IE = 0x82;

while(1) {

wait_key(); TR0 = 1; TH0 = TL0 = 6;

wait_key(); TR0 = 0;

wait_key(); m[0] = m[1] = m[2] = m[3] = 0;

}

}

void time0() interrupt 1

{

counet++;

counet %= 40;

if(!counet) {

m[0]++; m[0] %= 10;

if(!m[0]) {

m[1]++; m[1] %= 10;

if(!m[1]) {

m[2]++; m[2] %= 10;

if(!m[2]) {

m[3]++; m[3] %= 10;

}}}}

}

Ⅳ 51單片機中用數碼管做秒錶時怎麼用一個獨立按鍵控制開始和暫停,即第一次按下計時,在按下時暫停

其實,控制秒錶的啟動和停止,很簡單。要做秒錶,一定要用定時器吧,假如用T0,那開始初始化時,不寫TR0=1,先不啟動。x0dx0a當按一下鍵,再啟動,TR0=1,就開始計時了。x0dx0a再 按一下鍵,就停止,TR0=0,就不計時了。x0dx0a程序好寫,先 定義一個按鍵x0dx0asbit key=P1^1; //具體是哪個 鍵,你自己改x0dx0a主程序中,判斷按鍵和啟動/停止x0dx0aif(key==0)x0dx0a{x0dx0adelay(); //具體延時時間自己定x0dx0aif(key==0)x0dx0a{x0dx0aTR0=!TR0; //每按一次,取反 一次x0dx0awhile(key==0);x0dx0a}x0dx0a}

Ⅵ 51單片機實現秒錶,要求16進制進位

51單片機實現秒錶, 0~9、A、b、C、d、E、F,16進制秒錶。

#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;

sbit D2=P3^1;

sbit D3=P3^2;

sbit D4=P3^3;

sbit key=P3^5;

sbit key1=P3^7;

bit j ;

uint 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)

{

j=0;

}

if(key1==0)

{

j=1; a2=0;

}

}

}

void timer0()interrupt 1

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

a1++;

y++;

if(a1==10) // 100

{

a1=0;

if(j==1) a2++;

if(a2>=65536) a2=0; // 65536 改 10000 是十進制 (下同)

}

D1 = 1; D2 = 1; D3 = 1; D4 = 1;

if(y==1)

{

P1=table[a2%65536/4096]; // 65536/4096 改10000/1000

D4=0;

}

if(y==2)

{

P1=table[a2%4096/256]; // 4096/256 改1000/100

D3=0;

}

if(y==3)

{

P1=table[a2%256/16]; // 256/16 改100/16

D2=0;

}

if(y==4)

{

P1=table[a2%16]; // 16 改 10

D1=0;

y=0;

}

}

Ⅶ 51單片機 秒錶設計

// 51單片機 秒錶,顯示時間為0000—9999秒,啟動、停止,(停止後再次啟動復位)

#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;

sbit D2=P3^1;

sbit D3=P3^2;

sbit D4=P3^3;

sbit key=P3^5;

sbit key1=P3^7;

bit j ;

uint 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)

{

j=0;

}

if(key1==0)

{

j=1; a2=0;

}

}

}

void timer0()interrupt 1

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

a1++;

y++;

if(a1==100)

{

a1=0;

if(j==1) a2++;

if(a2>=10000) a2=0;

}

D1 = 1; D2 = 1; D3 = 1; D4 = 1;

if(y==1)

{

P1=table[a2%10000/1000];

D4=0;

}

if(y==2)

{

P1=table[a2%1000/100];

D3=0;

}

if(y==3)

{

P1=table[a2%100/10];

D2=0;

}

if(y==4)

{

P1=table[a2%10];

D1=0;

y=0;

}

}

閱讀全文

與單片機秒錶實驗相關的資料

熱點內容
sha1withrsa演算法 瀏覽:453
域名交易系統源碼php 瀏覽:171
求解微分方程數值解的命令有哪些 瀏覽:626
程序員轉時尚傳媒 瀏覽:82
古拳譜pdf 瀏覽:42
一元二次方程無實數根的演算法 瀏覽:352
程序員測試輕松嗎 瀏覽:170
英雄聯盟神魔怎麼綁定伺服器 瀏覽:982
音樂app怎麼換音質 瀏覽:974
python進階客戶流失 瀏覽:280
華為榮耀10伺服器地址 瀏覽:998
javastring相等判斷 瀏覽:411
程序員考研究生學校 瀏覽:935
java卡頓 瀏覽:500
編程軟體怎麼運行zip文件 瀏覽:505
單片機怎麼做組態 瀏覽:899
android參考文獻外文 瀏覽:684
銅電極電流效率的演算法 瀏覽:143
簡訊內存已滿怎麼處理安卓 瀏覽:314
ogg命令 瀏覽:786