Keil软件的使用.docx

上传人:b****2 文档编号:3159352 上传时间:2023-05-05 格式:DOCX 页数:62 大小:977.76KB
下载 相关 举报
Keil软件的使用.docx_第1页
第1页 / 共62页
Keil软件的使用.docx_第2页
第2页 / 共62页
Keil软件的使用.docx_第3页
第3页 / 共62页
Keil软件的使用.docx_第4页
第4页 / 共62页
Keil软件的使用.docx_第5页
第5页 / 共62页
Keil软件的使用.docx_第6页
第6页 / 共62页
Keil软件的使用.docx_第7页
第7页 / 共62页
Keil软件的使用.docx_第8页
第8页 / 共62页
Keil软件的使用.docx_第9页
第9页 / 共62页
Keil软件的使用.docx_第10页
第10页 / 共62页
Keil软件的使用.docx_第11页
第11页 / 共62页
Keil软件的使用.docx_第12页
第12页 / 共62页
Keil软件的使用.docx_第13页
第13页 / 共62页
Keil软件的使用.docx_第14页
第14页 / 共62页
Keil软件的使用.docx_第15页
第15页 / 共62页
Keil软件的使用.docx_第16页
第16页 / 共62页
Keil软件的使用.docx_第17页
第17页 / 共62页
Keil软件的使用.docx_第18页
第18页 / 共62页
Keil软件的使用.docx_第19页
第19页 / 共62页
Keil软件的使用.docx_第20页
第20页 / 共62页
亲,该文档总共62页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Keil软件的使用.docx

《Keil软件的使用.docx》由会员分享,可在线阅读,更多相关《Keil软件的使用.docx(62页珍藏版)》请在冰点文库上搜索。

Keil软件的使用.docx

Keil软件的使用

Keil軟體的使用

隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用組合語言到逐漸使用高階語言開發,其中主要是以C語言為主,市場上幾種常見的單片機均有其C語言開發環境。

這裡以最為流行的80C51單片機為例來學習單片機的C語言程式設計技術。

大家都有C語言基礎,但是編單片機程式,大家還得找專門的書來學習一下。

這裡我們只介紹Keil這種工具軟體的用法。

學習一種程式設計語言,最重要的是建立一個練習環境,邊學邊練才能學好。

Keil軟體是目最流行開發80C51系列單片機的軟體,Keil提供了包括C編譯器、巨集組譯、連接器、庫管理和一個功能強大的模擬調試器等在內的完整開發方案,通過一個整合式開發環境(µVision)將這些部份組合在一起。

下面我以一個實驗舉一個例子,一步一步學習Keil軟體的使用。

首先我們看硬體原理圖:

很明顯,要點亮使發光二極體,必須使單片機的I/O口P1.0輸出低電平。

於是我們的任務就是編程式使P1.0輸出地電平。

 

1.使用Keil前必須先安裝。

安裝過程簡單,這裡不在敘述。

2.安裝好了Keil軟體以後,我們打開它。

打開以後介面如下:

3.我們先新建一個工程檔,點擊“Project->New Project…”功能表,如下圖,:

3.選擇工程檔要存放的路徑,輸入工程檔案名LED,最後按一下保存.

4.在彈出的對話方塊中選擇CPU廠商及型號

5.選擇好Atmel公司的AT89S52後,按一下確定

1.在接著出現的對話方塊中選擇“是”。

5.新建一個C51檔,按一下左上角的NewFile如下圖所示:

6.保存新建的文件,按一下SAVE如下圖:

2.在出現的對話方塊中輸入保存檔案名MAIN.C(注意尾碼名必須為.C),再按一下“保存”,如下圖;

7.保存好後把此檔加入到工程中方法如下:

用滑鼠在SourceGroup1上按一下右鍵,然後再按一下AddFilestoGroup‘SourceGroup1'如下圖:

8.選擇要加入的文件,找到MAIN.C後,按一下Add,然後按一下Close

9.在編輯方塊裡輸入如下代碼:

10.到此我們完成了工程項目的建立以及檔加入工程,現在我們開始編譯工程如下圖所示:

我們先按一下編譯,如果在錯誤與警告處看到0Error(s)表示編譯通過;

11.生成.hex燒寫文件,先按一下OptionsforTarget,如圖;

12.在下圖中,我們按一下Output,選中CreateHEXF。

再按一下“確定”。

13.打開資料夾‘實驗1’,查看是否生成了HEX檔。

如果沒有生成,在執行一遍步驟10到步驟12,直到生成。

以上是Keil軟體的基本應用,更多的高級應用請大家去查找資料.

以下將介紹的是如何將HEX檔下載到單片機裡面。

我們用的下載軟體是

Easy51Pro

Easy51Prov2.0軟體的使用

Easy51Prov2.0是單片機下載工具:

在我們的QQ群裡有這個軟體,大家可以下載來直接用,而不用安裝。

下面我給大家簡單的說一下用法:

1.硬體連接;必須滿足下面的每一個條件才能下載。

如圖

2.打開軟體;

3.檢測器件,注意右邊的資訊提示。

如果沒有檢測到器件,檢查硬體連接。

3.打開HEX文件。

先按一下“(自動)打開檔”。

在“實驗1”的資料夾裡找到檔LED.hex文件.

4.最後按一下“自動完成”,OK大功告成。

5.大功既然告成,就要看到效果。

現在我們在實驗板的左下角找到JK7,用導線連到P1.0上,LED2被點亮了把。

是不是很有成就感。

 

如果以上的實驗你覺得是小兒科,太簡單了。

那麼請關注以下的內容。

 

一.閃爍燈

[實驗任務]

在P1.0埠上接一個發光二極體L1,使L1在不停地一亮一滅,一亮一滅的時間間隔為0.2秒。

[硬體電路]

與上麵點亮小燈的連接完全相同。

[C語言來源程式]

#include

/*************************************************************************************

 第一行是一個"檔包含"處理。

  所謂"檔包含"是指一個檔將另外一個檔的內容全部包含進來,所以這裡的程式雖然只有4行,但C編譯器在處理的時候卻要處理幾十或幾百行。

這裡程式中包含REG51.h檔的目的是為了要使用P1這個符號,即通知C編譯器,程式中所寫的P1是指80C51單片機的P1埠而不是其它變數。

*****************************************************************************/

voiddelay02s(void)//延時0.2秒副程式

{

unsignedchari,j,k;//定義3個無符號字元型資料。

for(i=20;i>0;i--)//作迴圈延時

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

voidmain(void)//每一個C語言程式有且只有一個主函數,

{

while

(1)//迴圈條件永遠為真,以下程式一直執行下去。

{

P1_0=0;//I/O口P1.0輸出低電平,小燈被點亮。

delay02s();//延時經過0.2秒。

P1_0=1;//I/O口P1.0輸出高電平,小燈熄滅。

delay02s();//延時經過0.2秒。

}

}

二.廣告燈的左移右移

[實驗任務]

做廣告燈的左移右移,八個發光二極體分別接在單片機的P3.0-P3.7介面上,輸出“0”時,發光二極體亮,開始時P3.0→P3.1→P3.2→P3.3→┅→P3.7→P3.6→┅→P3.0亮,重複迴圈。

[硬體電路]

[DPY-1實驗板連接]

用8芯排線把JP-LSH連接到JP12上。

[C語言來源程式]

#include

unsignedchari;

unsignedchartemp;

unsignedchara,b;

voiddelay(void)//延時副程式

{

unsignedcharm,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

voidmain(void)//主程序

{

while

(1)//迴圈條件永遠為真,以下程式一直執行下去。

{

temp=0xfe;

P3=temp;//直接對I/O口P3賦值,使.P3.0輸出低點平。

delay();//延時

for(i=1;i<8;i++)//實現廣告燈的從右到左移動(以原理圖為准)

{

a=temp<

b=temp>>(8-i);

P3=a|b;

delay();

}

for(i=1;i<8;i++)//實現廣告燈的從左到右移動

{

a=temp>>i;

b=temp<<(8-i);

P3=a|b;

delay();

}

}

}

三.按鍵識別

[實驗任務]

通過按下一次按鍵,使廣告燈向左移動一位,直到最後一位,在向右移動。

[硬體電路]

(大家注意到這一個電路圖與上一個實驗的電路圖只多了一個按鍵和一個5.1K的電阻。

 

[DPY-1實驗板連接]

用8芯排線把JP-LSH連接到JP12上。

用一根導線把JK5接到P2.1上。

[實驗原理]

從圖中可以看出P2.1在按鍵沒有按下時接的是高電平,按鍵按下時接的就是低電平了。

所以我們只要判斷P2.1的電平就可以知道按鍵是否被按下了。

而在按鍵按下的過程中,由於抖動,將產生干擾,在按下的過程中,一旦有干擾過來,可能造成誤觸發過程,這並不是我們所想要的。

因此在按鍵按下的時候,要把我們手上的干擾信號以及按鍵的機械接觸等干擾信號給濾除掉,一般情況下,我們可以採用軟體濾波的方法去除這些干擾信號,一般情況下,一個按鍵按下的時候,總是在按下的時刻存在著一定的干擾信號,按下之後就基本上進入了穩定的狀態。

我們在程式設計時,從按鍵被識別按下之後,延時5ms以上,從而避開了干擾信號區域,我們再來檢測一次,看按鍵是否真得已經按下,若真得已經按下,這時肯定輸出為低電平,若這時檢測到的是高電平,證明剛才是由於干擾信號引起的誤觸發,CPU就認為是誤觸發信號而捨棄這次的按鍵識別過程。

[C語言來源程式]

#include

sbitBY1=P2^1;//定義按鍵的輸入端

unsignedcharcount;//按鍵計數,每按一下,count加1

unsignedchartemp;

unsignedchara,b;

voiddelay10ms(void)//延時程式

{

unsignedchari,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

key()//按鍵判斷程式

{

if(BY1==0)//判斷是否按下鍵盤

{

delay10ms();//延時,軟體去干擾

if(BY1==0)//確認按鍵按下

{

count++;//按鍵計數加1

if(count==8)//計8次重新計數

{count=0;}//將count清零

}

while(BY1==0);//按鍵鎖定,每按一次count只加1.

}

}

move()//廣告燈向左移動移動函數

{

a=temp<

b=temp>>(8-count);

P3=a|b;

}

main()

{

count=0;//初始華參數設置

temp=0xfe;

P3=0xff;

P3=temp;

while

(1)//永遠迴圈,掃描判斷按鍵是否按下

{

key();//調用按鍵識別函數

move();//調用廣告燈移動函數

}

}

四.數碼管動態顯示

[實驗任務]

P0埠接動態數碼管的字形碼筆段,P2埠接動態數碼管的數位選擇端,動態顯示“1234”字樣;

[硬體電路]

注意:

在P0口還有1K的排阻作為上拉電阻,在以後的電路原理圖中都是如此,請大家不要忽略了

 

[DPY-1實驗板連接]

用排線把JP-CODE連到JP8是,注意:

a接P0.0;b接P0.1;c接P0.3……

把JP-CS連到JP14上,注意:

4H接P2.4;3H接P2.5;2H接P2.6;1H接P2.7;

[實驗原理]

七段LED顯示器內部由七個條形發光二極體和一個小圓點發光二極體組成,根據各管的極管的接線形式,可分成共陰極型和共陽極型。

LED數碼管的a-dp七個發光二極體因以不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼

“0”3FH“1”06H“2”5BH“3”4FH

“4”66H“5”6DH“6”7DH“7”07H

“8”7FH“9”6FH“A”77H“b”7CH

“C”39H“d”5EH“E”79H“F”71H

由於顯示的數位0-9的字形碼沒有規律可循,只能採用查表的方式來完成我們所需的要求了。

這樣我們按著數位0-9的順序,把每個數位的筆段代碼按順序排好!

建立的表格如下所示:

TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

動態介面採用各數碼管迴圈輪流顯示的方法,當迴圈顯示頻率較高時,利用人眼的暫留特性,看不出閃爍顯示現象,這種顯示需要一個介面完成字形碼的輸出(字形選擇),另一介面完成各數碼管的輪流點亮(數位選擇)。

[C語言來源程式]

#include

codeunsignedcharseg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f};//顯示段碼

voidDelay(unsignedinttc)//延時程式

{

while(tc!

=0)//如果tc為0則終止延時

{

unsignedinti;//局部正整數變數i

for(i=0;i<100;i++);//執行400次將耗時1毫秒

tc--;//tc計數減一

}

}

voidLed(intdate)//顯示函數

{

P2=P2&0x7f;//P2.7輸出低電平,選通千位數

P0=seg7code[date/1000];//取出千位數,查表,輸出。

Delay(8);//延時

P2=P2|0xf0;//銷隱

P2=P2&0xbf;//P2.6輸出低電平,選通百位數

P0=seg7code[date%1000/100];//取出百位數,查表,輸出。

Delay(8);//延時

P2=P2|0xf0;//銷隱

P2=P2&0xdf;//P2.5輸出低電平,選通十位數

P0=seg7code[date%100/10];//取出十位數,查表,輸出。

Delay(8);//延時

P2=P2|0xf0;//銷隱

P2=P2&0xef;

P0=seg7code[date%10];//取出個位數,查表,輸出。

Delay(8);

P2=P2|0xf0;

}

main()

{

intdisplay_date=1234;//定義並賦值要顯示的資料

while

(1)

{

Led(display_date);//調用顯示函數顯示資料display_date

}

}

五.4×4矩陣式鍵盤識別

[實驗任務]

用AT89S51的並行口P3接4×4矩陣鍵盤,以P3.0-P3.3作輸入線,以P3.4-P3.7作輸出線;在每一個數碼管上顯示每個按鍵的“0-F”序號。

[硬體電路]

[DPY-1實驗板連接]

用排線把JP-CODE連到JP8是,注意:

a接P0.0;b接P0.1;c接P0.3……

把JP-CS連到JP14上,注意:

4H接P2.4;3H接P2.5;2H接P2.6;1H接P2.7;用排線把JP-KEY連到JP12上,注意1,2,3,4,5,6,7,8,分別對應P3.0,P3.1,P3.3,P3.4……

[實驗原理]

每個按鍵有它的行值和列值 ,行值和列值的組合就是識別這個按鍵的編碼。

矩陣的行線和列線分別通過兩平行介面和CPU通信。

鍵盤控制碼的任務是:

確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什麼;還要消除按鍵在閉合或斷開時的抖動。

兩個並行口中,一個輸出掃描碼,使按鍵逐行動態接地,另一個並行口輸入按鍵狀態,由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟體查表,查出該鍵的功能。

[C語言來源程式]

#include

unsignedcharcodeseg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsignedchark;

voiddelay10ms(void)//延時程式

{

unsignedchari,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

voidGetch()

{unsignedcharX,Y,Z;

P3=0xff;

P3=0x0f;//先對P3置數行掃描

if(P3!

=0x0f)//判斷是否有鍵按下

{delay10ms();//延時,軟體去干擾

if(P3!

=0x0f)//確認按鍵按下X=P3;

{

X=P3;//保存行掃描時有鍵按下時狀態

P3=0xf0;//列掃描

Y=P3;//保存列掃描時有鍵按下時狀態

Z=X|Y;//取出鍵值

switch(Z)//判斷鍵值(那一個鍵按下)

{

case0xee:

k=0;break;//對鍵值賦值

case0xde:

k=1;break;

case0xbe:

k=2;break;

case0x7e:

k=3;break;

case0xed:

k=4;break;

case0xdd:

k=5;break;

case0xbd:

k=6;break;

case0x7d:

k=7;break;

case0xeb:

k=8;break;

case0xdb:

k=9;break;

case0xbb:

k=10;break;

case0x7b:

k=11;break;

case0xe7:

k=12;break;

case0xd7:

k=13;break;

case0xb7:

k=14;break;

case0x77:

k=15;break;

}}}}//請注意寫程式時的格式規範,此處是為了節省紙張

voidmain(void)

{

while

(1)

{P3=0xff;

Getch();

P0=seg7code[k];//查表LED輸出

P2=0x0f;//輸出相同的四位元資料。

}

}

六.按鍵中斷識別

[實驗任務]

採用中斷技術,每按一下按鍵,計數器加1,並用LED顯示出來。

[硬體電路]

注意:

我們只用了4位數碼管中的兩位。

[DPY-1實驗板連接]

用排線把JP-CODE連到JP8上,注意:

a接P0.0;b接P0.1;c接P0.3……

把JP-CS連到JP14上,注意:

2H接P2.0;1H接P2.1;中斷按鍵已經接好。

[實驗原理]

以上的兩個關於按鍵識別的實驗的程式都是採用掃描的方式來實現的,CPU的利用率比較低,在即時性要求高比較高,要求快速回應的場合不太實用。

中斷方式可以滿足快速回應的要求。

關於中斷技術的具體內容,請大家參照教材。

[C語言來源程式]

#include

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};

unsignedchardispcount=0;//計數

sbitgewei=P2^0;//個位選通定義

sbitshiwei=P2^1;//十位選通定義

voidDelay(unsignedinttc)//延時程式

{while(tc!

=0)

{

unsignedinti;

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

tc--;

}

}

voidExtInt0()interrupt0//中斷服務程式

{

dispcount++;//每按一次中斷按鍵,計數加一

if(dispcount==100)//計數範圍0-99

{dispcount=0;}

}

voidLED()//LED顯示函數

{

if(dispcount>=10)//顯示兩位元數

{

shiwei=0;

P0=table[dispcount/10];

Delay(8);

shiwei=1;

gewei=0;

P0=table[dispcount%10];

Delay(5);

gewei=1;

}

else//顯示一位元數

{

shiwei=1;

gewei=0;

P0=table[dispcount];

Delay(8);

}

}

voidmain()

{TCON=0x01;//中斷設置

IE=0x81;

while

(1)//迴圈執行

{

LED();//只須調用顯示函數

}

}

七.計時器T0的應用---9.9秒計時設計

[實驗任務]

開始時,顯示“00”,第1次按下BY1後就開始計時。

第2次按BY1後,計時停止。

第3次按BY1後,計時歸零。

[硬體電路]

注意這一個電路圖與上一個的接法只是按鍵接的I/O口不一樣。

所以只要用導線把JK5接到P3.0上就可以了。

 

[DPY-1實驗板連接]

用排線把JP-CODE連到JP8上,注意:

a接P0.0;b接P0.1;c接P0.3……把JP-CS連到JP14,注意:

2H接P2.0;1H接P2.1;用導線把JK5接到P3.0上。

[C語言來源程式]

#include

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,};

unsignedcharsec;//定義計數值,每過1/10秒,sec加一

unsignedcharkeycnt=0;

unsignedinttcnt;//鍵值判斷

sbitgewei=P2^0;//個位選通定義

sbitshiwei=P2^1;//十位選通定義

voidDelay(unsignedinttc)//延時程式

{

while(tc!

=0)

{

unsignedinti;

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

tc--;

}

}

voidLED()//LED顯示函數

{

shiwei=0;

P0=table[sec/10];

Delay(8);

shiwei=1;

gewei=0;

P0=table[sec%10];

Delay(5);

gewei=1;

}

voidKEY()//按鍵掃描程式

{

unsignedchari,j;

if(P3_0==0)

{

for(i=20;i>0;i--)//延時去干擾

for(j=248;j>0;j--);

if(P3_0==0)

{

keycnt++;

switch(keycnt)//按下次數判斷

{

case1:

//第一次按下

TH0=0x06;//對TH0TL0賦值

TL0=0x06;

TR0=1;//開始定時

break;

case2:

//第二次按下

TR0=0;//定時結束

break;

case3:

//第三次按下

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2