導航:首頁 > 操作系統 > 單片機原理課程設計word文檔

單片機原理課程設計word文檔

發布時間:2023-11-13 21:20:27

⑴ 跪求單片機課程設計 要完全呦

題 目:單片機課程設計報告
目 錄
一、設計目的
二、程設計具體要求
三、單片機發展簡史
四、8051單片機系統簡介
五、8051單片機內部定時器/計數器簡介
六、程序電路
七、程序流程
八、程序代碼
九實驗總結-要求寫出完整的論文以及心得體會
十參考資料及小結
原 文 : 一.目的
1. 進一步熟悉和掌握8051單片機的結構及工作原理。
2. 掌握單片機的介面技術及相關外圍晶元的外特性,控制方法。
3. 通過課程設計,掌握以單片機核心的電路設計的基本方法和技術,了解表關電路參數的計算方法。
4. 通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。
5. 通過完成一個包括電路設計和程序開發的完整過程,使學生了解開發一單片機應用系統的全過程,為今後從事相應打下基礎。
二.課程設計的體要求
a) 原理圖設計。
1. 原理圖設計要符合項目的工作原理,連線要正確,端了要不得有標號。
2. 圖中所使用的元器件要合理選用,電阻,電容等器件的參數要正確標明。
3. 原理圖要完整,CPU,外圍器件,擴器介面,輸入/輸出裝置要一應俱全。
b) 程序調計
1. 根據要求,將總體項能分解成若干個子功能模塊,每個功能模塊完成一個特定的功能。
2. 根據總體要求及分解的功能模塊,確定各功能模塊之間的關系,設直出完整的程序流程圖。
c) 程序調試將設計完的程序輸入,匯編,排除語法錯誤,生成*OBJ文件。
1. 按所設計的原理圖,在實驗平台上連線,檢查無誤。
2. 將匯編後生成的*OBJ文件傳送到實驗裝置的,執行該程序,檢查該程序、是否達到設計要求,若未達到,修改程序,直到達到要求為止,
d) 說明書
1. 原理圖設計說明
簡要說明設計目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過程及順序。
2. 程序設計說明
對程序設計總體功能及結構進行說明,對各子模塊的功能以及各子模塊之間的關系作較詳細的描述。
3. 畫出工作原理圖,程序流程圖並給出程序清單。
目前,單片機已廣泛應用到圖民經濟建設和日常生活的許多領域,成為測控技術現代化必不可少的重要工具。下面介紹一本單片機課程設計的好書,介紹了很多實例有興趣者可以去買哦,價格不貴【圖書目錄】 - 8051單片機課程設計實訓教材
第1章 緒論
1.1 課程設計所需硬體工具
1.2 專題製作所需軟體使用工具
1.3 8051程序開發測試平台
1.4 使用免費匯編編譯
1.5 89CXX燒錄模擬器操作實例
1.6 自製8051微電腦單板IO51
1.7 IO51操作實例
1.8 以Windows98 工作模式結合DOS模式來執行
第2章 8051單片機課程設計中的基本軟硬體設計
2.1 8051各種基本的硬體設計
2.2 工作指示燈LED
2.3 8051延遲時間計算
2.4 基本按鍵設計
2.5 建立8051通信介面
2.6 簡易8051調試界面
2.7 壓電喇叭測試
2.8 鍵盤掃描
2.9 掃描控制七段顯示器
2.10 LCD介面控制
2.11 8051定時器模式的工作
2.12 定時器模式0測試
2.13 定時器模式1測試
2.14 定時器模式2測試
2.15 以定時器產生各種頻率的聲音
2.16 以定時器演奏—段旋律
第3章 帶單片機的LCD時鍾
第4章 定時鬧鈴
第5章 定時鬧鈴LCD
第6章 音樂倒數定時器
第7章 密碼鎖控制
第8章 可存儲式電子琴
第9章 8051八音盒
第10章 紅外線遙控器研究
10.1 紅外線遙控器動作原理
10.2 如何觀察紅外線遙控器信號
10.3 紅外線遙控器解碼功能說明
第11章 紅外線家電遙控
第12章 8051伺服機控制
12.1 伺服機工作原理及改裝
第1.3章 8051伺服車控制
13.1 功能說明
13.2 伺服車組裝及實驗
第14章 紅外線遙控伺服車
14.1 功能說明
14.2 遙控伺服車組裝及實驗
14.3 控制電路
14.4 控製程序
第15章 無線電家電遙控
15.1 功能說明
15.2 遙控編碼解碼控制
第16章 8051聲控設計
16.1 聲控基本知識介紹
16.2 系統組成
16.3 聲控模塊介紹
16.4 基本控制電路
16.5 基本控製程序
16.6 聲控課題設計

附錄H 如何使用KEIL 8051開發系統匯編和編譯程序及調試
附錄I EPM89 890XX燒錄模擬器特性
附錄J 1051 8051 10控制板特性
附錄K VCMM聲控模塊特性
附錄L IO51控制板完整電路圖
附錄M 需要從網站下載的相關資料的使用說明
附錄N 硬體介面板版權聲明及如何訂購
附錄A 簡易穩壓電源製作
附錄B 本書實驗所需軟硬體工具及零件
附錄C 8051內部控制寄存器介紹
附錄D 8051指令集
附錄E 如何自製8051單板
附錄F 課程設計報告參考內容
附錄G IO51控制板窗口版驅動程序使用說明

⑵ 單片機課程設計,急求!!!

#defineLCD1602_FLAG
#defineLCD1602_PORTP0
#include<reg51.h>
#include<stddef.h>
#defineucharunsignedchar

sbitlcd1602_rs=P2^0;
sbitlcd1602_e=P2^2;
sbitlcd1602_rw=P2^1;
sbitlcd1602_busy=P0^7;

ucharstr[]="ThisisKeyTest";
ucharkeyval,keystr[16];

voiddelay(uchara)
{
uchari;
while(a--)for(i=0;i<120;i++);
}

/*
************************************
*函數名稱:lcd1602_CheckBusy()
*函數功能:狀態查詢
************************************
*/

voidlcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}

/*
***************************************
*函數名稱:lcd1602_WriteCmd()
*函數功能:寫命令
*入口參數:命令字
*出口參數:無
***************************************
*/

voidlcd1602_WriteCmd(constucharcmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}

/*
*******************************************
*函數名稱:lcd1602_WriteData()
*函數功能:寫數據
*入口參數:c--待寫數據
*出口參數:無
*********************************************
*/

voidlcd1602_WriteData(constucharc)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}

/*
***********************************************
*函數名稱:lcd1602_Init()
*函數功能:初始化LCD
*入口參數:無
*出口參數:無
***********************************************
*/

voidlcd1602_Init()
{
lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點陣
lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,
lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove
lcd1602_WriteCmd(0x01);//clearscreen
}

/*
************************************************
*函數名稱:lcd1602_Display()
*函數功能:字元顯示
*入口參數:ptr--字元或字元串指針
*出口參數:無
*說明:用戶可通過以下方式來調用:
*1)lcd1602_Display("Hello,world!");
*2)INT8U存儲類型txt[]="要顯示的字元串";
*或者INT8U存儲類型txt[]={'t','x','t',..,''};
*INT8U*ptr;
*ptr=&txt;
*lcd1602_Display(ptr);
*或lcd1602_Display(txt);
*或lcd1602_Display(&txt);
************************************************
*/

voidlcd1602_Display(constuchar*ptr,ucharline)
{
uchardatai=0;
uchar*dataq;

q=ptr;
switch(line)
{
case0:
lcd1602_WriteCmd(0x80);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
case1:
lcd1602_WriteCmd(0xc0);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}

ucharkbscan(void)
{
unsignedcharsccode,recode;
P3=0x0f;//發0掃描,列線輸入
if((P3&0x0f)!=0x0f)//有鍵按下
{
delay(20);//延時去抖動
if((P3&0x0f)!=0x0f)
{
sccode=0xef;//逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//等待鍵抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//無鍵按下,返回0
}
uchargetkey(void)
{
ucharkey;
key=kbscan();
if(key==0){keyval=0xff;return(0);}
switch(key)
{
case0x11:keyval=7;break;
case0x12:keyval=4;break;
case0x14:keyval=1;break;
case0x18:keyval=10;break;
case0x21:keyval=8;break;
case0x22:keyval=5;break;
case0x24:keyval=2;break;
case0x28:keyval=0;break;
case0x41:keyval=9;break;
case0x42:keyval=6;break;
case0x44:keyval=3;break;
case0x48:keyval=11;break;
case0x81:keyval=12;break;
case0x82:keyval=13;break;
case0x84:keyval=14;break;
case0x88:keyval=15;break;
default:keyval=0xff;break;
}
if(keyval!=0xff)return(1);
elsereturn(0);
}


main()
{
ucharnum;
lcd1602_Init();
lcd1602_Display(str,0);
while(1)
{
if(getkey())
{
if(keyval<10)keystr[num]=keyval+0x30;
elsekeystr[num]=keyval-10+'A';
lcd1602_Display(keystr,1);
num++;
num%=16;
}

}
}

⑶ 單片機原理及應用電子書

單片機原理及應用電子書如下:

《單片機原理和應用》是2010年9月由電子工業出版社出版的圖書,本書系統全面地介紹了80C51單片機的基本原理、硬體結構、指令系統,並從應用的角度介紹了匯編語言程序設計、單片機外部電路的擴展。

以及與鍵盤、LED顯示、LCD顯示、列印機等多種硬體介面的設計方法,詳細介紹了串列、並行介面的A/D、D/A轉換器功能特點和典型應用,增加了單片機應用系統設計、Proteus模擬、實驗和課程設計等內容。

對並行器件、並行匯流排擴展及8255、8155、8279等已基本淘汰的器件進行了精簡或摒棄顫睜穗,補充早早了串列匯流排技術、串列匯流排器件介面應用和STC系列單片機內部新增功能部件的使用,以及C51編程規范等內容。

書中有單片機應用系統設計、Proteus模擬、實驗和課程設計等章節,主教材與實驗教材整合為一本書,知識量大。

⑷ 單片機原理及其應用技術課程設計任務書

隨便翻一本單片機的書都會有這個秒中斷的例子,毛主席教導過我們,自己動手,豐衣足食。

⑸ 【單片機打鈴系統設計】 c51語言單片機打鈴系統設計

畢業綜合訓練

(畢業論文/設計形式用)

課題名稱 單片機打鈴系統設計

學 院 信息工程學院

專 業 電子信息工程設計

班 級 13專電子1班

姓 名 李躍 學號 2013242638

指導老師 何健

江西科技學院

畢業綜合訓練任務書

學院 信息工程學院 專業 電子信息工程技術 年級 13 班級 電子專1班 姓名 李躍 起止日期 題目 單片機打鈴設計

1.畢業綜合訓練任務及要求(根據題目性質對學生提出具體要求)

設計基於單片機的打鈴裝置,用DS1302對時、分、秒計時和設置打鈴時間,采

用三線串列數據傳輸介面與STC89C52進行同步通信,用矩陣鍵盤來設置時間值,

並通過8255晶元讀入設置值,最後通過89C52單片機晶元綜合控制[1],把當前

時間送到數碼管顯示,到點把信號送入蜂鳴器,實現打鈴,撰寫畢業論文。

2.畢業綜合訓練的原始資料及依據(包括做調研的背景,研究條件、

應用環境等)

3.主要參考資料、文獻

[1] 張鑫. 單片明宏機原理及應用[M].北京:電子工業出版社,2005.8.

[2] 康光華. 電子技術基礎. 模擬部分[M].北京:高等教育出版社,2006.1.

[3] 康光華. 電子技術基礎. 數字部分[M].北京:高等教育出版社,2006.1.

[4] 祁偉, 楊亭. 單片機C51程序設計教程與實驗[M].北京:北京航空航天大學出版社,

2006.

[5] 樓然苗. 李光飛. 單片機課程設計指導[M].北京:北京航空航天大學出版社,2007.4

[6] 單片機學習網

指導教師

年 月 日

摘 要

隨著科學技術的飛速發展,單片機應用的范圍越來越廣,本設計正是基於STC89C52型單片機為核心,加上適當的外圍部件,設計而成的簡易自動打鈴系統。

簡易自動打鈴系統的設計以STC89C52單片機晶元和8255晶元的拓展I/0引腳為核心部件,用定時器中斷系統進行計時、數碼管顯示當前時間、蜂鳴器實現打鈴功能、矩陣鍵盤調整顯示時間、電源電路為整個系統提供5V 工作電壓,由以上模塊構成了本系統。根據設計要求,該簡易自動打鈴系統可以進行計時和激拿冊顯示,設置當前時間,實現定點打鈴等功能。該設計簡單、實用、操作便捷。

關鍵字:單片機;自動定點打鈴;設置時間;中斷;矩陣鍵盤;I/O擴展;

目錄

摘 要............................................................................................................................ I

第一章 方案論證與對比.............................................................................................. 1

1.1方案一 採用時鍾晶元和鍵盤實現功能 .............................................................. 1

1.2方案二:採用中斷定時實現功能 ........................................................................ 1

1.3方案比較 ................................................................................................................ 2

第二章 單元電路設計與論證...................................................................................... 3

2.1單片敏旁機、I/O拓展 . ..................................................................................................... 3

2.2打鈴電路設計 . ............................................................................................................ 4

2.3數碼管電路設計 . ........................................................................................................ 4

第三章 程序設定.......................................................................................................... 5

3.1主程序工作流程..................................................................................................... 5

3.2定時器中斷子程序 ................................................................................................ 5

3.3時間設定子程序 . ........................................................................................................ 6

第四章 系統功能實際測試 ......................................................................................... 7

4.1程序實際編譯測試 . .................................................................................................... 7

4.2系統實際測試 . ............................................................................................................ 7

4.3 軟體調試步驟 ............................................................................................................ 7

4.4子程序調試步驟 . ........................................................................................................ 7

4.5調試結果 . .................................................................................................................... 8

4.6系統誤差及性能分析 . ................................................................................................ 8

第五章 設計總結 ......................................................................................................... 9

第六章 詳細儀器清單 ............................................................................................... 10

參考文獻 ..................................................................................................................... 11

附錄1 詳細程序......................................................................................................... 12

第一章 方案論證與對比

1.1方案一 採用時鍾晶元和鍵盤實現功能

方案一原理框圖如圖1.1所示:

圖 1.1 採用時鍾晶元定時實現功能

該系統用DS1302對時、分、秒計時和設置打鈴時間,採用三線串列數據傳輸介面與STC89C52進行同步通信,用矩陣鍵盤來設置時間值,並通過8255晶元讀入設置值,最後通過89C52單片機晶元綜合控制[1],把當前時間送到數碼管顯示,到點把信號送入蜂鳴器,實現打鈴。

1.2方案二:採用中斷定時實現功能

方案二原理框圖如圖1.2

所示:

圖 1.2 採用中斷定時實現功能

該系統以STC89C52單片機為核心控制部件。用8255做I/O拓展晶元,數碼管接8255的PA 、PB 引腳,用動態掃描的方式顯示當前時間。蜂鳴器與單片機的P3.3口相連,當打鈴時間到時,由STC89C52發出打鈴指令。以外部INT0和INT1中斷按鈕實現調時功能。

1.3方案比較

本設計要求能實現基本計時和打鈴功能。計時和打鈴時間設計,方案一中用到了DS1302時鍾晶元計時和打鈴時間設置;方案二中採用定時器中斷來計時並結合軟體設置打鈴時間。上述兩種方案中:方案一的外圍硬體電路設計復雜,而且時鍾晶元沒有得到充分利用,而方案二的軟體計時具有硬體開銷小,成本低,外圍電路設計簡單等優點。上述兩種方案中:方案一的軟體設計比方案二的難度系數大,使程序易讀性不強。綜合對計時的精密程度要求不高的本系統,本設計採用方案一來實現功能。

第二章 單元電路設計與論證

2.1硬體設計總框圖

本設計主要由STC89C52單片機晶元與8255晶元組成的模塊為控制核心、蜂鳴器電路模塊實現打鈴功能、矩陣鍵盤模塊調整當前時間、數碼管顯示模塊顯示時間,由以上四大模塊構成了本系統,詳細電路圖見附錄一,硬體設計總框圖如圖2.1:

圖2.1硬體設計總框圖

2.1單片機、I/O拓展

圖 2.2 主控電路框圖

STC89C52RC 是一個低功耗,高性能CMOS 8位單片機,片內含8k Bytes ISP的可反復擦寫1000次的Flash 只讀程序存儲器,器件採用ATMEL 公司的高密度、非易失性存儲技術製造,兼容標准MCS-51指令系統及80C51引腳結構,晶元內集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的STC89C52可為許多嵌入式控制應用系統提供高性價比的解決方案。STC89C52具有如下特點:40個引腳,8k Bytes Flash片內程序存儲器,256 bytes的隨機存取數據存儲器(RAM ),32個外部雙向輸入/輸出(I/O)口,5個中斷優先順序2層中斷嵌套中斷,2個16位可編程定時/計數器,2個全雙工串列通信口,看門狗

(WDT )電路,片內時鍾振盪器。其主要特性[1]如有:與MCS-51 兼容;8k 可反復擦寫(>1000次)Flash ROM;全靜態工作:0Hz~24MHz;三級程序存儲器鎖定;256*8位內部RAM ;32可編程I/O線;2個16位可編程定時/計數器;5個中斷源;可編程串列通道;低功耗的空閑和掉電模式。I/O拓展採用8255晶元,單片機用89C52,電路框圖如圖2-2所示。

2.2打鈴電路設計

採用P 型三極體為蜂鳴器提供5V 電源,並把STC89C52的P2.0口與三極體的基極相連接,當P2.0口有低電平輸入出時,三極體導通[2],蜂鳴器響應,從而實現打鈴功能。電路框圖如圖2.4所示:

圖2.3打鈴電路框圖

2.3數碼管電路設計

8255的PA 口控制數碼管的位選,低電平有效;PB 口做為段選輸出,接1K 歐姆的限流電阻[3]。如圖2.4所示:

圖2.4數碼管顯示電路框圖

第三章 程序設定

3.1主程序工作流程

主程序首先設置8255模式,並打開中斷0,設置中斷為邊沿觸發模式;其次在死循環中執行讀秒顯示子程序,當定時器滿一秒時,在顯示緩沖區中時間加一,等待送入數碼管顯示;再次按鍵掃描子程序,如果有中斷0或中斷1按鈕被按下時,則轉入相應功能的子程序中;最後如果當前顯示時間滿足預設打鈴條件,通過打鈴判斷子程序跳入對應的打鈴方式中執行[4]。詳細主程序見附錄二,主程序流程圖如圖3.1。

圖 3.1 主程序流程圖

3.2定時器中斷子程序

此子程序為本設計的核心之一,首先初始化定時器T0,設置T0為工作方式1,其初始值為3CB0H (既每次溢出定時50ms ),並對其循環20次,然後把時間加1s ,並送入顯示緩沖區等待顯示[5]。顯示時,先取出內存地址中的數據,然後查得對應的顯示用段碼從PB 口輸出,PA 口將對應的數碼管選中供電,就能顯示緩沖區中的數據值。為了顯示秒位和上下午標志在數碼管顯示上特加了「—」、「A 」、「P 」這三個特殊字元子。程序流程圖如圖3.2:

圖 3.2定時器中斷顯示子程序流程圖

3.3時間設定子程序

時間設定模塊的設計要點是按鍵的去抖處理與「一鍵多態」

[5]

的處理。即

只涉及2個鍵完成了6位時間參數的設定。「一鍵多態」即多種功能的實現思想史,根據按鍵時刻的系統狀態,決定按鍵採取何種動作,即何種功能。

圖 3.3 鍵盤掃描子程序流程圖

第四章 系統功能實際測試

4.1程序實際編譯測試

在Keil C51編譯環境下編譯過程中所產生的誤差主要是在重裝初值的過程中大約需要8個機器周期,本設計採用在程序開始時對定時器賦初值多加8個機器周期來消除此誤差。

最後在Keil C51編譯環境下編譯通過,0警告,0錯誤。

4.2系統實際測試

通過實驗測試,數碼管顯示,按鍵調時,定時打鈴均符合預期,測試成功。

4.3 軟體調試步驟

1、打開軟體後, 在Project 菜單中選擇New Project命令,打開一個新項目。保存此項目,輸入工程文件名後,並保存工程文件的目錄。

2、為項目文件選擇一個目標器件,即選擇8051的類型。在Data base 列表框中選擇「ATML 89C52」,確定。

3、上述設置好後,創建源程序文件並輸入程序代碼。輸入好代碼後點擊「文件/保存」。

4、把源文件添加到項目中,用滑鼠指在目標工作區的目標1,點擊右鍵在彈出的菜單中選擇添加文件到源代碼組,在彈出的添加文件框中,選擇需要添加到項目中的文件。

5、開始編譯,對項目文件進行編譯。若沒有錯誤後進行硬體調試。

4.4子程序調試步驟

子程序調試應一個模塊一個模塊地進行,首先單獨調試各功能子程序,檢查程序是否能夠實現預期的功能,介面電路的控制是否正常等;最後逐步將各子程序連接起來進行總調試。故調試步驟[6]如下:

A 、蜂鳴器的調試

調試方法:先把打鈴程序下載到單片機,讓蜂鳴器發聲,看是否在正確的時間內實現打鈴。

B 、數碼管程序調試

正確的顯示時間是整個程序的關鍵之一。調試方法:先把程序下載到單片機,讓數碼管顯示,是否正確的顯示時間的變化。

C 、鍵盤調時序

正確的顯示所調的時間是整個程序的關鍵之一。調試方法:先把鍵盤程序和顯示程序下載到單片機,讓數碼管顯示,是否正確的所調時間的變化。

4.5調試結果

實現計時和顯示功能(12小時制),可設置當前時間(包括上下午標志,時、分的數字顯示),能在上午7:45和下午10:00定點打鈴,且每次打鈴均為響鈴3s ,停1s ,再響3s 。

4.6系統誤差及性能分析

經測試該簡易自動打鈴系統在一天內會出現時間誤差,該誤差主要是由於晶振自身的誤差所造成的。另外在中斷的過程中,只會在第一次計時時產生時間的偏移,而它所產生累積誤差很小,可以忽略。

第五章 設計總結

通過這次課程設計,我們得到了很多收獲和體會,懂得了團隊合作的重要性和必要性,以及工程設計的大體過程。第一,鞏固和加深了對單片機基本知識和理解,提高了綜合運用所學知識的能力。第二,增強了根據課程需要選學參考資料,查閱手冊,圖表和文獻資料的自學能力。通過獨立思考,深入研究有關問題,學會自己分析解決問題的方法。第三,通過實際方案的分析比較,設計計算,安裝調試等環節,初步掌握了簡單使用電路的分析方法和工程設計方法。第四,在這次課程設計過程中,光有理論知識是不夠的,還必須懂一些實踐中的知識。所以在課程設計的實踐中,我們應將實驗課與課堂教學結合起來,鍛煉自己的理論聯系實際的能力與實際動手能力。第五,掌握了比較常用的儀器的使用方法,提高了動手能力。第六,培養了嚴謹的工作作風和科學態度。

總之這次課程設計,培養了我們綜合應用單片機原理及應用的理論知識和理論聯系實際的能力;在設計的過程中還培養了我們的團隊精神,同學共同協作,一齊商量討論,解決了許多問題。這一切都令我們受益匪淺,在今後的學習工作中我們會一如既往,不斷努力。

第六章 詳細儀器清單

圖6.1詳細儀器清單

參考文獻

[1] 張鑫. 單片機原理及應用[M].北京:電子工業出版社,2005.8. [2] 康光華. 電子技術基礎. 模擬部分[M].北京:高等教育出版社,2006.1. [3] 康光華. 電子技術基礎. 數字部分[M].北京:高等教育出版社,2006.1.

[4] 祁偉, 楊亭. 單片機C51程序設計教程與實驗[M].北京:北京航空航天大學出版社,2006. [5] 樓然苗. 李光飛. 單片機課程設計指導[M].北京:北京航空航天大學出版社,2007.4 [6] 單片機學習網

附錄1 詳細程序

#include #include

#define uchar unsigned char #define uint unsigned int

sbit RING=P3^3;

#define HOR_UP 0x18 //定義鍵值意義 #define MIN_UP 0x28 #define HOR_DOWN 0X14 #define MIN_DOWN 0x24 #define AM_PM 0X48 #define NO_KEY_DOWN 0XFF

uchar xdata PA _at_ 0xD9FF, PB _at_ 0XDBFF, PC _at_ 0XDDFF, //定義外部變數,強制分配地址 EX_PORT_CON _at_ 0XDFFF;

uchar code LED_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA, //LED段碼(0~9外加一個全滅, 一個A ,一個P) 0X20,0X28,0XFF,0X30,0X70};

uint code RING_TIME[]={465,1320}; //開啟時間(分)

uchar COUNT=0,KEY=NO_KEY_DOWN,HOR=0,MIN=0,SEC=0; //軟計時-游標-鍵值

void Display(); //顯示 void Time_Go(); //時間進位 void Time_Set(); //時間設置 void Ring_Control(); //繼電器控制 void Delay(uint A); //簡單延時 uchar Key_Scan(); //鍵盤掃描

void main() {

EX_PORT_CON=0X81; //8255初始化(PA,PB ,PC_H輸出,PC_L輸入)

PC=0xF0; //鍵盤初始化 TH0=0X3C; //定時器初始化

TH1=TL1=0; TR1=0;

TMOD=0X21;

EA=ET0=TR0=ET1=1; while(1) { Display(); Time_Go();

KEY=Key_Scan(); Ring_Control(); Time_Set(); } }

void Display() {

PB=0XFF; //消影 PA=0XFe; //發送位碼

if(HOR>=12)PB=LED_CODE[12]; //發送段碼 else PB=LED_CODE[11]; Delay(200); //延時

PB=0XFF; //消影 PA=0XFd; if(HOR>12) //發送位碼 PB=LED_CODE[(HOR-12)/10]; else PB=LED_CODE[HOR/10]; //發送段碼 Delay(200); //延時

PB=0XFF; PA=0xfb;

if(HOR>12)PB=LED_CODE[(HOR-2)%10]; else PB=LED_CODE[HOR%10]; Delay(200);

PB=0XFF; //中間橫桿 PA=0XF7;

if(COUNT>10)//在顯示實時時鍾時閃爍,為01秒/周期 PB=0XFF; else

Delay(200);

PB=0XFF; PA=0Xef;

PB=LED_CODE[MIN/10]; Delay(200);

PB=0XFF; PA=0XdF;

PB=LED_CODE[MIN%10]; Delay(130); }

void Timer() interrupt 1 {

TH0=0X3C; //重裝初值 TL0=0XB2;

COUNT++; //軟計時 }

void Ring() interrupt 3 {

RING=~RING; }

void Time_Go() //時間進位 {

if(COUNT>=20) //計數到達20次,即:定時器50MS*20=1S { COUNT=0; //軟計時清零 SEC+=1; // 秒加1 if(SEC>=60) //秒是否到達60 { SEC=0; //清秒位 MIN+=1; //分鍾加1 if(MIN>=60)//分鍾是否到達60 { MIN=0; //清分位 HOR+=1; //小時加1 if(HOR>=24)//小時是否到達24 HOR=0; //清小時位 } } }

}

void Time_Set() {

if(KEY==HOR_UP){if(HOR>=23)HOR=0;else HOR++;}

else if(KEY==HOR_DOWN){if(HOR==0)HOR=23;else HOR--;} else if(KEY==MIN_UP){if(MIN>=59)MIN=0;else MIN++;} else if(KEY==MIN_DOWN){if(MIN==0)MIN=59;else MIN--;} else if(KEY==AM_PM){if(HOR>=12)HOR-=12;else HOR+=12;} }

void Ring_Control() //繼電器控制 {

uint RTC_MIN;

RTC_MIN=HOR*60+MIN; //將實時時鍾 化成 分鍾 if((RTC_MIN==RING_TIME[0])||(RTC_MIN==RING_TIME[1])) { if(((SEC>=3)&&(SEC=7)){TR1=0;RING=1;} else TR1=1; } }

void Delay(uint A) {

while(A--); }

uchar Key_Scan() {

uchar A=4,ROW=0x08,T=NO_KEY_DOWN; if(PC!=0XF0) //是否有鍵按下 {Delay(200); //消抖 if(PC!=0XF0) while(A--) //查詢,逐列 { ROW

if(T!=0X00) //但前列是否有鍵被按下

{

T=(T+(ROW&0XF0)); //計算鍵值

do {Display();Time_Go();} //防止數碼管在按鍵按下時閃爍

while((PC&0X0F)!=0); //鬆手檢測 peak; //跳出循環

}

} PC=0xf0; //鍵盤初始化

}

return T;

} //返回鍵值

16

閱讀全文

與單片機原理課程設計word文檔相關的資料

熱點內容
哪裡可以免費看動畫app 瀏覽:47
文本加密咋解 瀏覽:481
tomcat做伺服器怎麼設置 瀏覽:252
非對稱加密會增大網路包嗎 瀏覽:703
為什麼不能編譯c 瀏覽:261
數據伺服器不能啟動是什麼意思 瀏覽:556
java以什麼開頭 瀏覽:820
蘋果手機相冊文件夾如何清理 瀏覽:405
伺服器雲電腦搭建教程 瀏覽:410
eco怎麼搭建伺服器 瀏覽:468
周轉材料核演算法 瀏覽:356
學nodejs還是php好 瀏覽:279
電信營業廳app怎麼買q幣 瀏覽:917
linux退出登陸 瀏覽:534
python查找相似圖片的代碼 瀏覽:336
趙麗pdf 瀏覽:661
如何蘋果手機app不要自動更新 瀏覽:979
pythonflask路線教程 瀏覽:258
程序員職業有哪些好處 瀏覽:713
大都會軟體app如何掃碼 瀏覽:438