單片機其實就是一塊類似計算機CPU的集成芯片,集成了若干組雙向IO口,定時器、比較器,在芯片內部還有保存程序書寫代碼的存儲器ROM和控制臨時代碼數據交換的RAM,光說不練怎麼行,那我們就現在做一個最簡單的實驗吧!
1、首先我們要使用到的兩款軟件就是,Proteus 7.9和Keil uv4這兩個軟件,一個是做電路仿真,而領一個是單片機軟件編寫時使用的,大家可以再網上搜索下載就可以了,建議大家在學習的時候還是先用和諧過的,以後工作了如果有需要再使用正版的。
2、安裝好兩款軟件後我們先來啟動Proteus 7.9,然後我來來添加幾個原件,按照下圖操作,首先我們添加單片機的仿真原型:
添加晶振:
添加電容:
添加電阻:
添加LED:
2、我們來繪製仿真電路,注意修改原件參數需要在對應的文字或者器件上雙擊,然後將要修改的內容填寫到文本框內就可以了:
3、電路圖繪製好後,我們打開Keil uv4,選擇Project->New uVision Project,新建一個工程:
跳出新建工程對話框,輸入工程名,點擊保存:
保存按鈕按下後,會跳出選擇單片機的選項,我們選擇Atmel公司的AT89C51,點擊OK
我們發現在左側工程列表內多了一個Target1,這就是我們剛剛新建的工程,點擊圓圈內的新建按鈕:
在新建的文本內輸入如下內容:
輸入好後,我們保存該代碼文本,在文件名條目內輸入文件名稱:
在工程條目上點擊右鍵,選擇Add Files to Group Source Group 1 將剛才新建的.c文件加入到工程中來:
4、我們來完善全部的代碼:
#include
#define uint8_t unsigned char
#define uint16_t unsigned int
sbit P0_0=P0^0; // 端口定義
sbit P0_1=P0^1; // 端口定義
sbit P0_2=P0^2; // 端口定義
sbit P0_3=P0^3; // 端口定義
void LEDDelayTime(uint16_t Time); // 函數聲明
void LEDDelayTime(uint16_t Time) // LED閃爍間隔時間
{
uint16_t i = 0;
uint16_t j = 0;
for(i=0;i
{
for(j=0;j<1000;j++)
{
;;
}
}
}
void LEDFlicker(void)// LED控制函數
{
P0_0 = 1; // 關閉D1
P0_1 = 1; // 關閉D2
P0_2 = 1; // 關閉D3
P0_3 = 1; // 關閉D4
LEDDelayTime(200); // 延遲
P0_0 = 0; // 打開D1
P0_1 = 0; // 打開D2
P0_2 = 0; // 打開D3
P0_3 = 0; // 打開D4
LEDDelayTime(200); // 延遲
}
void main(void)
{
while(1)
{
LEDFlicker();
}
}
5、我們來生成仿真用的HEX文件:右鍵點擊工程條目->選擇Output->輸入生成HEX文件名稱->選擇HEX文件保存目錄->勾選對號(代表可以生成HEX文件),點擊OK,然後點擊編譯工程,系統會生成HEX文件在你剛剛選擇的目錄:
6、我們將HEX文件裝入仿真電路,我們回到剛剛新建好的Proteus工程,雙擊CPU,然後跳出下圖,我們點擊紅色圓圈內的文件夾,將地址指向剛剛生成的HEX文件,然後點擊OK按鈕。
7、我們完成了以上操作,馬上就成功在望了,我們點擊下圖的運行按鈕來看一下效果吧,看看LED是不是按照我們剛剛設計程序運行了呢?呵呵 答案是肯定的:
LED是不是在一亮一滅的運行呢?呵呵 希望這篇入門實驗能給大家帶來樂趣,勾起你們求知的慾望,因為這只是開始,跟住我,一定你們會學到更多.......