郭天祥的10天学会51单片机_第一节
在這里,把學習視頻時的筆記進行記錄,在學習視頻的過程中,遇到了一些視頻中沒有講解到的問題,對于這些問題的解決過程在這里進行記錄和總結。
CSDN的對齊格式有點詭異,在編輯器中注釋都是對齊的,在CSDN的文章中顯示的有一些不能對齊,為了讓大家復制粘貼代碼的時候能夠獲得對齊的注釋,在這里就對文章中沒有對齊的格式不予處理了。
實踐第一。
補充必要的理論知識,即缺什么補什么。
做工程項目積累經驗。(可在網絡上搜集題目,也可自己有什么想法大膽的去試驗)
數字電路中只有兩種電平:高和低
定義單片機為TTL電平:
??????????????????? 高 +5V????? 低 0V
RS232電平:計算機的串口
??????????????????????????? ?? 高 -12V (RS232電平高電平為負)??? 低+12V
所以計算機與單片機之間通訊時需要加電平轉換芯片max232(實驗板上左下角)。
單片機命名:STC(STC公司)89(系列)C(COMS)52(內部存儲空間大小:4K*2=8K)RC
40(所支持的晶振頻率是40MHZ)C(商業級,如I是工業級,區別是溫度適用范圍,還有軍品級)-PDIP(封裝格式,這里是雙列直插式,還有BGA等封裝)?
07(07年)21(21周)CV4336
總線(BUS)是計算機各部件之間傳送信息的公共通道。微機中有內部總線和外部總線兩類。內部總線是CPU內部之間的連線。外部總線是指CPU與其它部件之間的連線。 外部總線有三種: 數據總線DB(Data? Bus), 地址總線 AB(Address? Bus)和控制總線 CBControl?? Bus)。
sfr:特殊功能寄存器聲明
sfr16:sfr的16位數據聲明
sbit:特殊功能位聲明
bit:位變量聲明
例:sfr SCON = 0X98;
??? sfr16 T2 = 0xCC;
sbit OV = PSW^2; PSW^2表示PSW的第二位
C-51的包含的頭文件
通常有:reg51.h reg52.h math.h?? ctype.h?? stdio.h? stdlib.h? absacc.h
常用有:reg51.h reg52.h
????? (定義特殊功能寄存器和位寄存器);
?????? math.h? (定義常用數學運算);
單片機主要掌握以下幾點
最小系統能夠運行起來的必要條件。
?? 1.電源 2.晶振3.復位電路
對單片機任意IO口的隨意操作
?? 1.輸出控制電平高低2.輸入檢測電平高低。
定時器:重點掌握最常用的方式2
中斷:外部中斷、定時器中斷、串口中斷
串口通信:單片機之間、單片機與計算機間
方法:運用單片機就是控制單片機的IO口
在TX-1C型單片機實驗板原理圖中發光二極管是P2,圖中由單片機的P1口控制
原理圖中標號相同表示物理連接
發光二極管是由排阻組成,八個排阻,左邊是高電平,讓發光二極管亮陰極(右邊)要給低電平,因為排阻上有關單向導通的發光二極管;發光二極管點亮是3mA,左邊VCC是5伏,右邊是低電平是0伏,點亮發光二極管的電壓是1.7伏,所以電阻上的壓降是5-1.7=3.3伏,
所以電阻的阻值是3.3V/3mA=1.1K
電阻分為上拉電阻、下拉電阻和限流電阻
去耦電容的一個作用是穩壓,減緩電壓的波動
74HC573是鎖存器,鎖存器的DIOLA管腳接單片機的26管腳;在TX-1C型單片機實驗板原理圖中一個鎖存器控制發光二極管,另兩個控制數碼管
在課件74hc573中,見P1的真值表,OE是Out Enable輸出使能,上面有橫線的變量表示低電平有效,D表示輸入端,Q表示輸出端,當OE低電平時74hc573工作,真值表中L表示低,H表示高,X表示任意(或者高電平或者低電平),Z是數字電路中的高阻態(高阻態是介于高電平和低電平之間的狀態,既不是高電平也不是低電平,和其它元器件連接,其它元器件輸出高電平時高阻態跟著該元器件變成高電平,反之變成低電平),所以這里讓鎖存器74hc573工作,給鎖存器U3的OE低電平,鎖存器U3的輸入端接單片機的P1口,由單片機的P1口來控制,10管腳是接地,20管腳接電源;LE表示鎖存器的鎖存端,見真值表,LE為高電平,輸入端D是高電平輸出是高電平,輸入端D是低電平輸出是低電平,LE為低電平,D無論什么值,輸出???????? Q都是Q0,Q0是上一次輸出端Q的值,這里給LE即DIOLA高電平;加鎖存器是因為鎖存器的輸入端連接單片機的P1口,而P1口又連接AD0804(模數轉換器)的輸入端,如果不加鎖存器控制發光二極管,當控制AD轉換器時會導致發光二極管也亮
51單片機所有IO口上點后默認高電平
使用Keil軟件:
打開Keil軟件,點擊菜單欄上面的Project下面的New Project建立工程,彈出對話框,先新建一個文件夾,再保存工程
然后點擊菜單欄上面的File下面的New,新建一個文檔,文檔的后綴名是“.c”,再在左邊面板的工程名下右鍵選擇Add Files to Group ‘Source Group 1’,將該文檔加入該工程中即可
編譯時點擊編譯所有文件按鈕
生成Hex文件 :點擊全部編譯按鈕右邊的Option for target按鈕,Output欄下的Create HEX File選中打鉤,再編譯即可
Option for target按鈕的Target下面可以調節晶振頻率
STC_ISP軟件的使用:先選中MCU Type,這里是STC89C52,再Open File打開Hex文件,再選擇燒程序的Com口(計算機—>管理—>設備性能下面查詢,還可以修改)(我的計算機上是右鍵我的電腦,選擇屬性,彈出系統屬性對話框,選擇硬件頁,點擊設備管理器,彈出設備管理器對話框,點擊端口(COM和LPT)的十字符號,可以看見當前使用的串口號,前提是學習板的線已經插到串口上或USB口上),選擇Max Buad波特率,然后點擊Download下載程序開始,再按單片機上的啟動按鈕,必須先點擊軟件的下載然后再打開單片機
位操作點亮發光二極管:
 #include<reg52.h>
 sbit D1=P1^0;
 void main()
 {
 ?? ?D1=0;
 }
總線操作點亮發光二極管:
 #include<reg52.h>
 void main()
 {
 ?? ?P1=0xfd;
 }
 reg52.h文件定義了很多位寄存器,需要時也可以自己定義頭文件,并加進到源文件中
練習:
 3.點亮最后一個發光管:
 #include<reg52.h>
 void main()
 {
 ?? ?P1=0x7f;?? ??? ??? ??? ?//將單片機P1口的8個口由高到低分別賦值為01111111
 }
4.點亮1、3、5、7
 即10101010,AA
 #include<reg52.h>
 void main()
 {
 ?? ?P1=0xaa;
 }
5.點亮二、四、五、六
 即10100011,c5
 #include<reg52.h>
 void main()
 {
 ?? ?P1=0xc5;
 }
6.嘗試讓第一個發光管閃爍
 利用延時程序
 #include<reg52.h>
 void delay()
 {
 ?? ?int i,j;
 ?? ?for(i=0;i<100;i++)
 ?? ??? ?for(j=0;j<100;j++);
 }
 void main()
 {
 ?? ?while(1)
 ?? ?{
 ?? ??? ?P1=0xfe;
 ?? ??? ?delay();
 ?? ??? ?P1=0xff;
 ?? ??? ?delay();
 ?? ?}
 }
 方法2:
 #include<reg52.h> ??? ??? ??? ??? ?//52單片機頭文件
 sbit led1=P1^0; ? ??? ??? ??? ??? ?//單片機管腳位聲明
 void main()?? ??? ? ??? ? ?? ??? ??? ?//主函數
 {
 ?? ?unsigned int i; ?? ??? ??? ?//定義一個int型變量
 ?? ?while(1)
 ?? ?{
 ?? ??? ?i=50000; ? ?? ??? ??? ??? ?//變量賦初值為50000
 ?? ??? ?led1=0;?? ??? ??? ??? ??? ?//點亮燈
 ?? ??? ?while(i--); ? ? ?? ??? ?//延時
 ?? ??? ?i=50000;
 ?? ??? ?led1=1; ? ? ? ? ?? ??? ?//熄滅燈
 ?? ??? ?while(i--);
 ?? ?}
}
7.嘗試設計出流水燈程序
 #include<reg52.h>
 void delay()
 {
 ?? ?int i,j;
 ?? ?for(i=0;i<100;i++)
 ?? ??? ?for(j=0;j<200;j++);
 }
 void main()
 {
 ?? ?while(1)
 ?? ?{
 ?? ??? ?P1=0xfe;
 ?? ??? ?delay();
 ?? ??? ?P1=0xfd;
 ?? ??? ?delay();
 ?? ??? ?P1=0xfb;
 ?? ??? ?delay();
 ?? ??? ?P1=0xf7;
 ?? ??? ?delay();
 ?? ??? ?P1=0xef;
 ?? ??? ?delay();
 ?? ??? ?P1=0xdf;
 ?? ??? ?delay();
 ?? ??? ?P1=0xbf;
 ?? ??? ?delay();
 ?? ??? ?P1=0x7f;
 ?? ??? ?delay();
 ?? ?}
 }
 方法2:
 #include<reg52.h> ??? ??? ??? ?//52單片機頭文件
void main()?? ??? ? ? ?? ??? ??? ?//主函數
 {
 ?? ?unsigned int i; ?? ??? ?//定義一個int型變量
 ?? ?while(1)
 ?? ?{
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0xfe;?? ??? ??? ?//點亮第一個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0xfd;?? ??? ??? ?//點亮第二個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0xfb;?? ??? ??? ?//點亮第三個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0xf7;?? ??? ??? ?//點亮第四個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0xef;?? ??? ??? ?//點亮第五個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0xdf;?? ??? ??? ?//點亮第六個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0xbf;?? ??? ??? ?//點亮第七個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ??? ?i=50000; ? ??? ??? ?//變量賦初值為50000
 ?? ??? ?P1=0x7f;?? ??? ??? ?//點亮第八個燈
 ?? ??? ?while(i--); ? ? ?? ?//延時
 ?? ?}
 }
 ?
總結
以上是生活随笔為你收集整理的郭天祥的10天学会51单片机_第一节的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: AVOD-代码阅读理解系列(一)
- 下一篇: 学习创业计划的意义
