當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]一、設(shè)計(jì)目的:  通過單片機(jī)應(yīng)用產(chǎn)品的設(shè)計(jì)與調(diào)試過程,鞏固課程所學(xué)理論知識(shí),初步了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與調(diào)試的方法。二、設(shè)計(jì)要求: 設(shè)計(jì)一個(gè)以AT89S51單片機(jī)為核心的數(shù)字電子鐘控制器,實(shí)現(xiàn)電子鐘的時(shí)間、

一、設(shè)計(jì)目的:

  通過單片機(jī)應(yīng)用產(chǎn)品的設(shè)計(jì)與調(diào)試過程,鞏固課程所學(xué)理論知識(shí),初步了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與調(diào)試的方法。

二、設(shè)計(jì)要求:

設(shè)計(jì)一個(gè)以AT89S51單片機(jī)為核心的數(shù)字電子鐘控制器,實(shí)現(xiàn)電子鐘的時(shí)間、日期交替顯示、鬧鐘功能,并可通過按鈕開關(guān)或鍵盤切換顯示內(nèi)容、調(diào)整參數(shù)、設(shè)置鬧鐘,在單片機(jī)實(shí)驗(yàn)板上模擬調(diào)試實(shí)現(xiàn)控制器的功能。具體設(shè)計(jì)要求如下:

1.開機(jī)自檢,檢查相關(guān)接口及數(shù)碼管顯示器、指示燈、蜂鳴器等外設(shè)是否正常。

2.8位數(shù)碼管顯示器平常以一定的時(shí)間間隔、合適的格式顯示時(shí)間和日期信息,時(shí)間顯示時(shí)、分、秒;日期顯示年(2000~2099)、月、日;設(shè)置鬧鐘功能時(shí)顯示時(shí)、分、開/關(guān)狀態(tài)。

3.可通過按鍵設(shè)定時(shí)間、日期、鬧鐘等參數(shù)、手動(dòng)切換顯示。按鍵可用獨(dú)立式按鍵或行列式鍵盤實(shí)現(xiàn)。設(shè)定參數(shù)過程有合適的方式指示當(dāng)前可修改的內(nèi)容。

4.對(duì)開關(guān)量輸入進(jìn)行軟件消抖動(dòng)處理,參數(shù)的設(shè)定有容錯(cuò)處理,如:小時(shí)不能超過23,日期中每月最大天數(shù)、閏年等。

5.用Protel設(shè)計(jì)可實(shí)現(xiàn)上述功能的控制器的原理圖(最小應(yīng)用系統(tǒng))。

擴(kuò)展功能(選做):

1.可設(shè)置多次鬧鐘。

2.顯示星期功能。

3.參數(shù)設(shè)定過程中,較長時(shí)間無操作,則自動(dòng)恢復(fù)為正常顯示方式。。

4.其它自選的擴(kuò)展功能。

三、總體方案設(shè)計(jì)及說明

總體功能框圖:

硬件:

8個(gè)LED采用動(dòng)態(tài)掃描以節(jié)約驅(qū)動(dòng)成本;

走時(shí)采用內(nèi)部T0計(jì)時(shí)中斷;

4x4矩陣鍵盤掃描采用線反轉(zhuǎn)法,以中斷掃描計(jì)數(shù)防止抖動(dòng);

……

軟件:

采用C語言實(shí)現(xiàn)。

四、系統(tǒng)資源分配說明(接口、存儲(chǔ)器分配)

1.接口:

89S51的P1口接8個(gè)LED小燈;

89S51的P3_2接蜂鳴器(低電平鳴響);

外擴(kuò)一片8255:

89S51單片機(jī)的P0口是低8位地址與數(shù)據(jù)復(fù)用的,現(xiàn)在我們用74HC373分離出地址,89S51高位地址的P2_0(A8)接8255的片選端(/CS), 低位地址Q1Q0(A1A0)與8255的A1A0連接,數(shù)據(jù)位P0_7~P0_0分別接8255的D_7~D_0。 以此得到的8255端口的地址分別為:

PA:xxxxxxx0 xxxxxx00取0x0fefc; PB:xxxxxxx0 xxxxxx01取0x0fefd;

PC:xxxxxxx0 xxxxxx10取0x0fefd; CTL:xxxxxxx0 xxxxxx11取0x0feff;

8255的PA口控制LED數(shù)碼管的8個(gè)顯示段;PB口分別接8個(gè)LED數(shù)碼管的共陽極;

PC口分別接4x4矩陣鍵盤的行線和列線。

2.存儲(chǔ)分配:

struct{ //鬧鐘時(shí)、分、秒 ,共設(shè)6個(gè)鬧鐘(初始狀態(tài)默認(rèn):00-00-F1)

uchar hour;

uchar minute;

uchar isON;

}alarm[6]={{0,0,0}};

uchar hour=12,minute=0,second=0;//時(shí)、分、秒

uchar temp_second; //用于立即切換顯示時(shí)間/日期

uint year=2011;// 年

uchar month=12;// 月

uchar day=1; // 日

uchar week=6;// 星期

uchar Mdays[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//各月天數(shù)

uchar alarm_isON=1; //鬧鐘總開關(guān)

uchar alarm_station=0; //鬧鐘狀態(tài)

uchar ano; //鬧鐘號(hào)(當(dāng)前時(shí)間到的鬧鐘號(hào))

uchar start_minute;//開始響鈴的時(shí)間(也就是所定鬧鐘的時(shí)間)

uint count_ms25=0; //軟件計(jì)數(shù)器(計(jì)數(shù)40個(gè)25毫秒達(dá)1s)

uchar show_model=0; // 顯示模式:[0]切換顯示時(shí)間/日期 [1]切換顯示日期/時(shí)間

const uchar fixtime=0x00;//時(shí)間修正量

uchar key=0xff;//獲得的當(dāng)前鍵值

uchar last_key=0xff; //最后一次掃描到的按鍵(非0xff)

uchar key_count=0;//掃描到同一按鍵的次數(shù)

uchar Edown=0; //鬧鐘開關(guān)鍵是否按下

uchar led_buf[8]={24,24,24,24,24,24,24,24}; //時(shí)間日期顯示緩沖區(qū)

uchar code led_table1[]={0x0c0,0x0f9,0x0a4,0x0b0, 0x99,0x92,0x82,0x0f8,0x80,0x90,

0x88,0x83,0x0C6,0x0a1,0x86,0x8e,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,

0x08,0x03,0x46,0x21,0x06,0x0e,0x7f,0x0bf,0xff};//數(shù)碼管段碼

uchar code KBTable[] = {'1','2','3','F','4','5','6','E','7','8','9','C','0','A','B','D'};//鍵值(可有可無)

五、軟件流程圖及說明

1.流程圖:

2.主要程序段說明:

(1)顯示:

動(dòng)態(tài)顯示:即各位數(shù)碼管輪流點(diǎn)亮,對(duì)于顯示器各位數(shù)碼管,每隔一段延時(shí)時(shí)間循環(huán)點(diǎn)亮一次。利用人的視覺暫留功能可以看到整個(gè)顯示,但須保證掃描速度足夠快,人的視覺暫留功能才可察覺不到字符閃爍。顯示器的亮度與導(dǎo)通電流、點(diǎn)亮?xí)r間及間隔時(shí)間的比例有關(guān)。調(diào)整參數(shù)可以實(shí)現(xiàn)較高穩(wěn)定度的顯示。動(dòng)態(tài)顯示節(jié)省了驅(qū)動(dòng)和I/O口,降低了能耗。

void LED_show(uchar buf[])

{

uchar i,num,pLED=0x80;

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

{

num=buf[i];

PA=led_table1[num]; /*送字段碼*/

PB=pLED; /*送字位碼*/

pLED>>=1; /*右移一位*/

Delay(1); /*延時(shí)*/

}

}

(2)鍵盤(本次設(shè)計(jì)對(duì)下面兩種掃描方式都進(jìn)行了實(shí)現(xiàn)):

a.行掃描法:依次從第一至最末行線上發(fā)出低電平信號(hào), 如果該行線所連接的鍵沒有按下的話, 則列線所接的端口得到的是全“1”信號(hào), 如果有鍵按下的話, 則得到非全“1”信號(hào)。

/*鍵盤掃描(行掃描法,延時(shí)消抖)********************************************************

uchar code KBTable[] = {

0xEE,'1',0xDE,'4',0xBE,'7',0x7E,'0',

0xED,'2',0xDD,'5',0xBD,'8',0x7D,'A',

0xEB,'3',0xDB,'6',0xBB,'9',0x7B,'B',

0xE7,'F',0xD7,'E',0xB7,'C',0x77,'D',

0x00,0xff};

uchar Get_key(void); // 獲取最終鍵值

{ uchar i;

uchar line, row, k_value;

static uchar lastkey=0xff;

CTL=0x88; //CH輸入,CL輸出 10001000

PC=PC & 0xf0; // PC0~PC3輸出0 , 輸入PC4~ PC7(默認(rèn)1無鍵按下)

if ((PC & 0xf0) == 0xf0)

{

lastkey=0xff;

return 0xff; //無鍵按下

}

row = PC;

Delay(4); //延時(shí),消除抖動(dòng)

if (row != PC)

{

lastkey=0xff;

return 0xff; //判為抖動(dòng)

}

line=0xFE;

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

{ PC = line; //輸出掃描信號(hào)

row=PC; //讀鍵盤口

if ((row & 0xf0) != 0xf0)

break;

line=(line<<1)+1;

}

if (i==4)

{ lastkey=0xff; return 0xff; }

k_value = (row & 0xf0) " (line & 0x0f) ;

for (i=0; i<32; i+=2)

if (k_value == KBTable[i])

break;

if(lastkey==KBTable[i+1])

return 0xff;

lastkey=KBTable[i+1];

return KBTable[i+1];

}

b.線反轉(zhuǎn)法:線反轉(zhuǎn)法也是識(shí)別閉合鍵的一種常用方法, 該法比行掃描速度快, 但在硬件上要求行線與列線外接上拉電阻。先將行線作為輸出線, 列線作為輸入線, 行線輸出全“0”信號(hào), 讀入列線的值, 那么在閉合鍵所在的列線上的值必為0;然后從列線輸出全“0”信號(hào),再讀取行線的輸入值,閉合鍵所在的行線值必為 0。這樣,當(dāng)一個(gè)鍵被按下時(shí), 必定可讀到一對(duì)唯一的行列值。再由這一對(duì)行列值可以求出閉合鍵所在的位置。

//一次鍵盤掃描(線反轉(zhuǎn)法,中斷掃描計(jì)數(shù)去抖)*********************************************************

uchar code KBTable[] = {'1','2','3','F','4','5','6','E','7','8','9','C','0','A','B','D'};

//key_index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

uchar key_scan(void) //返回 '0','1','2'...'E','F',0xff

{ uchar key_index,temp=0;

CTL=0x88; //CH輸入,CL輸出 10001000

PC=PC & 0xf0; //將低四位置0

if(PC!=0xF0) //判斷按鍵是否按下 如果按鈕按下 會(huì)拉低CH其中的一個(gè)端口

{

temp=PC; //讀PC口

temp=temp&0xf0; //屏蔽低四位

temp=~

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉