大一零基礎搞藍橋杯單片機組,多天以來,感覺上手挺難的,將自己的學習筆記拿出來分享
首先是建工程,我用的單片機是IAP15F2K61S2型號的,建的工程是IA89C52的
新建一個文檔,保存名稱是main.c,接下來一個曾經困擾我的一個設置就是hex文件的生成,我們可以這樣設置
點上去後我開始寫第一個程序,點亮我的開發板上第一個led燈:
#include "reg52.h"
sbit led0 = P0^0;//定義led0,也就是P0的零號引腳
sbit led1 = P0^1;
int main(){
P2=0xa0;P0=0x00;
P2=0x80;P0=0xff;//初始化,暫時不講了,這裏意思是關掉蜂鳴器,P0口轉向led燈並全部關閉
led0=0;//點亮led0,這裏1爲關閉0爲開
while(1);
}
結果圖:
下面講一下16進制
也就是滿16進一,對應關係:
1 | 1 |
---|---|
2 | 2 |
3 | 3 |
4 | 4 |
… | … |
10 | A/a |
11 | B/b |
12 | C/c |
13 | D/d |
14 | E/e |
15 | F/f |
然後下面再寫一個前面4個燈一起亮的程序
我們知道0,1代表的是燈亮滅,那麼四位的二進制數字代表的就是四個燈,也就是爲什麼使用十六進制
有很多器件也是8個引腳,所以0X**十六進制可以廣泛應用於單片機
#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
int main(){
P2=0xa0;P0=0x00;
P2=0x80;P0=0xff;
P0=0xf0;//11110000對應的燈
while(1);
}
效果圖:
以此推的話P0=0x55就是偶數燈亮,0xaa就是奇數燈亮
接下來我們開始寫流水燈
先介紹一下延時的方法,要麼就是計數器,中斷程序,要麼就是延時函數
計數器和中斷程序後面寫,先講個最簡單的也就是延時函數,通過空循環,讓程序延時,原理就是處理每條語句cpu都需要一定時間處理,通過空循環那麼可以輕鬆延時
以下是計算循環次數的方法
1.先計算你單片機的振盪(時鐘)週期 T= 1/晶振(11.0592MHZ)
2.一次 i - -操作爲12T
3.忽略變量定義,上述延時函數共需時間:921z12T
4.帶入T:92112T*z 約爲 z ms
可以輕鬆計算。那麼實現延時流水燈的方法已經浮現了
以下是最初的程序
#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
sbit led5 = P0^5;
sbit led6 = P0^6;
sbit led7 = P0^7;
void delayms(unsigned int ms){
unsigned int i;
while(ms--){
for(i=0;i<628;i++);
}
}
int main(){
P2=0xa0;P0=0x00;
P2=0x80;P0=0xff;
while(1){
led7=1;
led0=0;
delayms(500);
led1=0;
led0=1;
delayms(500);
led2=0;
led1=1;
delayms(500);
led3=0;
led2=1;
delayms(500);
led4=0;
led3=1;
delayms(500);
led4=1;
led5=0;
delayms(500);
led5=1;
led6=0;
delayms(500);
led6=1;
led7=0;
delayms(500);
}
}
效果視頻就不播放了
但是這個程序是不是有點冗長呢?
那麼看這樣
led0顯示是P0狀態是11111110
led1顯示是P0狀態是11111101
led2顯示是P0狀態是11111011
…
那麼我們想到左移右移運算符
我們只需要讓1往左移i位是不是就可以瞭然後取反就是我們所要的情況
下面上碼!
#include "reg52.h"
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
sbit led5 = P0^5;
sbit led6 = P0^6;
sbit led7 = P0^7;
void delayms(unsigned int ms){
unsigned int i;
while(ms--){
for(i=0;i<628;i++);
}
}
int main(){
unsigned int i;
P2=0xa0;P0=0x00;
P2=0x80;P0=0xff;
while(1){
for(i=0;i<8;i++){
P0=~(1<<i);
delayms(500);
}
}
}
好了,這樣流水燈就做出來了
今天就到這吧