大一零基礎搞藍橋杯單片機組,多天以來,感覺上手挺難的,將自己的學習筆記拿出來分享
首先是建工程,我用的單片機是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);
}
}
}
好了,這樣流水燈就做出來了
今天就到這吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254464.html
標籤:其他
上一篇:Qt專欄之Qt初識(五)
