版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)聽課筆記1-8課-金沙灘工作室2014年更新Less on 1:1、用公司用的單片機(jī)/視頻用的單片機(jī)書是用來查的。單片機(jī)方面不怎么需要軟件仿真KEIL軟件安裝 (keil c51) 30分鐘-35分鐘雙擊7 next77 next7默認(rèn)路徑7 next71,2,3 , email格式7 next7自動(dòng)安裝7去掉三個(gè)選項(xiàng)的v7finish。桌面上出現(xiàn)KEIL快捷方式。文字大小,文字顏色的設(shè)定:即可。edit 7 configuration 7 colour&font 7: editor c files 7只需要修改text, textselectio n,nu mber,keywo
2、rd,stri ng下載軟件 stc-isp-v480.se win7系統(tǒng)第一次打開,右鍵,以管理員身份運(yùn)行一次。三傻大鬧好萊塢:追求卓越,成功就會(huì)在不經(jīng)意間追上你。Lesson2:1、51單片機(jī):兼容intel的MCS-51體系架構(gòu)的一系列單片機(jī)STC89C52RC-學(xué)習(xí)板上的第一個(gè)單片機(jī)。單片機(jī)最小系統(tǒng):電源電路、 晶振電路(20PF起振電容,幫助晶振起振,并維持震蕩信號(hào)的穩(wěn)定)復(fù)位電路(0.1uF, 18R,4.7K)。單片機(jī)復(fù)位一般用三種:上電復(fù)位,手動(dòng)復(fù)位,程序自動(dòng)復(fù)位。單片機(jī)原理圖引腳位置與封裝圖可以不一樣。貼片發(fā)光二極管限流電阻的選用。sfr P0 = 0X80,告訴我們編程軟件
3、P0在0X80的位置上,查手冊(cè)可得。8、打開 KEIL軟件7 Project 7 new project7選擇路徑7寫工程名,不需寫擴(kuò)展名7舊:選擇單片機(jī)型號(hào)7 NXP7 P89V517 cop y,7否7新建文件file 7 new7 保存7給文件起名Ied.c7新:選擇單片機(jī)型號(hào)in tel 7隨便一個(gè) 7 cop y,7是7新建文件 file 7 new7保存7給文件起名led.c#include<reg52.h>及函數(shù)名后不需要加分號(hào)。10、單片機(jī)編程是根據(jù)硬件編程,不同的板子,程序可能不一樣。11、target 1 右邊的 target options 7 target
4、711.0592M, out put 7 creat hex 選項(xiàng)框選中,點(diǎn)擊ok,編譯,連接就可生成hex文件。12 、 hex 文件大小的看法:在編譯連接之后, build output 對(duì)話框里看。Program size: data = 9.0 xdata = 0 code = 29 表示:其中data,xdata指RAM,兩項(xiàng)加起來就是內(nèi)存的值:0+9=9字節(jié)。code 指占程序存儲(chǔ)空間的值 :29 個(gè)字節(jié)。13、點(diǎn)亮小燈的程序# include<reg52.h>sbit LED = PO 9sbit ADDRO = PUO;sbit ADDR1 = P "1;
5、sbit ADDR2 = P 1人2;sbit ADDR3 = P13;sbit ENLED = P "4;void main()ENLED = O; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDRO = O;LED = O;while(1);14、安裝usb-串口的驅(qū)動(dòng);查找COM 口。我的電腦7設(shè)備管理器。選擇單片機(jī)型號(hào)7打開 hex 文件7選擇使用的 COM 口7波特率默認(rèn)7下次冷啟動(dòng)選擇:與下載無關(guān)7(STC89C52R(冷啟動(dòng)單片機(jī))先點(diǎn)下載后上電。作業(yè):3了解KEIL軟件的基本用法和單片機(jī)編程流程,能夠獨(dú)立完成編程下載等基本操作。Lesson 3
6、:硬件基礎(chǔ)學(xué)習(xí)1、電磁干擾EMI, 電磁兼容EMC能用一個(gè)字節(jié)的變量能完成的工作,不要用兩個(gè)字節(jié)變量。低頻濾波電容:去除電源低頻紋波,穩(wěn)定電源作用。鋁電解電容、鉭電容(有色標(biāo)的一端為正極,性能好)、陶瓷電容。高頻濾波電容:對(duì)高頻短路,可濾去高頻干擾。(104 = O.luF)電容選取兩個(gè)主要參數(shù):耐壓值、容值。三極管的功能:開關(guān)控制(100Ib>Ie,則工作在飽和狀態(tài))、信號(hào)放大、電平轉(zhuǎn)換。三八譯碼器:74HC138地址輸入端c/b/a及E3使能端接4.7K電阻上拉。AY0BY 1CY 2Y 3Y4Y5E2Y 6E3Y 7U?107 4HC 13 8ADD R0 1A DD R2 315
7、14T3177、雙向緩沖器:74HC245 DIR為高,B;輸入端接4.7K上拉電阻。8、保存過后的c文件,文件名旁邊沒有。A0B0.A 1B 1.A2B 2,A3B 3.A4B4.A5B5.A 6B 6.A 7B 7E,D IRU ?13974 HC 24 52TT18TTF作業(yè):4、能夠獨(dú)立點(diǎn)亮開發(fā)板上的每一個(gè)小燈,并且可以實(shí)現(xiàn)小燈亮和滅以及閃爍。Lesson 4 C語言基礎(chǔ)以及流水燈實(shí)現(xiàn) 1、進(jìn)制 2、C語言變量類型及范圍Un sig ned char0-255sig ned char -128127Un sig ned int 0-65535 sig ned int -32768-32
8、767Un sig ned long 0-4294967275signed long -2147483648-2147483647Float -3.4 X 10-38 3.4 X 10-38 double : C51 里等同于 floatC語言基本運(yùn)算符/ %(取余)+for語句的用法(作延時(shí),作循環(huán)運(yùn)算)、for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3)(需要執(zhí)行的語句)執(zhí)行順序:1,2,4,3, 2,4,3, 2,4,3二、for(i= 0 ; i<30000; i+);是用法一的特殊情況,相當(dāng)于執(zhí)行語句為不執(zhí)行。三、for(;)相當(dāng)于 while(1)while語句的用法、while(條
9、件表達(dá)式)循環(huán)語句;函數(shù)名的類型,就是return值的類型。Void main() void表示函數(shù)名,無返回值,int main (),返回值為整型。變量在使用之前,先定義。8、51單片機(jī)延時(shí)常用方法:非精確延時(shí):for(I = 0 ; i<100; i+);I = 100; while(i-);精確延時(shí):用定時(shí)器定時(shí)利用庫函數(shù)-nop-();肉眼分辨率:20ms 一下看不到閃爍;50ms間隔能清楚看見亮滅。10、軟件仿真:先設(shè)置 target options target11.0592M,debugs選中 use simulatorok點(diǎn)擊 start debug session 圖
10、標(biāo),進(jìn)入仿真界面。設(shè)置斷點(diǎn):雙擊,若設(shè)置不了target optionsC51 level,設(shè)置優(yōu)化登記一般選&RST復(fù)位run全速運(yùn)行。然后看時(shí)間情況。(50分鐘附近)11、程序一:小燈的閃爍(視頻位置與筆記順序不一致)# in clude<reg52.h>sbit LED = PO 9sbit ADDR1 = P 1人1;sbit ADDR2 = P 1人2;sbit ADDR3 = P13;sbit ENLED = P "4;void main()unsigned int i = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1
11、 = 1; ADDR0 = 0;LED = 0;for(;)/while(1)LED = 0;for(i = 0; i<20000; i+);LED = 1;for(i = 0; i<20000; i+);12 、程序二:流水燈程序 ( 法一 ) # include<reg52.h> sbit ADDR0 = PUO;sbit ADDR1 = P "1;sbit ADDR2 = P 1人2;sbit ADDR3 = P "3;sbit ENLED = P "4;void main()unsigned int i = O;ENLED = 0;
12、 ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;while(1)P0 = 0XFE;for(i = 0; i<30000; i+);P0 = 0XFD;for(i = 0; i<30000; i+);P0 = 0XFB;for(i = 0; i<30000; i+);P0 = 0XF7;for(i = 0; i<30000; i+);P0 = 0XEF;for(i = 0; i<30000; i+);P0 = 0XDF;for(i = 0; i<30000; i+);P0 = 0XBF;for(i = 0; i<3
13、0000; i+);P0 = 0X7F;for(i = 0; i<30000; i+);13 、移位指令( <<>>)、取反指令 ()。14 、程序二:流水燈程序 (法二 ) # include<reg52.h> sbit ADDRO = P "0;sbit ADDR1 = P "1;sbit ADDR2 = P "2;sbit ENLED = P "4;sbit ADDR3 = P13;void mai n()un sig ned char ent = 0;un sig ned int i = 0;ENLED
14、= 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;while(1)PO = (0x01<<cnt+);for(i = 0; i<30000; i+);if(c nt >= 8)cnt = 0;作業(yè):4、獨(dú)立完成流水燈右移操作。5、獨(dú)立完成左移到頭,接著右移,右移到頭,接著左移的程序。Lesson 5定時(shí)器和數(shù)碼管基礎(chǔ)按位異或:A1、邏輯運(yùn)算 邏輯與:&& 邏輯或:II 邏輯非:!按位與:&按位或:I按位取反:0b11001100 |0b11110000 等于 0b11111100 2、數(shù)字電路常用符號(hào)3
15、、機(jī)器周期是定時(shí)器的計(jì)數(shù)周期,打開定時(shí)器后,每經(jīng)過一個(gè)機(jī)器周期,定時(shí)器“存儲(chǔ)寄存器”的值加8位定時(shí)器存儲(chǔ)的值的范圍:0-22516位定時(shí)器0-655354、標(biāo)準(zhǔn)51里有兩個(gè)定時(shí)器:T0和 T1。5、定時(shí)器/計(jì)數(shù)器模式示意圖。5、使用定時(shí)器的方法、設(shè)置TMOD (模式寄存器 M1、M0位,常用模式1、模式2自動(dòng)重裝),配置好工作模式例如:TMOD = 1;二、設(shè)計(jì)數(shù)寄存器 THO、TLO 的初值。例如:THO = 0XB8; TLO = 0X00定時(shí) 20ms TH0 = 0XB8; TL0 = 0X00;定時(shí) 1ms三、設(shè)TCON控制寄存器 TF位,TR位),通過TR0置1來讓定時(shí)器開始計(jì)數(shù)
16、例如:TR0 = 1;四、判斷TCON寄存器的TF0位,檢測(cè)定時(shí)器的溢出情況。計(jì)算計(jì)數(shù)寄存器初值的方法:12*(65536-X)/11059200 = 20ms 6、1s閃爍一次的小燈程序 #in clude<reg52.h> sbit LED = P0 9 sbit ADDR0 = P10;sbit ADDR1 = P "1;sbit ADDR2 = P "2;sbit ADDR3 = P "3;sbit ENLED = P "4;void mai n()un sig ned char ent = 0;ENLED = 0; ADDR3 =
17、1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;TMOD = 0x0刑TH0 = 0Xb8;TL0 = 0X00;while(1)f(TF0 = 1)1if(cnt >= 50)/定時(shí)20msent = 0;LED = -LED;7、數(shù)碼管分:位、段(A/B/C/D/E/F/G/DOP )兩個(gè)概念8、第一個(gè)數(shù)碼管顯示“ 1 ”的程序#in clude<reg52.h>sbit ADDR0 = P 1人0;sbit ADDR1 = P 1人1;sbit ADDR2 = P "2;sbit ADDR3 = P13;sbit ENLED = P &qu
18、ot;4;void mai n()un sig ned char ent = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;P0 = 0XF9;while(1);9、1位數(shù)碼管從1-F(每隔1秒加1)#include<reg52.h>sbit ADDRO = P 1人0;sbit ADDR1 = P 1人1;sbit ADDR2 = P 1人2;sbit ADDR3 =卩1人3;sbit ENLED = P 1人4;unsigned char code ledchar = 0xc0,0xf9,0xa4,0xb0,0x9
19、9,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e;void main()unsigned char cnt = 0;unsigned char sec = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;TMOD = 1;TH0 = 0XB8;TL0 = 0X00;TR0 = 1;while(1)if(TF0 = 1)TF0 = 0;TH0 = 0XB8;TL0 = 0X00;cnt+;if(cnt>= 50)cnt = 0;P0 = ledcharsec;s
20、ec+;if(sec>= 16)sec = 0;作業(yè):1、熟練掌握單片機(jī)定時(shí)器的原理和應(yīng)用方法2、通過研究定時(shí)器模式 1的示意圖,自己打開 STC89C52R(手冊(cè)的定時(shí)器部分,獨(dú)立研究模式0,模式1,模式2,和模式 3 的示意圖,鍛煉研究示意圖的能力。3、使用定時(shí)器實(shí)現(xiàn)延時(shí),完成左右移動(dòng)的流水燈程序。4、了解數(shù)碼管的原理,掌握數(shù)碼管的真值表計(jì)算方法。5、 編程實(shí)現(xiàn)數(shù)碼管靜態(tài)顯示秒表的倒計(jì)時(shí)。Lesson 6 中斷與數(shù)碼管動(dòng)態(tài)顯示1 、 if 語句的用法1) if (條件表達(dá)式 )語句 1; 只判斷一次,只執(zhí)行一次,然后執(zhí)行下面的程序。2) if (條件表達(dá)式 )語句 1;else語句
21、2;(3) if( 表達(dá)式1)語句 1;elseif(表達(dá)式1)語句1;elseif(表達(dá)式1)語句1;else語句 n一旦有一個(gè)為真,執(zhí)行完相應(yīng)語句后,跳出 if 語句。2、switch 語句的用法法一:Switch(表達(dá)式)法二:Case 常量表達(dá)式Case 常量表達(dá)式Case 常量表達(dá)式1:語句2:語句n語句Default: 語句 n+1;Switch(表達(dá)式)Case 常量表達(dá)式1:語句Case 常量表達(dá)式2:語句Case 常量表達(dá)式n語句Default: 語句 n+1;1;2;n;1;2;n;break;break;break;break;3、動(dòng)態(tài)顯示 利用人肉眼的視覺暫留現(xiàn)象(余暉
22、效應(yīng))10ms 以內(nèi)必須重新刷新同一個(gè)數(shù)碼管。ENLED ADDR3 選中 ADDR2 ADDR1 ADDR 0 切換4、6 位顯示的秒表程序(if 語句)#include<reg52.h> sbit ADDRO = PUO; sbit ADDR1 = P "1; sbit ADDR2 = P 1人2; sbit ADDR3 = P13;sbit ENLED = P "4;unsigned char code ledchar = OxcO,Oxf9,Oxa4,OxbO,Ox99,Ox92,Ox82,Oxf8,Ox8O,Ox9O,Ox88,Ox83,0xc6,0x
23、a1,0x86,0x8e;unsigned char ledbuff6 = 0xff,0xff,0xff,0xff,0xff,0xff; / 初始值 0XFF void main()unsigned int cnt = 0;unsigned long sec = 0;unsigned char i = 0;ENLED = 0;ADDR3 = 1;TMOD = 0X01;TH0 = 0XFC;TL0 = 0X67;TR0 = 1;while(1)if(TF0 = 1)TF0 = 0;TH0 = 0XFC;TL0 = 0X67;cnt+;if(cnt>=1000)cnt = 0;sec+;l
24、edbuff0 = ledcharsec%10;ledbuff1 = ledcharsec/10%10;ledbuff2 = ledcharsec/100%10;ledbuff3 = ledcharsec/1000%10;ledbuff4 = ledcharsec/10000%10;ledbuff5 = ledcharsec/100000%10;/if(i = 0) ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i+; P0 = ledbuff0; else if (i = 1)ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i+; P0 = ledbuf
25、f1; else if (i = 2)ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i+; P0 = ledbuff2;else if (i = 3)ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i+; P0 = ledbuff3;else if (i = 4)ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i+; P0 = ledbuff4;else if (i = 5)ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i = 0; P0 = ledbuff5;5、6 位顯示的秒表程序( switch 語句)#incl
26、ude<reg52.h> sbit ADDRO = P "0; sbit ADDR1 = P "1; sbit ADDR2 = P "2;sbit ADDR3 = P "3;sbit ENLED = P "4;unsigned char code ledchar = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;unsigned char ledbuff6 = 0xff,0xff,0xff,0xff,0xff,0xff;
27、 / 初始值 0XFF void main()unsigned int cnt = 0;unsigned long sec = 0;unsigned char i = 0;ENLED = 0;ADDR3 = 1;TMOD = 0X01;TH0 = 0XFC;TLO = 0X67;TRO = 1;while(1)if(TFO = 1)TFO = 0;THO = OXFC;TLO = 0X67; cn t+;if(c nt>=1000) cnt = 0;sec+;ledbuffO = ledcharsec%10;ledbuff1 = ledcharsec/10%10;ledbuff2 = l
28、edcharsec/100%10;ledbuff3 = ledcharsec/1000%10;ledbuff4 = ledcharsec/10000%10;ledbuff5 = ledcharsec/100000%10;/PO switch(i) case 0:ADDR2 = 0; ADDR1 case 1:ADDR2 = 0; ADDR1 case 2:ADDR2 = 0; ADDR1 case 3:ADDR2 = 0; ADDR1 case 4:ADDR2 = 1; ADDR1 case 5:ADDR2 = 1; ADDR1 default:break;6、使用中斷實(shí)現(xiàn)秒表程序(中斷)#i
29、n clude<reg52.h>=OXFF;/消除鬼影操作。0; ADDRO = 0; i+; PO = ledbuffO; break; 0; ADDRO = 1; i+; PO = ledbuff1;break;1; ADDRO = 0; i+; PO = ledbuff2;break;1; ADDRO = 1; i+; PO = ledbuff3;break; 0; ADDRO = 0; i+; PO = ledbuff4;break;0; ADDRO = 1; i = 0; PO = ledbuff5;break;sbit ADDRO = P 1人0; sbit ADDR1
30、 = P 1人1;sbit ADDR2 = P 1人2;sbit ADDR3 = P 1人3;sbit ENLED = P "4;un sig ned char code LedChar=OxCO, 0xF9, 0xA4, OxBO, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E; un sig ned char LedBuff6=0xFF, OxFF, OxFF, OxFF, OxFF, OxFF;unsigned int cnt = 0; void main()unsigned long
31、 sec = 0;ENLED = 0;ADDR3 = 1;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x67;TR0 = 1;EA = 1;ET0 = 1;while(1)if(cnt >= 1000)cnt = 0;sec+;LedBuff0 = LedCharsec%10;LedBuff1 = LedCharsec/10%10;LedBuff2 = LedCharsec/100%10;LedBuff3 = LedCharsec/1000%10;LedBuff4 = LedCharsec/10000%10;LedBuff5 = LedCharsec/100000%10;
32、 unsigned char i = 0;void InterruptTimer0() interrupt 1 TH0 = 0xFC; TL0 = 0x67; cnt+;P0 = 0xFF;/ 消隱 switch(i) case 0: ADDR2=0; ADDR1=0; ADDR0=0; i+; P0=LedBuff0;break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i+; P0=LedBuff1;break; case 2: ADDR2=0; ADDR1=1; ADDR0=0; i+; P0=LedBuff2;break; case 3: ADDR2=0;
33、 ADDR1=1; ADDR0=1; i+; P0=LedBuff3;break; case 4: ADDR2=1; ADDR1=0; ADDR0=0; i+; P0=LedBuff4;break; case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff5;break; default:break;1時(shí),顯示抖動(dòng)怎么解決?7、數(shù)碼管不亮的地方發(fā)暗,數(shù)碼管鬼影怎么解決?秒表加消除鬼影:見程序二上面黃色部分。顯示抖動(dòng):使用中斷消除。9、中斷58分鐘后。進(jìn)入中斷條件:第一打開中斷、符合中斷條件、中斷入口正確。8、中斷優(yōu)先級(jí)(固有優(yōu)先級(jí))中斷函數(shù)編號(hào)中斷名
34、稱中斷標(biāo)志位中斷使能位中斷向量地址默認(rèn)優(yōu)先級(jí)0外部中斷IE0EX00x00031(最咼)1T0TF0ET00X000B22外部中斷IE1EX10x001333T1TF1ET10X001B44UARTTI/RIES0x002355T2TF2EXF2ET20X002B6C,降低程序的清晰度-每個(gè)函數(shù)執(zhí)行,都可能改變?nèi)肿兞康闹怠?0、11、中斷向量地址:決定中斷入口號(hào)x*8 +3 =中斷向量地址。中斷使能寄存器:IE可位尋址。關(guān)注:EA、ET0位。定時(shí)器0:中斷入口號(hào)1;定時(shí)器1,中斷入口號(hào)3。作業(yè):3、徹底理解中斷的原理和應(yīng)用方法,關(guān)閉教程自己把本章節(jié)程序編寫完畢,下載實(shí)踐。4、嘗試修改程序,只
35、顯示有效位5、嘗試寫一個(gè)從999999開始倒計(jì)時(shí)的程序,通過改用定時(shí)器T1的中斷來完成。Lesson 7變量進(jìn)階與LED點(diǎn)陣(點(diǎn)陣部分需要完善 1、變量的作用域(1)局部變量:只在函數(shù)內(nèi)部使用的變量(2) 全局變量:2、全局變量的副作用:A,降低函數(shù)的獨(dú)立性修改,對(duì)任何一個(gè)函數(shù)的修改,都可能影響其他函數(shù)。B,降低函數(shù)的通用性不利于函數(shù)重復(fù)調(diào)用&9、10、D,全局變量永久占據(jù)內(nèi)存。原則:能用局部變量,就不用全局變量。全局變量和局部變量同名,在局部變量作用域范圍內(nèi),局部變量有效。變量的存儲(chǔ)類別:自動(dòng)變量:函數(shù)中的局部變量,如不加static關(guān)鍵字修飾,都屬于自動(dòng)變量,也叫做動(dòng)態(tài)變量。靜態(tài)變
36、量:所有全局函數(shù)都屬于靜態(tài)變量,局部變量如果加了static關(guān)鍵字修飾,也是靜態(tài)變量。點(diǎn)陣取模軟件的用法A, 新建圖像:8*8,B, 模擬動(dòng)畫:放大格點(diǎn)值最大,畫圖,選中的點(diǎn)為滅,白色的為亮,C修改圖像;黑白反選,確定要顯示的內(nèi)容。D, 取模方式:C51格式。E, 參數(shù)設(shè)置:7其他選項(xiàng)7選擇橫向取模 +其他默認(rèn)(選中:字節(jié)倒序(點(diǎn)陣第一行左側(cè)DB0),保留、任何時(shí)候都)F基本操作:保存圖像,打開圖像,便于下次操作。顯示漢字:需要至少16*16的顯示屏。動(dòng)態(tài)顯示:例如,I ? u可以新建一個(gè)8*40行的點(diǎn)陣。(點(diǎn)陣顯示部分重看之后待完善)左右移動(dòng)方法一,圖像側(cè)過來,把板子側(cè)過來就可以了。 左右移
37、動(dòng)方法二:二維數(shù)組。Un sig ned char a23 = 1,2,3,4,5,6;Lesson 8函數(shù)進(jìn)階與按鍵、單片機(jī)最小系統(tǒng)解析1、電源:5V、3.3V兩種;數(shù)字電路電源:24V、12V、5V、3.3V、2.5V、1.8V2、無源晶振(晶體):需接起振電容,不依賴電源電壓,接好電路就工作;有源晶振(振蕩器):需接電源,輸出端直接接 XTAL1依賴工作電壓,適用高精度場合。3、復(fù)位電路上電復(fù)位:復(fù)位時(shí)間t = 1.2RC 故:t = 1.2*4.7K* 0.1*0.000001F = 564us,大于兩個(gè)機(jī)器周期約 2us,故能起到復(fù)位作用。手動(dòng)復(fù)位:人手按下按鍵的時(shí)間一般100ms以
38、上,快的也有幾十 ms,故滿足復(fù)位條件。18歐的電阻作用是放電時(shí),K、R、C形成閉合回路,消除干擾。軟件復(fù)位。二、函數(shù)的調(diào)用1、例如:利用 void secondcount()void ledrefresh()函數(shù)優(yōu)化秒表程序。2、靜態(tài)變量只第一次有效。3、函數(shù)調(diào)用時(shí),不加函數(shù)類型(無 void等),加分號(hào);函數(shù)調(diào)用之前,必須進(jìn)行定義或聲明;函數(shù)聲明的時(shí)候必須加:函數(shù)類型,函數(shù)的形參,最后加一個(gè)分號(hào)。4、函數(shù)體順序:ma in() 7子函數(shù)排序7中斷函數(shù)。5、實(shí)參,形參27-32分鐘。三、獨(dú)立式按鍵VCC1內(nèi)部輸出 1U 1 AQ?PN1內(nèi)部輸入NOTT"|R4. 7 k口k 1準(zhǔn)雙
39、向I/O 口MC U 的i/ o+5只有內(nèi)部輸出為高電平,MCU的IO 口就為高電平,才能讀鍵。故有P2 = OXF7;程序一:#include<reg52.h> / 用 K1-K4 控制 LED6-9 的亮滅sbit ADDR0 = PUO;sbit ADDR1 = P 1人1;sbit ADDR2 = P 1人2;sbit ADDR3 = P13;sbit ENLED = P 1人4;sbit LED9 = PO T;sbit LED8 = POW;sbit LED7 = PO 人5;sbit LED6 = POM;sbit KEY1 = P 2人4;sbit KEY2 = P
40、 2人5;sbit KEY3 = P 2人6;sbit KEY4 = P 2人7;mai n()ENLED = O; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDRO = O;P2 = 0XF7; /KEY仁4接高電平、KEY0UT4接低電平while(1)LED9 = KEY1; /把讀的 KEY1 的值賦給 LED9;LED8 = KEY2;LED7 = KEY3;LED6 = KEY4;(法二)Main 程序#include<reg52.h> #include"key.h" main()ENLED = 0; ADDR3 = 1;A
41、DDR2 = 1; ADDR1 = 1; ADDR0 = 0;P0 = 0Xff;KEY0UT1 = 0;while(1)P0 = (P2>>4)|0xf0; 頭文件#ifndef_KEY_H_#defineKEY_Hsbit ADDR0 = P 1人0;sbit ADDR1 = P 1人1;sbit ADDR2 = P 1人2;sbit ADDR3 =卩1人3;sbit ENLED = P 1人4;sbit KEY1 = P 2人4;sbit KEY2 = P 2人5;sbit KEY3 = P 2人6;sbit KEY4 = P 2人7;sbit KEYOUT1 = P 2人3
42、;sbit KEYOUT2 = P 2人2;sbit KEYOUT3 = P 2人1;sbit KEYOUT4 = P 2人0;#endif程序二: K1、K2 控制數(shù)字加減的程序,防抖動(dòng)#include <reg52.h> #include "key.h" void delay()unsigned int i = 2000;while(i-);main()unsigned char n = 0;P0 = 0XFF;KEYOUT1 = 0;ENLED = 0; ADDR3 = 1;ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; / 控制最右邊數(shù)
43、碼管 DS1 亮P0 = ledchar0;while(1)if(!KEY1) /相當(dāng)于 if(KEY1 = 0) 判斷鍵是否按下delay();if(!KEY1)/再判斷健是否按下if(n >= 9)n = 0;else n+;P0 = ledcharn;while(!KEY1); / 等待按鍵 1 松開的語句。if(!KEY2)delay();if(!KEY2)if(n <= 0)n = 9;else n-;P0 = ledcharn; 程序三、while(!KEY2);用小燈構(gòu)成的 5 位二進(jìn)制數(shù)表示 16 個(gè)按鍵, 1-1,2-2,16-0 ;#include <re
44、g52.h> #include "key.h" void delay();main()ENLED = 0; ADDR3 = 1;ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;P0 = 0xFF;while(1)KEYOUT1 = 0;KEYOUT2 = 1;KEYOUT3 = 1;if(KEY1 = 0)delay();KEYOUT4 = 1;if(KEY1 = 0)P0 = 1;if(KEY2 = 0)delay(); if(KEY2 = 0)P0 = 2;if(KEY3 = 0)delay();if(KEY3 = 0)P0 = 3;if(KEY4
45、 = 0)delay();if(KEY4 = 0)P0 = 4;while(KEY1 = 0)|(KEY2 = 0)|(KEY3 = 0)|(KEY4 = 0);/ 第一行檢測(cè)完KEYOUT1 = 1;KEYOUT2 = 0;KEYOUT3 = 1;KEYOUT4 = 1;if(KEY1 = 1)delay();P0 = 5;if(KEY1 = 0)(0 =乙人3"!- = Od(0 =以3汕!:()血即(1 =以3勸!琴fl軸馬二蚩 /-(o =以3>011(0 = £人3>011(0 =乙人3>011(0 = LA3>i)9|!MM(0 =以3汕
46、!:()血即(0 =以3勸!'丄 = Od(0 = e 人 3汕!:()血即(0 = e 人 3勸!:()血|即(0 =乙人3汕!(0 =乙人3"!delay();if(KEY2 = 0)P0 = 10;if(KEY3 = 0)delay();if(KEY3 = 0)P0 = 11;if(KEY4 = 0)delay();if(KEY4 = 0)P0 = 12;while(KEY1 = 0)|(KEY2 = 0)|(KEY3 = 0)|(KEY4 = 0);/ 第三行檢測(cè)完KEYOUT1 = 1;KEYOUT2 = 1;KEYOUT3 = 1;KEYOUT4 = 0;if(KEY1 = 1)delay();if(KEY1 = 0)P0 = 13;if(KEY2 = 0)delay();P0 = 14;if(KEY2 = 0)if(KEY3 = 0)delayO;if(KEY3 = 0) P0 = 15;if(KEY4 = 0)delay();if(KEY4 = 0)P0 = 16;/第四行檢測(cè)完while(KEY1 = 0)|(KEY2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年臺(tái)州市黃巖區(qū)環(huán)境保護(hù)監(jiān)測(cè)站招聘考試真題
- 鞏留縣引進(jìn)高層次緊缺專業(yè)人才真題
- 《語言表達(dá)連貫》課件
- 教師繼續(xù)教育讀書評(píng)價(jià)范文(6篇)
- 鉗工畢業(yè)實(shí)習(xí)報(bào)告(15篇)
- 急診科臨床診療指南技術(shù)操作規(guī)范
- 化工檢修年終工作總結(jié)以及明年計(jì)劃范文
- 上海 利用合同格式條款 執(zhí)法 案例
- 廣告公司績效承諾書樣版
- 營銷活動(dòng)策劃方案(錦集3篇)
- 杜邦杜邦工程塑料課件
- 砌體工程監(jiān)理實(shí)施細(xì)則
- 運(yùn)輸車輛衛(wèi)生安全檢查記錄表
- 房建裝修修繕工程量清單
- 部編版四年級(jí)道德與法治上冊(cè)第8課《網(wǎng)絡(luò)新世界》優(yōu)質(zhì)課件
- 柴油發(fā)電機(jī)組應(yīng)急預(yù)案
- 格力2匹柜機(jī)檢測(cè)報(bào)告KFR-50LW(50530)FNhAk-B1(性能)
- 分級(jí)護(hù)理制度考試題及答案
- 小學(xué)生勞動(dòng)課炒菜教案(精選8篇)
- 高考作文模擬寫作:“德”與“得”導(dǎo)寫及范文
- 江蘇專轉(zhuǎn)本《大學(xué)語文》考綱
評(píng)論
0/150
提交評(píng)論