九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

微機(jī)原理課程設(shè)計

  • 資源ID:41229712       資源大?。?span id="24d9guoke414" class="font-tahoma">1.15MB        全文頁數(shù):57頁
  • 資源格式: DOCX        下載積分:20積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要20積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

微機(jī)原理課程設(shè)計

目錄:1、 設(shè)計的目的和意義2、 主要功能3、 硬件電路設(shè)計4、 軟件設(shè)計5、 部分代碼6、 課程設(shè)計體會7、 參考文獻(xiàn)一、課程設(shè)計的目的和意義1、設(shè)計的目的1) 了解設(shè)計要求2) 獨(dú)立完成設(shè)計任務(wù) 3) 繪制系統(tǒng)硬件總框圖4) 繪制系統(tǒng)原理電路圖5) 制定編寫設(shè)計方案,編制軟件框圖,完成詳細(xì)完整的程序清單和注釋;6) 制定編寫調(diào)試方案,編寫用戶操作使用說明書7) 寫出設(shè)計工作小結(jié)。對在完成以上文件過程所進(jìn)行的有關(guān)步驟如設(shè)計思想、指標(biāo)論證、方案確定、參數(shù)計算、元器件選擇、原理分析等作出說明,并對所完成的設(shè)計作出評價,對自己整個設(shè)計工作中經(jīng)驗教訓(xùn),總結(jié)收獲和今后研修方向。2、 意義現(xiàn)代的電子時鐘是基于單片機(jī)的一種計時工具,采用延時程序產(chǎn)生一定的時間中斷,用于1秒的定義,通過計數(shù)方式進(jìn)行滿60秒分鐘進(jìn)1,滿60分小時進(jìn)1,滿24小時小時清零。從而達(dá)到計時的功能,是人民日常生活不可缺少的工具。高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術(shù),因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)試,數(shù)字式電子鐘用集成電路計時時,譯碼代替機(jī)械式傳動,用LED顯示器代替指針顯示進(jìn)而顯示時間,減小了計時誤差,這種表具有時、分、秒顯示時間的功能,還可以進(jìn)行時和分的校對,片選的靈活性好。二、主要功能 電子鐘設(shè)計一個簡單的單片機(jī)編程設(shè)計,要求電子鐘軟件程序必須具備測溫、時鐘和音樂功能。三、硬件電路設(shè)計1、部分原件使用說明中文名1602字符液晶VSS一般接地VDD接電源BLA背光電源正極BLK背光電源負(fù)極顯示16x02即32個字符(1)簡介1602 字符型 LCD 模塊的應(yīng)用非常廣泛,而各種液晶廠家均有提供幾乎都是同樣規(guī)格的 1602 模塊或 兼容模塊,盡管各廠家的對其各自的產(chǎn)品命名不盡相同;1602 字符型 LCD 模塊最初采用的 LCD 控制器采 用的是 HD44780,在各廠家生產(chǎn)的 1602 模塊當(dāng)中,基本上也都采用了與之兼容的控制 IC,所以從特性上 基本上是一樣的;當(dāng)然,很多廠商提供了不同的字符顏色、背光色之類的顯示模塊。 (2) 操作1602 液晶的基本的操作分為以下四種: 狀態(tài)字讀操作:輸入 RS=低、RW=高、EP=高; 輸出:DB07 讀出為狀態(tài)字; 數(shù)據(jù)讀出操作:輸入 RS=高、RW=高、EP=高; 輸出:DB07 讀出為數(shù)據(jù); 指令寫入操作:輸入 RS=低、RW=低、EP=上升沿; 輸出:無; 數(shù)據(jù)寫入操作:輸入 RS=高、RW=低、EP=上升沿; 輸出:無。(3) 指令/*顯示模式指令*/#define LCD_Display_mode 0X38 /設(shè)置16x2顯示 5x7點陣 8位數(shù)據(jù)接口/*顯示開/關(guān)及光標(biāo)設(shè)置*/#define LCD_shows0 0X0C /開顯示 不顯示光標(biāo) 光標(biāo)不閃爍#define LCD_shows2 0X0E /開顯示 顯示光標(biāo) 光標(biāo)不閃爍#define LCD_shows1 0X0F /開顯示 顯示光標(biāo) 光標(biāo) 閃爍#define LCD_shows3 0X08 /關(guān)顯示 不顯示光標(biāo) 光標(biāo)不閃爍/*指針設(shè)置*/#define LCD_cursor1 0X04 /寫一個字符 地址指針減1#define LCD_cursor2 0X05 /寫一個字符 地址指針減1 并屏幕右移#define LCD_cursor3 0X06 /寫一個字符 地址指針加1#define LCD_cursor4 0X07 /寫一個字符 地址指針加1 并屏幕左移/*清屏指令*/#define LCD_clear 0x01 /清屏指令 數(shù)據(jù)指針清零 所有顯示清零/*忙狀態(tài)字*/#define LCD_WAY 0x80 /狀態(tài)字/*宏定義顯示起始地址*/#define LCD_ADDH 0X80 /第一行地址0x80-0xA7#define LCD_ADDL 0XC0 /第二行地址0xC0-0xE7/*IO口定義*/#define LCD1602_DATA P0 /宏定義8位數(shù)據(jù)線IO為P0口 D0D7=P00P07 8位數(shù)據(jù)線 D0=P00;sbit LCD1602_RS=P25; /數(shù)據(jù)/命令選擇端(H/L)sbit LCD1602_RW=P26; /讀/寫選擇端(H/L)sbit LCD1602_E =P27; /使能信號/*函數(shù)聲明*/void LCD1602_init(); /液晶初始化函數(shù)void LCD1602_writecd(bit lcd_rs, uchar LCD1602_d);/寫命令/數(shù)據(jù) 函數(shù)bit lcd_rs是數(shù)據(jù)還是命令 uchar LCD1602_d要寫入的數(shù)據(jù)uchar LCD1602_readway(); /讀忙狀態(tài)函數(shù) 由寫入和讀取函數(shù)調(diào)用uchar LCD1602_readata(); /讀數(shù)據(jù)函數(shù)void LCD_DELAY(uchar LCD_delay); /*液晶初始化函數(shù)*/void LCD1602_init() /液晶初始化函數(shù) LCD_DELAY(LCD_15MS); /延時15MS 初始化LCD1602_writecd(LCD1602_COM,LCD_Display_mode);/寫指令38H 設(shè)置16x2顯示 5x7點陣 8位數(shù)據(jù)接口LCD1602_writecd(LCD1602_COM,LCD_shows0); /開顯示 不顯示光標(biāo) 光標(biāo)不閃爍LCD1602_writecd(LCD1602_COM,LCD_cursor1); /檢查忙狀態(tài)LCD1602_writecd(LCD1602_COM,LCD_clear); /寫指令01H:顯示清屏/*液晶寫命令/數(shù)據(jù)函數(shù)*/void LCD1602_writecd(bit lcd_rs, uchar LCD1602_cd)/寫命令/數(shù)據(jù) 函數(shù) uchar LCD1602_NUM; /定義變量用來液晶無忙回答的退出死循環(huán)LCD1602_NUM=255; /忙狀態(tài)檢測次數(shù)while(LCD1602_readway() /檢查忙狀態(tài)LCD1602_NUM-; /檢測次數(shù)自減if(LCD1602_NUM=0) /判斷檢測次數(shù)等于0break; /退出循環(huán)判斷忙LCD1602_RW = LCD1602_L; /讀/寫選擇端(H/L)LCD1602_RS = lcd_rs; /數(shù)據(jù)/命令選擇端(H/L)LCD1602_DATA= LCD1602_cd; /IO口賦值LCD1602_E = LCD1602_H; /拉高使能信號開始傳輸數(shù)據(jù)LCD1602_E = LCD1602_L; /拉低使能信號鎖存數(shù)據(jù)LCD1602_DATA= 0xff; /IO口數(shù)據(jù)清除/*忙狀態(tài)讀取函數(shù)*/uchar LCD1602_readway()/讀狀態(tài)函數(shù)由寫入和讀取函數(shù)調(diào)用 uchar LCD1602_way; /狀態(tài)字變量LCD1602_DATA=0xff; /IO口數(shù)據(jù)清除LCD1602_RS = LCD1602_COM; /數(shù)據(jù)/命令選擇端(H/L) 命令LCD1602_RW = LCD1602_H; /讀/寫選擇端(H/L)LCD1602_E = LCD1602_H; /拉高使能信號開始接收狀態(tài)LCD1602_way =LCD1602_DATA; /讀取狀態(tài)LCD1602_E = LCD1602_L; /拉低使能信號鎖存數(shù)據(jù)LCD1602_way =LCD1602_way&LCD_WAY;/取忙狀態(tài)字return(LCD1602_way); /返回狀態(tài)字/*液晶讀數(shù)據(jù)函數(shù)*/uchar LCD1602_readata()/讀數(shù)據(jù)函數(shù) uchar LCD1602_data; /數(shù)據(jù)暫存變量while(LCD1602_readway(); /檢查忙狀態(tài) -LCD1602_DATA=0xff; /IO口數(shù)據(jù)清除LCD1602_RS = LCD1602_DAT; /數(shù)據(jù)/命令選擇端(H/L) 數(shù)據(jù)LCD1602_RW = LCD1602_H; /讀/寫選擇端(H/L)LCD1602_E = LCD1602_H; /拉高使能信號開始接收狀態(tài)LCD1602_data= LCD1602_DATA; /讀取狀態(tài)LCD1602_E = LCD1602_L; /拉低使能信號鎖存數(shù)據(jù)return(LCD1602_data); /返回數(shù)據(jù)/*延時函數(shù)*/void LCD_DELAY(uchar LCD_delay)/ uchar lcd_del;while(LCD_delay-) /自減lcd_del=100;while(lcd_del-);中文名DS1302外文名DS1302公司DALLAS公司國家美國類型時鐘芯片(1) 簡介DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周、時、分、秒進(jìn)行計時,具有閏年補(bǔ)償功能,工作電壓為2.0V5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。(2) 操作控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù) 據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,位1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。(3) 結(jié)論DS1302 存在時鐘精度不高,易受環(huán)境影響,出現(xiàn)時鐘混亂等缺點。DS1302可以用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù) 的時間同時記錄。這種記錄對長時間的連續(xù)測控系統(tǒng)結(jié)果的分析及對異常數(shù)據(jù)出現(xiàn)的原因的查找具有重要意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時采樣或定時采樣,沒有具 體的時間記錄,因此,只能記錄數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時間;若采用單片機(jī)計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且,某些測控系統(tǒng)可能不允許。但是,如果在系統(tǒng)中采用時鐘芯片DS1302,則能很好地解決這個問題。外文名DS18B20體積小硬件開銷低抗干擾能力強(qiáng)工作電壓3V5.5V超低功耗靜態(tài)功耗<3uA(1) 簡介DS1820數(shù)字溫度計提供9位溫度讀數(shù),指示器件的溫度。信息經(jīng)過單線接口送入DS1820或從DS1820送出,因此從中央處理器到DS1820僅需連接一條線(和地)。讀、寫和完成溫度變換所需的電源可以有數(shù)據(jù)線本身提供,而不需要外部電源。因為每個DS1820有唯一的系列號(silicon serial number),因此多個DS1820可以存在于同一條單線總線上。這允許在許多不同的地方放置溫度靈敏器件。此特性的應(yīng)用范圍包括HVAC環(huán)境控制,建筑物、設(shè)備或機(jī)械內(nèi)的溫度檢測,以及過程監(jiān)視和控制中的溫度檢測。(2) 操作根據(jù)定義,單線總線只有一根線;這一點是重要的,即線上的第一個器件能在適當(dāng)?shù)臅r間驅(qū)動該總線。為了做到這一點,第一個連接到單線總線上的器件必須具有漏極開路或三態(tài)輸出。DS1820的單線接口(I/O引腳是漏極開路的)。多站(multidrop)總線由單線總線和多個與之相連的從屬器件組成。單線總線要求近似于5K的上拉電阻。單線總線的空閑狀態(tài)是高電平。不管任何原因,如果執(zhí)行需要被掛起,那么,若要重新恢復(fù)執(zhí)行,總線必須保持在空閑狀態(tài)。如果不滿足這一點且總線保持在低電平時間大于480us,那么總線上的所有器件均被復(fù)位。存在脈沖(presence pulse)使總線主機(jī)知道DS1820在總線上并已準(zhǔn)備好工作。(3) 結(jié)論獨(dú)特的一線接口,只需要一條口線通信 多點能力,簡化了分布式溫度傳感應(yīng)用 無需外部元件 可用數(shù)據(jù)總線供電,電壓范圍為3.0 V至5.5 V 無需備用電源 測量溫度范圍為-55 C至+125 。華氏相當(dāng)于是-67 F到257華氏度 -10 C至+85 C范圍內(nèi)精度為0.5 C溫度傳感器可編程的分辨率為912位,溫度轉(zhuǎn)換為12位數(shù)字格式最大值為750毫秒,用戶可定義的非易失性溫度報警設(shè)置,應(yīng)用范圍包括恒溫控制、工業(yè)系統(tǒng)、消費(fèi)電子產(chǎn)品溫度計、或任何熱敏感系統(tǒng)描述該DS18B20的數(shù)字溫度計提供9至12位(可編程設(shè)備溫度讀數(shù))。由于DS18B20是一條口線通信,所以中央微處理器與 DS18B20只有一個一條口線連接。為讀寫以及溫度轉(zhuǎn)換可以從數(shù)據(jù)線本身獲得能量,不需要外接電源。 因為每一個DS18B20的包含一個獨(dú)特的序號,多個ds18b20s可以同時存在于一條總線。這使得溫度傳感器放置在許多不同的地方。它的用途很多,包 括空調(diào)環(huán)境控制,感測建筑物內(nèi)溫設(shè)備或機(jī)器,并進(jìn)行過程監(jiān)測和控制。DS18B20采用一線通信接口。因為一線通信接口,必須在先完成ROM 設(shè)定,否則記憶和控制功能將無法使用。主要首先提供以下功能命令之一: 1 )讀ROM, 2 )ROM匹配, 3 )搜索ROM, 4 )跳過ROM, 5 )報警檢查。這些指令操作作用在沒有一個器件的64位光刻ROM序列號,可以在掛在一線上多個器件選定某一個器件,同時,總線也可以知道總線上掛有有多 少,什么樣的設(shè)備。若指令成功地使DS18B20完成溫度測量,數(shù)據(jù)存儲在DS18B20的 存儲器。一個控制功能指揮指示DS18B20的演出測溫。測量結(jié)果將被放置在DS18B20內(nèi)存中,并可以讓閱讀發(fā)出記憶功能的指揮,閱讀內(nèi)容的片上存儲 器。溫度報警觸發(fā)器TH和TL都有一字節(jié)EEPROM 的數(shù)據(jù)。如果DS18B20不使用報警檢查指令,這些寄存器可作為一般的用戶記憶用途。在片上還載有配置字節(jié)以理想的解決溫度數(shù)字轉(zhuǎn)換。寫TH,TL指令 以及配置字節(jié)利用一個記憶功能的指令完成。通過緩存器讀寄存器。所有數(shù)據(jù)的讀,寫都是從最低位開始。中文名stc89c51工作電壓3.4V-5.5V工作頻率范圍0-35MHz計數(shù)器2個16位引腳40(1)簡介STC89C51RC/RD+系列單片機(jī)是STC推出的新一代高速/低功耗/超強(qiáng)抗干擾的單片機(jī),指令代碼完全兼容傳統(tǒng)8051單片機(jī),12時鐘/機(jī)器周期和6時鐘/機(jī)器周期可以任意選擇,HD版本和90C版本內(nèi)部集成MAX810專用復(fù)位電路。(2) 操作STC89C51RC/RD+系列單片機(jī)所有I/O口均(新增P4口)有三種工作類型:準(zhǔn)雙向口/弱上拉(標(biāo)準(zhǔn)8051輸出模式)、僅為輸入(高阻)或開漏輸出功能。STC89C51RC/RD+系列單片機(jī)的P1/P2/P3/P4上復(fù)位后為準(zhǔn)雙向口/弱上拉(傳統(tǒng)8051的I/O口)模式,P0口上電復(fù)位后是開漏輸出。P0口作為總線擴(kuò)展用時,不用加上拉電阻,作為I/O口用時,需加10K-4.7K上拉電阻。STC89C51RC/RD+的5V單片機(jī)的P0口的灌電流最大為12mA,其他I/O口的灌電流最大為6mA。STC89LE51RC/RD+的3V單片機(jī)的P0口的灌電流最大為8mA,其他I/O口的灌電流最大為4mA。(3) 結(jié)論STC89C51RC是采用8051核的ISP(In System Programming)在系統(tǒng)可編程芯片,最高工作時鐘頻率為80MHz,片內(nèi)含8K Bytes的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,具有在系統(tǒng)可編程(ISP)特性,配合PC端的控制程序即可將用戶的程序代碼下載進(jìn)單片機(jī)內(nèi)部,省去了購買通用編程器,而且速度更快。STC89C51RC系列單片機(jī)是單時鐘/機(jī)器周期(1T)的兼容8051 內(nèi)核單片機(jī),是高速/ 低功耗的新一代8051 單片機(jī),全新的流水線/精簡指令集結(jié)構(gòu),內(nèi)部集成MAX810 專用復(fù)位電路。2、流程圖3、原理圖多功能時鐘 元件清單器件名稱數(shù)量在原理圖中的標(biāo)號1k 電阻3R5, R7, R94.7K 電阻1R110K 電阻5R4, R6, R8, R10, R1110k 排阻1R310uF 電解電容1C112M 晶振1Y232.768K 晶振1Y133p 電容2C2, C38550 三極管1Q1AT89C51 單片機(jī)1U3蜂鳴器1LS1電源開關(guān)1S2電源端子1J1DS1302 時鐘芯片1U2DS18B20 溫度傳感器1U4LCD1602 字符液晶1U1指示燈 3D1, D2, D310K 電位器1R2無鎖輕觸開關(guān)5S1, S3, S4, S5, S64、PCB圖紙5、仿真圖4、 軟件設(shè)計1、部分代碼#include <REG52.H>#include <intrins.H>#include <math.h>/* 液晶引腳定義 */#define LCD_DB P0sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; /* 溫度傳感器引腳定義 */sbit DSA=P13; /* 時鐘芯片引腳定義 */sbit IO=P10;sbit SCLK=P11;sbit RST=P12;/* 獨(dú)立按鍵引腳定義 */sbit KeyOne = P32;sbit KeyThree = P33; sbit KeyTwo = P34;sbit KeyFour = P35;/* 第0位 第八位 位操作 */sbit ACC0=ACC0;sbit ACC7=ACC7;/* 報警指示引腳定義 */sbit Red = P36;sbit Green = P37;sbit Beep = P14;/* 時鐘芯片寄存器定義 */#define write_second 0x80#define write_minute 0x82#define write_hour 0x84#define write_day 0x86#define write_month 0x88#define write_week 0x8a#define write_year 0x8c/* 按鍵狀態(tài) */enum KEYSTART/* 按鍵鍵值 */enum KEYCONFIG/* 邏輯變量定義 */unsigned char miao=0,shi=0,fen=0,ri=0,yue=0,nian=0,week=0;extern unsigned char miao,shi,fen,ri,yue,nian,week;unsigned int TempVal=0,AlarmFlag=0;unsigned char YearData=0,MonthData=0,DayData=0,WeekData=0,HourData=0,MinuteData=0,AlarmH=0,AlarmM=0;/* n*10微妙延時 */void delay_n10us(unsigned int n) /* 寫命令函數(shù) */void LCD_write_command(unsigned char dat)/* 寫數(shù)據(jù)函數(shù) */void LCD_write_data(unsigned char dat)/* 寫字符函數(shù) X:015 Y:1,2 */void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)/* 寫一串字符 X:015 Y:1,2 */void LCD_disp_str(unsigned char x,unsigned char y,unsigned char *str)/* 液晶初始化 */void LCD_init(void)/* 溫度傳感器最小單位延時 */void delayA(unsigned int Delay)/* 溫度傳感器復(fù)位操作 */void dsresetA(void) /* 讀溫度傳感器一位數(shù)據(jù)信息 */bit tmpreadbitA(void) /* 讀溫度傳感器八位數(shù)據(jù)信息 */unsigned char tmpreadA(void) /* 寫溫度傳感器八位數(shù)據(jù)信息 */void tmpwritebyteA(unsigned char dat) /* 溫度轉(zhuǎn)換 */void tmpchangeA(void) /* 讀取溫度寄存器轉(zhuǎn)換數(shù)據(jù) */unsigned int gettmpA(void) /* 寫時鐘芯片八位數(shù)據(jù)信息 */void write_byte(unsigned char dat)/* 讀時鐘芯片八位數(shù)據(jù)信息 */unsigned char read_byte()/* 在時鐘芯片指定位置寫指定數(shù)據(jù) */void write_1302(unsigned char add,unsigned char dat)/* 讀取時鐘芯片指定地址的數(shù)據(jù)信息 */unsigned char read_1302(unsigned char add)/* 時鐘芯片數(shù)據(jù)轉(zhuǎn)換 */unsigned char BCD_Decimal(unsigned char bcd)/* 時鐘芯片初始化操作 */void ds1302_init() /* 設(shè)置時鐘芯片參數(shù)信息 */void Set_RTC(unsigned char address,unsigned char temp) /* 提取時鐘芯片時間信息 */void GetTime(void)/* 按鍵小抖動操作 */void DelayKey(void)/* 讀取按鍵鍵值 */unsigned char KeyProcess(void)/* 定時器配置 */void init() /定時器、計數(shù)器設(shè)置函數(shù)/* 外圍硬件初始化 */void HandInit(void)/* 年月日信息顯示 */void show_Data(void)/* 時分秒溫度信息顯示 */void Show_Time(void)/* 設(shè)置年參數(shù) */void Set_Year(void)/* 設(shè)置月參數(shù) */void SetMonth(void)/* 設(shè)置日參數(shù) */void SetDay(void)/* 設(shè)置周期參數(shù) */void SetWeek(void)/* 設(shè)置小時參數(shù) */void SetHour(void)/* 設(shè)置分鐘參數(shù) */void SetMinute(void)/* 設(shè)置鬧鐘小時參數(shù) */void SetAlarH(void)/* 設(shè)置鬧鐘分鐘參數(shù) */void SetAlarM(void)/* 邏輯信息處理 */void Process(void) /* 取得并顯示日歷和時間 */void timer0() interrupt 1 /* 主函數(shù) */void main(void)5、 課程設(shè)計體會通過本次實驗,讓我對STC89C51RC/RD+系列單片機(jī)有了更好的了解,懂得如何去使用定時器計數(shù)器,中斷,串行口,數(shù)碼管顯示,按鍵等知識,讓自己對單片機(jī)產(chǎn)生了更大的興趣。能夠完全實現(xiàn)數(shù)字鐘的功能,讓自己所學(xué)的東西應(yīng)用到實踐中,感覺到了單片機(jī)的重要性。能夠通過單片機(jī),完成各種成品的設(shè)計。通過本次設(shè)計,我們系統(tǒng)的了解了實時時鐘的設(shè)計流程,尤其是硬、軟件的設(shè)計方法,掌握了鍵盤顯示電路的基本功能及編程方法,掌握了鍵盤電路和顯示電路的一般原理,也進(jìn)一步掌握了定時器的使用和中斷處理器程序的編程方法。開拓了思路,鍛煉了實踐動手能力,提高了分工協(xié)作能力和分析問題,解決問題的能力,達(dá)到了本次課程設(shè)計的目的。在調(diào)試電路的過程中也積累了一些寶貴的經(jīng)驗,比如說,在I/O口要保證標(biāo)準(zhǔn)的高電平”1”的產(chǎn)生,一般要上拉電阻5.1k,在一些需要高電平的地方,不能用懸空來模擬,必須嚴(yán)格的按照“+5v”來連接,特別是調(diào)試過程中的分部分進(jìn)行很重要。此次單片機(jī)課程設(shè)計,從理論到實踐,學(xué)到了很多的東西。同時不僅鞏固了以前所學(xué)過的知識,而且還學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨(dú)立思考的能力。這次的課程設(shè)計還讓我學(xué)會了如何去培養(yǎng)我們的創(chuàng)新精神,從而不斷地戰(zhàn)勝自己,超越自己。更重要的是,我在這一設(shè)計過程中,學(xué)會了堅持不懈,不輕言放棄。單片機(jī)課程設(shè)計雖然結(jié)束了,但通過設(shè)計所學(xué)到的東西將長久存在。相信這次設(shè)計帶給我們的嚴(yán)謹(jǐn)?shù)膶W(xué)習(xí)態(tài)度和一絲不茍的科學(xué)作風(fēng)將會給我們未來的工作和學(xué)習(xí)打下一個更堅實的基礎(chǔ)單片機(jī)課程設(shè)計,是對單片機(jī)知識的驗證,可以幫助我們理解鞏固所學(xué)知識,激發(fā)我們對單片機(jī)課程的興趣,更鍛煉了我們獨(dú)立思考、開拓創(chuàng)新的能力。在做本次課程設(shè)計的過程中,我感觸最深的當(dāng)屬查閱大量的設(shè)計資料了。為了讓自己的設(shè)計更加完善,查閱這方面的設(shè)計資料是十分必要的,同時也是必不可少的。我們是在做單片機(jī)課程設(shè)計,但我們不是藝術(shù)家,他們可以拋開實際盡情在幻想的世界里翱翔,而我們一切都要有據(jù)可依,有理可尋,不切實際的構(gòu)想永遠(yuǎn)只能是構(gòu)想,永遠(yuǎn)無法升級為設(shè)計。最后,要做好一個課程設(shè)計,就必須做到:在設(shè)計程序之前,對所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,知道該單片機(jī)內(nèi)有哪些資源;要有一個清晰的思路和一個完整的軟件流程圖;在設(shè)計程序時,不能妄想一次就將整個程序設(shè)計好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,一個程序的完美與否不僅僅是實現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設(shè)計課程過程中遇到問題是很正常德,但我們應(yīng)該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。還有要感謝指導(dǎo)老師在我們遇到困難時,給予我們的建議與鼓勵。6、 參考文獻(xiàn)(1) 何立民.單片機(jī)應(yīng)用技術(shù)大全.北京:北京航空航天大學(xué)出版社, 1994(2) 潘永雄.新編單片機(jī)原理與應(yīng)用M,西安:西安電子科技大學(xué)出版社,2003.2.(3) 彭小軍.用單片機(jī)實現(xiàn)電子時鐘J.新余高專學(xué)報,2004年4月第9卷第2期(4) 邱大雄.單片機(jī)基礎(chǔ).北京:原子能出版社,1992:53-58 (5) 彭小軍.用單片機(jī)實現(xiàn)電子時鐘J.新余高專學(xué)報,2004年4月第9卷第2期附錄:全程序代碼#include <REG52.H>#include <intrins.H>#include <math.h>/* 液晶引腳定義 */#define LCD_DB P0sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; /* 溫度傳感器引腳定義 */sbit DSA=P13; /* 時鐘芯片引腳定義 */sbit IO=P10;sbit SCLK=P11;sbit RST=P12;/* 獨(dú)立按鍵引腳定義 */sbit KeyOne = P32;sbit KeyThree = P33; sbit KeyTwo = P34;sbit KeyFour = P35;/* 第0位 第八位 位操作 */sbit ACC0=ACC0;sbit ACC7=ACC7;/* 報警指示引腳定義 */sbit Red = P36;sbit Green = P37;sbit Beep = P14;/* 時鐘芯片寄存器定義 */#define write_second 0x80#define write_minute 0x82#define write_hour 0x84#define write_day 0x86#define write_month 0x88#define write_week 0x8a#define write_year 0x8c/* 按鍵狀態(tài) */enum KEYSTARTKEYDOWN,KEYUP,;/* 按鍵鍵值 */enum KEYCONFIGKEYINIT,KEYYEAR,KEYMONTH,KEYDAY,KEYWEEK,KEYHOUR,KEYMINTH,KEYALARH,KEYALARM,;/* 邏輯變量定義 */unsigned char miao=0,shi=0,fen=0,ri=0,yue=0,nian=0,week=0;extern unsigned char miao,shi,fen,ri,yue,nian,week;unsigned int TempVal=0,AlarmFlag=0;unsigned char YearData=0,MonthData=0,DayData=0,WeekData=0,HourData=0,MinuteData=0,AlarmH=0,AlarmM=0;/* n*10微妙延時 */void delay_n10us(unsigned int n) unsigned int i=0; for(i=n;i>0;i-) _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); /* 寫命令函數(shù) */void LCD_write_command(unsigned char dat)delay_n10us(10);LCD_RS=0; LCD_RW=0; LCD_E=1; LCD_DB=dat;delay_n10us(10); LCD_E=0;delay_n10us(10); /* 寫數(shù)據(jù)函數(shù) */void LCD_write_data(unsigned char dat)delay_n10us(10);LCD_RS=1; LCD_RW=0; LCD_E=1; LCD_DB=dat;delay_n10us(10);LCD_E=0;delay_n10us(10);/* 寫字符函數(shù) X:015 Y:1,2 */void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)unsigned char address=0;if(y=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);LCD_write_data(dat);/* 寫一串字符 X:015 Y:1,2 */void LCD_disp_str(unsigned char x,unsigned char y,unsigned char *str)unsigned char address=0;if(y=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);while(*str!=0) LCD_write_data(*str); str+;/* 液晶初始化 */void LCD_init(void)delay_n10us(10);LCD_write_command(0x38);delay_n10us(10);LCD_write_command(0x0c);delay_n10us(10);LCD_write_command(0x06);delay_n10us(10);LCD_write_command(0x01);delay_n10us(100); /* 溫度傳感器最小單位延時 */void delayA(unsigned int Delay)unsigned int i=0,j=0;for(i=Delay;i>0;i-)for(j=120;j>0;j-);/* 溫度傳感器復(fù)位操作 */void dsresetA(void) unsigned int i=0; DSA=0; i=103; while(i>0)i-; DSA=1; i=4; while(i>0)i-;/* 讀溫度傳感器一位數(shù)據(jù)信息 */bit tmpreadbitA(void) unsigned int i=0; bit dat=0; DSA=0; i+; DSA=1; i+; i+; dat=DSA; i=8; while(i>0)i-; return (dat);/* 讀溫度傳感器八位數(shù)據(jù)信息 */unsigned char tmpreadA(void) unsigned char i=0,j=0,dat=0; for(i=1;i<=8;i+) j=tmpreadbitA(); dat=(j<<7)|(dat>>1); return(dat);/* 寫溫度傳感器八位數(shù)據(jù)信息 */void tmpwritebyteA(unsigned char dat) unsigned int i=0; unsigned char j=0; bit testb=0; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DSA=0; i+; i+; DSA=1; i=8; while(i>0)i-; else DSA=0; /write 0 i=8; while(i>0)i-; DSA=1; i+; i+; /* 溫度轉(zhuǎn)換 */void tmpchangeA(void) dsresetA(); delayA(1); tmpwritebyteA(0xcc); tmpwritebyteA(0x44); /* 讀取溫度寄存器轉(zhuǎn)換數(shù)據(jù) */unsigned int gettmpA(void) float tt=0; unsigned char a=0,b=0;unsigned int tempA=0; dsresetA(); delayA(1); tmpwritebyteA(0xcc); tmpwritebyteA(0xbe); a=tmpreadA(); b=tmpreadA(); tempA=b; tempA<<=8; tempA=tempA|a; tt=tempA*0.0625; tempA=tt*10+0.5; return tempA;/* 寫時鐘芯片八位數(shù)據(jù)信息 */void write_byte(unsigned char dat)unsigned char a=0;ACC=dat;RST=1;for(a=8;a>0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC>>1;/* 讀時鐘芯片八位數(shù)據(jù)信息 */unsigned char read_byte()unsigned char a=0;RST=1;for(a=8;a>0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC>>1;return (ACC);/* 在時鐘芯片指定位置寫指定數(shù)據(jù) */void write_1302(unsigned char add,unsigned char dat)RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;/* 讀取時鐘芯片指定地址的數(shù)據(jù)信息 */unsigned char read_1302(unsigned char add)unsigned char temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);/* 時鐘芯片數(shù)據(jù)轉(zhuǎn)換 */unsigned char BCD_Decimal(unsigned char bcd) unsigned char Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F);/* 時鐘芯片初始化操作 */void ds1302_init() RST=0;SCLK=0;write_1302(0x8e,0x00); write_1302(0x8e,0x80); /* 設(shè)置時鐘芯片參數(shù)信息 */void Set_RTC(unsigned char address,unsigned char temp) unsigned char tmp=0; tmp=temp/10;temp=temp%10;temp=temp+tmp*16;write_1302(0x8E,0X00);write_1302(address,temp&0x7f); write_1302(0x8E,0x80);/* 提取時鐘芯片時間信息 */void GetTime(void)miao = BCD_Decimal(read_1302(0x81);fen = BCD_Decimal(read_1302(0x83);shi = BCD_Decimal(read_1302(0x85);ri = BCD_Decimal(read_1302(0x87);yue = BCD_Decimal(read_1302(0x89);nian=BCD_Decimal(read_1302(0x8d);week=BCD_Decimal(read_1302(0x8b);/* 按鍵小抖動操作 */void DelayKey(void)unsigned char i=0,j=0,k=0;for(i=15;i>0;i-) for(k=81;k>0;k-); /* 讀取按鍵鍵值 */unsigned char KeyProcess(void)static unsigned char KeyVal=KEYINIT;if(KeyOne=KEYDOWN)DelayKey();if(KeyOne=KEYDOWN)while(KeyOne=KEYDOWN);LCD_disp_str(0,1," ");LCD_disp_str(0,2," ");KeyVal+;if(KeyVal>KEYALARM)KeyVal=KEYINIT;return KeyVal;/* 定時器配置 */void init() /定時器、計數(shù)器設(shè)置函數(shù)TMOD=0x11; /指定定時/計數(shù)器的工作方式為3TH0=0x3c; /定時器T0的高四位=0TL0=0xb0; /定時器T0的低四位=0EA=1; /系統(tǒng)允許有開放的中斷ET0=1; /允許T0中斷TR0=1; /開啟中斷,啟動定時器/* 外圍硬件初始化 */void HandInit(void)LCD_init();ds1302_init();init();Red = 1;Green = 0;/* 年月日信息顯示 */void show_Data(void)unsigned char dis_Data16=0;dis_Data0=2;dis_Data1=0;dis_Data2=(nian/10)+0x30;dis_Data3=(nian%10)+0x30;dis_Data4=-; dis_Data5=(yue/10)+0x30;dis_Data6=(yue%10)+0x30;dis_Data7=-;dis_Data8=(ri/10)+0x30;dis_Data9=(ri%10)+0x30;dis_Data10= ;dis_Data11=W;dis_Data12=126;dis_Data13=<dis_Data14=(week%10)+0x30;dis_Data15=>LCD_disp_str(0,1,dis_Data);/* 時分秒溫度信息顯示 */void Show_Time(void)unsigned char dis_Time16=0;dis_Time0= ;dis_Time1=(shi/10)+0x30;dis_Time2=(shi%10)+0x30;dis_Time3=:; dis_Time4=(fen/10)+0x30;dis_Time5=(fen%10)+0x30;dis_Time6=:;dis_Time7=(miao/10)+0x30;dis_Time8=(miao%10)+0x30;dis_Time9= ;dis_Time10=TempVal/100+0;dis_Time11=TempVal%100/10+0;dis_Time12=.;dis_Time13=TempVal%10+0;dis_Time14=223;dis_Time15=C;LCD_disp_str(0,2,dis_Time);/* 設(shè)置年參數(shù) */void Set_Year(void)YearData=read_1302(0x8D);YearData=(YearData>>4)*10+(YearData&0x0f);if(KeyTwo=KEYDOWN)DelayKey();if(KeyTwo=KEYDOWN)while(KeyTwo=KEYDOWN);if(YearData<=0)YearData=1;YearData-=1;Set_RTC(write_year,Yea

注意事項

本文(微機(jī)原理課程設(shè)計)為本站會員(陽***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!