日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c51单片机秒表程序c语言,单片机简易秒表C51程序

發布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c51单片机秒表程序c语言,单片机简易秒表C51程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本程序所用的原理圖下載: 點這里 ,單片機芯片使用的stc89c52;找到數碼管的原理圖即可.這是一整個單片機開發板的電路圖其他的忽略.

以下是程序源代碼:

/**

*項目:簡易秒表

*設計任務書

*一、任務簡介:

*秒表是體育比賽常用計時工具。本設計要求利用現有的

*有限資源,設計具有儲存多個比賽成績功能的簡易秒表,

*并能利用鍵盤查詢歷史成績。

*二、設計要求:

*⑴ 系統硬件設計:

*利用 ISP-III.1型用戶板完成設計要 求;

*⑵ 系統軟件設計:

*完成控制軟件的編寫與調試;

*⑶ 基本功能:

*① 開機數碼管顯示0000;

*按下1#鍵開始計時;再次按下1#鍵停止計時;

*② 在停止狀 態下,

*按下3#鍵清除所有計時信息,數碼管顯示0000;

*按下4#鍵啟動定時器,返回從原處計時;

*(4) 附加功能:

*① 在計時狀態下,連續按下3#鍵可以連續記錄最多10個 運動員成績,

*按下1#鍵停止計時或者計滿10次后自動停止時;

*② 在停止狀態下,

*連續按下2#鍵可以查看剛才記錄的10個成績,數碼管第 一位(0~9)顯示運動員名

*次,數碼管后3位顯示運動員成績;

*(5) 提高功能:

*① 按鍵時要求蜂鳴器有短暫發音;

**/

/**

*功能:簡易秒表

*作者:徐冉

*日期:2013-06-04-19:30-21:50

*備注:本程序已經順利通過調試,并完美實現,耗時2小時20分鐘;

**/

/****************AT89C52-RC MCU**************************/

/**********************51hei開發板**********************/

#include

#include

typedef unsigned int uint;

typedef unsigned char uchar;

sbit wela = P2^7;

sbit dula = P2^6;

sbit FM = P2^3;

sbit s1 = P3^4;

sbit s2 = P3^5 ;

sbit s3 = P3^6;

sbit s4 = P3^7;

uchar code table[] = {

0x3F,? //"0"

0x06,? //"1"

0x5B,? //"2"

0x4F,? //"3"

0x66,? //"4"

0x6D,? //"5"

0x7D,? //"6"

0x07,? //"7"

0x7F,? //"8"

0x6F? //"9"

};

//臨時表,用于存放運動員的成績

uint dis[10] = {0x00, 0x00, 0x00, 0x00,0x00,

0x00, 0x00, 0x00, 0x00, 0x00};

uchar mge, m, num, counter;

uint sec;

//delay:xms

void delay(uint xms)

{

uchar i, j;

for(i = 0; i < xms; i++)

for(j = 0; j < 125; j++);

}

//display:score

void display(uchar mge, uint num)

{

uchar bai, shi, ge;

bai = num / 100 % 10;

shi = num / 10 % 10;

ge = num % 10;

dula = 1;

P0 = table[mge];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xfe;

wela = 0;

P0 = 0x00;

delay(1);

dula = 1;

P0 = table[bai];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xf7;

wela = 0;

P0 = 0x00;

delay(1);

dula = 1;

P0 = table[shi];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xef;

wela = 0;

P0 = 0x00;

delay(1);

dula = 1;

P0 = table[ge];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xdf;

wela = 0;

P0 = 0x00;

delay(1);

}

//timer0:init

void init()

{

TMOD = 0x01;

TH0 = 0xB8;

TL0 = 0x00;

TR0 = 1;

EA = 1;

ET0 = 1;

}

//keyscan:

void keyscan()

{

if(s1 == 0)

{

delay(5);

if(s1 == 0)

{

FM = 0;

TR0 = ~TR0;

while(!s1);

delay(2);

while(!s1);

FM = 1;

}

}

if(s2 == 0)

{

delay(5);

if(s2 == 0)

{

FM = 0;

if(TR0 == 0)

{

sec = dis[mge];

mge++;

if(mge >= 10)

{

sec = 0;

mge = 0;

m = 0;

}

}

while(!s2);

delay(2);

while(!s2);

FM = 1;

}

}

if(s3 == 0)

{

delay(5);

if(s3 == 0)

{

FM = 0;

if(TR0 == 0)

{

sec = 0;

mge = 0;

m = 0;

}

else

{

dis[m] = sec;

m++;

if(m >= 10)

{

TR0 = 0;

m = 0;

}

}

while(!s3);

delay(2);

while(!s3);

FM = 1;

}

}

if(s4 == 0)

{

delay(5);

if(s4 == 0)

{

FM = 0;

sec = dis[9];

TR0 = 1;

while(!s4);

delay(2);

while(!s4);

FM = 1;

}

}

}

//main:

void main(void)

{

init();

while(1)

{

display(mge, sec);

keyscan();

}

}

//timer0:int

void timer_int() interrupt 1

{

TH0 = 0xB8;

TL0 = 0x00;

counter++;

if(counter == 50)

{

counter = 0;

sec++;

if(sec >= 999)

{

sec = 0;

}

}

}

總結

以上是生活随笔為你收集整理的c51单片机秒表程序c语言,单片机简易秒表C51程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。