keilc教程-以及程序例子_第1頁
keilc教程-以及程序例子_第2頁
keilc教程-以及程序例子_第3頁
keilc教程-以及程序例子_第4頁
keilc教程-以及程序例子_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一章 KEIL 編譯器的安裝KEIL(利用評估版本(Evaluation)對源程序通過了便宜,也生成了HEX文件,但就是不能正常運行。這是為什么?使用者可以隨時從網上下載KEIL評估版本進行安裝,但是編譯長度小于2KB的目標代碼,并且代碼的起始(Start)地址自動設定為4000h,所以硬件組成也應予以支持。免費獲得的評估版還有別的限制,為了把所生成HEX文件下載到地址不是4000h的ROM中,就要利用hex2bin.exe實用程序把hex變成bin后下載到ROM,只有這樣才能正常運行。hex2bin.exe程序可以從網上下載。下載KEIL C51安裝程序后,雙擊Setup.exe文件約幾秒

2、后,在安裝向導窗口上可以選擇安裝、更新、搬移程序三個選項,如圖1 2 所示。圖1 1 安裝項目的選擇在默認 (Install Support for Additional Microcontroller Architectures) 的情況下,點擊Next>進入圖1 2 所示畫面。Eval Version (Evaluation Version) 評估版本;Full Version 正式版本;Quit 退出安裝;在安裝過程中,鍵入寫在軟盤上的序列號碼,選擇驅動器路徑,把軟盤插入驅動器繼續安裝。這時,在程序設置信息項目中出現“Last Name”項目,必須鍵入才能激活“Next”按鈕,比如

3、自己的“姓”或其他。在安裝盤上有序列號碼和與安裝有關的重要信息,因此有必要把安裝盤進行備份以保護重要的信息。若沒有序列號的情況下請選擇Eval Version (Evaluation Version) 評估版本進行安裝。圖1 2 正式版與評估版的選擇如果Keil uVision2的KEIL編譯器安裝結束,則會生成下列路徑和圖標:以最上層路徑為C:KEIL為假設予以羅列。安裝結束后若想運行,則雙擊屏幕上的Keil uVision2集成運行快捷按鈕。在Windows開始 -> 程序菜單上也會發現同樣的快捷按鈕。表1 1 文件夾的結構路 徑說 明C51ASM匯編SFR(Special Func

4、tion Register)定義和源程序樣本文件C51BIN編譯器的執行文件所位置C51EXAMPLES應用程序視圖文件C51RTX51實時操作系統Full文件,255個任務C51RTX_TINY實時操作系統Tiny文件,16個任務C51INCC語言中與8051有關的所有包含文件都在此處C51LIB庫、開始代碼、輸入/輸出源程序C51MON51監控目標硬件系統時所使用的HEX代碼生成文件UV2編譯器集成執行文件KEIL編譯器C51以ANSI(American National Standard Institute)規格為標準,所以使用C語言的開發人員用ANSI編寫程序就可以(使用Classic

5、 C語言也可以)。第二章Keil uVision2快速入門為了能讓使用者快速入門,先簡單介紹8051。8051單片機是一個具有40個引腳的長方形芯片,其中,有5V直流電源Vcc(因為內部有很多邏輯電路,應使用波紋系數小的直流電源)和電源地GND引腳。還有至少保持2個機器周期(一個機器周期=12個振蕩周期)為高電就復位的RESET引腳。端口P0是由開漏(用作I/O口時需要外部接上拉電阻)的驅動器構成的8位雙向I/O口,用作A0A7,D0D7;端口1是有內部上拉電阻的準雙向I/O口;端口2是有內部上拉電阻的準雙向I/O口,用作A8A15;端口3是有內部上拉電阻的準雙向I/O口,兼有串行通訊、外部中

6、斷、定時器、讀/寫的特殊功能;X1是振蕩放大器的反向輸入引腳,X2是反向輸出引腳,因此,使用晶體時把晶振并聯連接到X1和X2上,使用外部振蕩器時只連接X1。ALE/PROG(Address Latch Enable Output/Program Pulse Input)引腳的ALE,在訪問外部存儲器時用來鎖存低8位地址,而PROG在編程EPROM時用來進行脈沖輸入。PSEN(Program Strobe Enable)引腳信號作為訪問外部程序存儲器的讀選通,每個機器周期PSEN被激活2次,在ALE的下降沿將端口0的地址鎖存到外部鎖存器。EA/Vpp(Exteral Access Enable)

7、引腳連接到GND,則0FFFFH地址都訪問外部程序存儲器;連接到Vcc,則訪問內部程序存儲趨。Vpp是對8751編程電壓輸入端子,其電壓為12.7521V,具體值隨不同型號芯片而有所不同。雙擊Keil uVision2集成執行快捷按鈕,將彈出如圖2 1 所示的窗口。這是一個初始開發集成窗口。如果沒有做過任何項目,則窗口上什么也沒有。窗口的上端有10個下拉菜單。C51在管理程序時,采用所謂的項目(Project)文件來進行管理。項目把程序的環境甚至和編圖2 1 Keil uVision2的執行輯有關的全部信息都保存著,因此使用者可以把多個程序以項目為單位使用C51就可以了。由于C51 8051

8、KEIL編譯器變成集成環境,提供即使不知道匯編或不詳細知道8051也能編寫應用程序的環境。這一章的內容可以使工程人員快速并正確地熟悉編譯器環境。執行集成環境C51,如圖2 1所示,出現編輯、項目、輸出等3個大窗口和File,Edit,View,Project,Debug,Flash,Peripherals,Tools,SVCS,Window,Help等11個下拉菜單。 為了開始新的項目,選擇“Project à New Project ”選項后,出現如圖2 2 所示,然后選擇源程序所在路徑鍵入項目的名字并單擊“保存”按鈕。項目的名字會立即出現在集成環境的左上端。這個項目的名字最后為H

9、EX文件的名字。因此,項目的名字最好不超過8個英文字母,并且盡量不采用中文為好。在這里采用的項目名字為“First_Project”。圖2 2建立一個新工程接著選擇用8051開發的目標硬件系統的MPU選項,如圖2 3 所示。這個選項的是為了反映各個不同廠家生產的具有不同性能的8051而設計的,因此,只要正確選擇自己要開發的目標硬件系統的MPU就可以了。圖2 3目標硬件系統的CPU的選擇接著要進行“Option for Target”的設定,以修改跟編譯器有關的信息和跟目標系統有關的事項。如圖2 4 中,第一個選項“Target”設定目標系統的存儲器、輸出文件以及與源程序文件有關的事項。在菜單欄

10、中,選擇“Project/Opintion for Target”或者單擊工具欄中的“Option for Target”快捷按鈕就可以開始設定。在這里,要輸入系統的工作頻率、ROM與RAM的開始地址和大小以及存儲模式。首先,正確輸入目標系統的晶振的頻率值后選擇存儲模式。圖2 4 Option for Target為了讓8051的機器語言代碼下載到ROM,需要產生HEX代碼。圖2 5 的Option選項用來設定HEN文件的名字和要存放的文件夾(Select Folder for Object)。通常編譯、調試到下載ROM需要進行多次編譯才能完成。如果不選擇“Creat HEX File”,編譯

11、后不將產生HEX代碼(即使不發生錯誤)。這樣可以避免不必要地反復寫硬盤以保護硬盤的磁道和扇區。圖2 5 中右上端的“Name of Executable”表示HEX代碼文件的名字,通常和項目文件同名,也可以指定別的名字。編譯完成后生成HEX代碼文件,并存放在項目所在路徑中。因為8051的知識產權是Intel公司的,其命令語的處理也跟隨Intel的結構,所以KEIL只支持Intel HEX文件的形式。另外,為了在源代碼層次上進行調試,最好選擇“Debug Information”。為了便于編譯程序,最好選擇“Browser Information”。圖2 5 Option for Target

12、輸出文件設定在使用監控程序(Monitor)與目標硬件系統和KEIL編譯器集成環境接口,能夠監控變量的值和函數的執行。監控程序把監控程序ROM移植到目標硬件系統后運行。為了把監控程序和目標硬件系統接口,需要制作合適的硬件。監控程序的監控原理是,把監控程序裝入ROM區,把應用程序代碼裝入RAM以后,執行監控程序,則監控程序,調用應用程序執行。這樣,在RAM區域里代碼存儲區和數據存儲區共存。所以在使用監控程序調試應用程序的時候,需要在KEIL軟件中修改以下參數,如圖2 6 所示將原來的“CSEG AT 0 ”修改成 “CSEG AT 08000h”(不包括雙引號)。如果使用燒寫器直接調試程序,則使

13、用默認的“CSEG AT 0 ”即可。圖2 6 Startup.A51 文件修改同時將Option for Target 中BL51 Locate中的Code代碼段的設定修改成如圖2 7 所示圖2 7 Option for Target 代碼段的設定下面是可以驅動用于調試的仿真器和監控器的環境設定選項卡“Option for Target/Debug”,如圖2 8 所示。主要有2個單選項:左側有僅用軟件來仿真8051的軟件模擬仿真器單選項,右側有與目標硬件系統邊傳送信息邊進行調試的“KEIL Monitor 51 Driver”和“Triscend E5 Driver”單選項。由于KEIL 8

14、051集成開發環境綜合了調試(Debug)和Scope功能,所以稱之為dScope。監控器的功能是把監控器的ROM移植到目標硬件系統,用RS 232連接PC機和目標硬件系統,PC機的KEIL dScope和目標硬件系統互相傳送信息。可以下載代碼,也可以查看目標硬件系統的變量。 圖2 8 Option for Target/Debug第三章 應用程序的調試經過上面的軟件設置,下面將介紹一下,如何在KEIL軟件中進行應用程序的調試、編譯和連接。首先單擊“File”菜單,在下拉的菜單中單擊“New”選項,屏幕圖3 1 所示,此時可以看到編輯窗口的標題欄是空的,而光標在編輯窗口閃爍。這個時候就可以鍵入

15、應用程序了。圖3 1 含有空白的編輯窗口的屏幕單擊菜單條上的“File”菜單,在下拉菜單中選中“Save As”選項單擊,屏幕如圖3 2 所示。在“文件名”欄右側的編輯框中,鍵入欲使用的文件名稱,同時,必須鍵入正確的擴展名。注意:如果使用C語言編寫程序,則擴展名為(*.C);如果是用匯編語言編寫的程序,則擴展名為(*.asm)。然后,單擊“保存”按鈕。圖3 2 保存文件對話框然后需要將你已經保存好的文件添加到該項目中,具體步驟為:單擊“Source Group1”然后在單擊鼠標右鍵,屏幕如圖3 3 所示。圖3 3 把源程序添加到工程中接著單擊“Add File to Source Group1

16、 ”,此時屏幕將出現圖3 4 所示的畫面,然后選擇你剛剛設定的函數文件名。單擊“Add”按鈕后則可以編寫C語言程序了;圖3 4 選擇所需要的源程序現在編寫程序:#include<reg52.h> /包含文件#include<stdio.h> /包含文件void main(void)SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1;printf(“Hello I am KEIL 51.n”); /打印程序執行信息printf(“I will be your friend.n”); /打印程序執行信息while(1);/等價于HALT指令在輸入上述程序時

17、,KEIL51會自動識別關鍵字,并以不同顏色提示用戶加以注意,這樣可以減低錯誤率,有利于提高編程效率。程序輸入完畢后,屏幕如圖3 5 所示。圖3 5 程序輸入完成后的屏幕顯示編輯源程序之后,為了下載到目標硬件系統,要反復進行編譯和連接操作。這時使用的正是“Project”下拉菜單中的編譯命令。“Build Target”()表示只編譯和連接在項目窗口修改過的源程序,因此適合于多種源程序文件的情況。“Rebuild all Target File”()表示編譯和連接項目里登陸的所有源程序文件。相反,“Translate”()表示只編譯被激活的窗口中的源程序。另外,在編譯和連接過程中,可以利用“B

18、uild Stop”()停止正在進行中的編譯和連接,這個快捷按鈕是未被激活狀態時的畫面。在窗口底部可以看見KEIL項目文件(*.UV)的歷史記錄,列出最近使用過的文件,最多10個。除使用過的項目文件之外的歷史記錄,在“File”下拉菜單的下端可以到過去曾使用過的6個文件列表。在設定“Option for Target”的存儲器和“Settings”項后。進行編譯并執行dScope()。則出現如圖3 6 所示畫面。當然,在執行前裝如監控程序和目標硬件系統已接好電源,并且串行通信電纜也已連接到PC機的COM端口。然后監控程序和連接都正常,則在左下端狀態欄里顯示藍色的直方圖表,以表示正在裝入;如果通

19、信電纜沒有連接到目標硬件系統,則顯示如3 7 所示的信息。這時,要按目標硬件系統的復位按鈕重新執行監控程序之后,單擊“Try Again”或者“Settings”,重新確定設定值。特別是要重新確定通信速度是否為設定為9 600bps,目標硬件系統的時鐘頻率是否設定為11.0592Mhz。如果這樣還是連接不上,單擊“Stop Debugging”來退出bScope,重新進行上面的步驟。若還沒有任何進展,則只好從頭開始檢查一下目標硬件系統和軟件的設置,在特殊情況下,有時往往是ROM里的指令代碼有問題,或者串行通信有問題。如果一切連接都正常,則不出現錯誤窗口,在dScope環境中變成準備等待(Sta

20、ndby)狀態。圖3 6 正在運行的源程序圖3 7 錯誤信息提示根據上述編寫的程序,若需要在電腦上顯示編寫的結果是不是滿足自己的要求,可不設定是KEIL Monitor 51 Driver仿真;可以使用Use Simulator進行仿真。在執行dScope()后,再單擊()可以看見通過傳口發出去的信息內容,如圖3 8 所示。圖3 8 顯示程序所實現的結果3.1項目中含有多個文件通常,一個項目是由多個文件構成的,這是結構化語言的特色之一。對于一個大的項目,同時可以由多人編程、調試,最后再連接到總的項目中去,這就構成了工程項目。下面介紹多文件項目使用方法。為了便于說明,將C語言程序加上行號,列表如

21、下:1#include <reg52.h>/包含文件2#include <stdio.h>/包含文件3void main(void)/主程序45SCON=0x52;6TMOD=0x20;7TH1=0xf3;8TR1=1;9printf("Hello I am KEIL 51.n");/打印程序執行信息10printf("I will be your friend.n");/打印程序執行信息11while(1);/等價于HALT指令現在把58行程序改寫成如下函數:#include <reg52.h>/包含文件#inclu

22、de <stdio.h>/包含文件void serial_initial(void)SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1; 將上述函數保存為serial_initial.c。將剩余部分添加必要的兩行,保存為my_second.c,程序清單如下:#include <reg52.h>/包含文件#include <stdio.h>/包含文件extern serial_initial();void main(void)/主程序serial_initial();printf("Hello I am KEIL 51.n"

23、;);/打印程序執行信息printf("I will be your friend.n");/打印程序執行信息while(1);/等價于HALT指令現在創建第二個工程項目,步驟如下:(1)創建項目,工程名為my_second;(2)選擇所用單片機,Ateml公司的AT89s52;(3)添加文件,將已經編寫好的my_second.c和serial_initial.c添加到項目中去,完成后,(4)屏幕如圖3 1 1 所示;(5)編譯項目,生成機器代碼;(6)執行當前項目,實現軟件仿真;(7)查看程序的執行結果,觀察屏幕的輸出結果(與圖3 8 完全相同)。圖3 1 1 my_se

24、cond屏幕顯示圖由于Monitor-51開發系統比較簡單,占用了一些系統資源,有時給使用者帶來了不便。實際編程中常要解決一下兩個問題:(1)串行接口功能:串行通信是MCS-51單片機經常要用到的功能,而這里選用的MCS-51系列單片機AT89S52只有一個串行通信口,在與PC機相連接的仿真狀態時,串行口用于與PC機通信。若在應用程序中也用到串行口,就會發生沖突。解決方法一是用戶程序裝載完畢后,運行用戶程序,再斷開仿真板與PC機的串行通信線,這樣串口就可以歸用戶程序使用了,當然這時PC機就不能在線調試了;另外,還可以選用其它的帶兩個串行口的MCS-51系列芯片。(2)外部存儲空間:用戶程序越長

25、,占用的外部數據存儲空間將越大。解決的方法是對較長的程序進行分段調試。第四章 實驗程序4.1鍵盤顯示程序硬件環境:單片機最小系統、8279鍵盤顯示電路實現功能:通過按鍵輸入,在數碼管上顯示相應的數字C源程序:/*/C按鍵為清屏幕/D按鍵為一位一位清除/B按鍵為小數點/*#include< reg52.H >#include< ABSACC.H >#define COM XBYTE0x7001#define DAT XBYTE0x7000#define uchar unsigned charuchar code table = 0x3f,0x06,0x5b,0x4f,0x

26、66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar idata diss8=0,1,2,3,4,5,6,7;uchar keyin();uchar deky();/*void main(void) unsigned int ii; uchar i,k,n,m,j,s; for(ii=0;ii<20000;ii+); COM = 0xD1; /清楚總命令清除RAM COM = 0x00; /鍵盤、顯示方式、分頻 COM = 0x38;while(1) k=keyin(); switch(k) case 0x0c:

27、 COM = 0xD1; /清楚屏幕 i=0; continue; break; case 0x0d: i-; /按位清除可以一位一位的清除數碼管 COM = 0x90; COM = i+0x80; DAT = 0; continue; break; case 0x0b: i-; /小數點 COM = 0x90; COM = i+0x80; j = dissi; s = tablej; DAT = s | 0x80; i+; continue; break; default : break; if(i<8) COM = 0x90; COM = i+0x80; dissi = k; DAT

28、 =tablek; i+; else i=0; /*取鍵值函數*uchar keyin(void)uchar i,j,k;while( deky() = 0);COM = 0x40;j=DAT;i = j&0x07;i = i<<3;k = j&0x38;k = k>>3;i = i+k;return(i);uchar deky(void)uchar k;k= COM;return(k&0x0f);4.2 8255擴展I/O口實驗硬件環境:單片機最小系統、8279鍵盤顯示電路實現功能:通過按鍵輸入數字量,則在8255的三個輸出口分別輸出相應的數字

29、量C源程序:/*-*/*函數名稱:8255A程序調試/*/*版 本:V1.0/*完成時間:2005年8月9日/*-*/文件名:main.c#include "EXAMPLE.h"void main(void) unsigned char k,i,j; Init_8279(); while(1) k = Keyin(); switch(k) case 0x0a: /確定發送 j = buffer0 << 4; j = buffer1 | j; Init_8255_mode0(j); continue;break;case 0x0c: /清除屏幕Clear_LED(

30、);i = 0;continue;default:break; if(i<8) COM = 0x90; COM = i+0x80; bufferi = k; DAT =tablek; i+; else i=0; /文件名:Init_8279#include "reg52.H"#include "ABSACC.H"/鍵盤顯示8279的數據地址和命令地址#define COM XBYTE0x7001#define DAT XBYTE0x7000unsigned char code table = 0x3f,0x06,0x5b,0x4f,0x66,0x6

31、d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71;#define count 8 /緩存空間大小 unsigned char idata buffercount; /數據輸入緩存 unsigned char Deky();unsigned char Keyin();/*-初始化8279-*/void Init_8279( void ) COM = 0xD1; /清楚總命令清除RAM COM = 0x00; /鍵盤、顯示方式、分頻 COM = 0x38; /*-設置數碼管顯示-*/* ddr-為數據顯示的位置/* k -為取緩存數據的地址

32、 */*-*/void Dis_LED( unsigned char ddr , unsigned char k ) unsigned char i,j; COM = 0x90; /取高4位數據 COM = ddr + 0x80; i = bufferk; j = 0xf0 & i; j = j >> 4 ; DAT = tablej; COM = 0x90; /取低四位數據 COM = +ddr + 0x80; i = bufferk; j = 0x0f & i; DAT = tablej; /*-顯示小數點-*/void Dis_Point( unsigned

33、char ddr ) unsigned char i; COM = 0x90; COM = ddr + 0x80; i = bufferddr; DAT = tablei | 0x80; /*-清除屏幕-*/void Clear_LED( void ) COM = 0xD1; /*-取鍵值函數-*/unsigned char Deky(void)unsigned char k;k= COM;return(k&0x0f);unsigned char Keyin(void)unsigned char i,j,k;while( Deky() = 0); COM = 0x40;j=DAT;i

34、= j&0x07;i = i<<3;k = j&0x38;k = k>>3;i = i+k;return(i); /返回鍵值/*-*/文件名:Init_8255/*-*/*8255地址0x7800/*接口連線:/* 單片機 8255/* RW-> RW/* WR-> WR/* 138-Y7-> CS /* 573-A0A1-> A0A1/* RESET-> RESET/*-*/#include "reg52.H"#include "ABSACC.H"#define COM_PA XBY

35、TE0x7800 /PA口地址#define COM_PB XBYTE0x7801 /PB口地址#define COM_PC XBYTE0x7802 /PC口地址#define COM_Ctrl XBYTE0x7803 /控制字地址/*-*/* 8255方式控制字/* -D7-D6-D5-D4-D3-D2-D1-D0-/* |-|/* | D7:置位方式; 1有效 /* A | D6D5:方式選擇:00方式0;01方式1;10方式2/* 組| D4:端口A;1為輸入;0為輸出 /* | D3:端口C上半部; 1為輸入;0為輸出 /* |-|/*/* |-|/* | D2:方式選擇:0為方式0;

36、1為方式1; /* B | D1:端口B:1為輸入;0為輸出; /* 組| D0:端口C下半部分:1為輸入;0為輸出; /* |-|/*-*/*-*/*函數名稱:8255初始化;方式0/*/*函數功能 : 將Value的值,分別送到PA、PB、PC口/* /*返回值 : 無/*-*/void Init_8255_mode0( unsigned char Value ) COM_Ctrl = 0x80; /A、B、C口方式0輸出 COM_PA = Value; COM_PB = Value; COM_PC = Value;/*-*/4.3 D/A實驗硬件環境:單片機最小系統、8279鍵盤顯示電路

37、、0832電路實現功能:通過鍵盤輸入數字量,在0832的DAC TEST輸出相應的模擬量C源程序:/*/C按鍵為清屏幕/D按鍵為一位一位清除/F按鍵為確認鍵/*#include< reg52.H >#include< ABSACC.H >#define COM XBYTE0x7001#define DAT XBYTE0x7000#define DAC0832 XBYTE0x5800#define uchar unsigned charuchar code table = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f

38、,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar idata diss8=0,1,2,3,4,5,6,7;uchar keyin();uchar deky();/*void main(void) unsigned int ii; uchar i,k,n,m,j,s; for(ii=0;ii<20000;ii+); COM = 0xD1; COM = 0x00; COM = 0x38;while(1) k=keyin(); switch(k) case 0x0c: COM = 0xD1; i=0; continue; break; case 0x0d: i-; CO

39、M = 0x90; COM = i+0x80; DAT = 0; continue; break; case 0x0f: n = diss0 << 4; m = diss1 | n; do DAC0832 = m; while(keyin()=0); continue; break; default : break; if(i<8) COM = 0x90; COM = i+0x80; dissi = k; DAT =tablek; i+; else i=0; /*取鍵值函數*uchar keyin(void)uchar i,j,k;while( deky() = 0);COM

40、 = 0x40;j=DAT;i = j&0x07;i = i<<3;k = j&0x38;k = k>>3;i = i+k;return(i);/*uchar deky(void)uchar k;k= COM;return(k&0x0f);/*4.4 DS12887實驗硬件環境:單片機最小系統、8279鍵盤顯示電路實現功能:在數碼管上顯示小時、分鐘、秒以及年、月、日、星期 通過P1.1的切換顯示的內容;C源程序:/*/ 沒有用中斷;IRQ為空/ 接口連線:ALE->AS/ WR->R/W/ RD->DS/版本:V1.0/完成時間

41、:2005年7月24日/*#include< reg52.H >#include< ABSACC.H >#define COM XBYTE0x7001#define DAT XBYTE0x7000#define TM_second XBYTE0x6000 /秒#define AM_second XBYTE0x6001 /秒鬧#define TM_minute XBYTE0x6002 /分#define AM_minute XBYTE0x6003 /分鬧#define TM_hour XBYTE0x6004 /時#define AM_hour XBYTE0x6005 /時

42、鬧#define TM_week XBYTE0x6006 /周#define TM_day XBYTE0x6007 /日(2位數)#define TM_month XBYTE0x6008 /月(2位數)#define TM_year XBYTE0x6009 /年 (2位)#define REG_a XBYTE0x600a /寄存器A#define REG_b XBYTE0x600b#define REG_c XBYTE0x600c#define REG_d XBYTE0x600d#define RAM_114 XBYTE0x600e#define uchar unsigned charunsi

43、gned char idata time_buf7 = 0,1,2,3,4,5,6;sbit Time_chang_Year=P11; /控制時間和年月日切換 uchar code table = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void settime() /設置系統時間 uchar xdata i; i=REG_d; REG_a=0x70; REG_b=0xa2; /輸出為BCD碼 24小時進制 TM_second = time_buf0; TM_minute

44、= time_buf1; TM_hour = time_buf2; TM_week = time_buf3; TM_day = time_buf4; TM_month = time_buf5; TM_year = time_buf6; REG_b=0x22; /芯片更新正常進行 REG_a=0x20; i=REG_c; void readtime() /讀取系統時間 uchar xdata a; do a=REG_a; while(a&0x80)=0x80) ; /UIP為1時更新即將開始 time_buf0=TM_second; time_buf1=TM_minute; time_buf2=TM_hour; time_buf3=TM_week; time_buf4=TM_day; time_buf5=TM_month; time_buf6=TM_year; void start12887(void)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論