導航:首頁 > 操作系統 > 單片機編程案例

單片機編程案例

發布時間:2022-09-05 23:06:48

單片機C語言程序設計實訓100例:基於PIC+Proteus模擬的內容簡介

《單片機C語言程序設計實訓100例:基於PIC+Proteus模擬》基礎設計類案例涵蓋PIC單片機最基本的埠編程、定時/計數器應用、中斷程序設計、A/D轉換、CCP程序設計、EEPROM、Flash、USART及看門狗程序設計等;硬體應用類案例涉及單片機存儲器外展、介面擴展、解碼、編碼、驅動、光電、機電、感測器、I2C及SPI介面器件、MMC、紅外等器件;綜合設計類案例涉及消費類電子產品、儀器儀表及智能控制設備相關技術,相關案例涉及RS-485/Modbus/CAN/Ethernet等技術應用。

⑵ 51單片機及其C語言程序開發實例的介紹

作者:戴仙金出版社:清華大學出版社本書首先簡單介紹了51系列單片機的基礎知識,然後從工程應用的角度出發,詳細地介紹了51系列單片機常用的電路模塊,主要包括鍵盤、LcD顯示、A,D轉換、D/A轉換、I。c匯流排應用、語音、實時時鍾、紅外、usB、步進電機、數字鎖相環、串口通信、DDs等,同時列舉了4個典型的實際工程,包括語音存儲與回放系統、數控直流恆流源、簡易數字邏輯分析儀、智能電動小車等,目的在於使讀者能夠迅速地掌握51系列單片機的開發與實現。本書深入淺出,力求既能使單片機的初學者迅速入門,又能使中高級開發人員在原來的基礎上進一步提高實際項目開發能力。

⑶ c51單片機程序實例

#include<reg51.h>
#defineucharunsignedchar
uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0到9
ucharnum,cnt,disn;
ucharkeyval,disk;
ucharled[]={1,2,3,4};
voiddealdat(uchara)
{
led[0]=0;
led[1]=0;
led[2]=0;
led[3]=0;
led[a]=disk;
}
voiddelay(unsignedinta)
{
unsignedinti,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(num)
{
case0:P2=0x01;break;
case1:P2=0x02;break;
case2:P2=0x04;break;
case3:P2=0x08;break;
default:break;
}
P0=~tab[led[num]];
num++;
num&=0x03;
cnt++;
if(cnt>100)
{
cnt=0;
disn++;
disn%=4;
dealdat(disn);
}
}

ucharkbscan(void)
{
unsignedcharsccode,recode;
P3=0x0f;//發0掃描,列線輸入
if((P3&0x0f)!=0x0f)//有鍵按下
{
// delay(20);//延時去抖動
if((P3&0x0f)!=0x0f)
{
sccode=0xef;//逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//無鍵按下,返回0
}

voidgetkey(void)
{
unsignedcharkey;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case0x11:keyval=7;break;
case0x12:keyval=4;break;
case0x14:keyval=1;break;
case0x18:keyval=10;break;
case0x21:keyval=8;break;
case0x22:keyval=5;break;
case0x24:keyval=2;break;
case0x28:keyval=0;break;
case0x41:keyval=9;break;
case0x42:keyval=6;break;
case0x44:keyval=3;break;
case0x48:keyval=11;break;
case0x81:keyval=12;break;
case0x82:keyval=13;break;
case0x84:keyval=14;break;
case0x88:keyval=15;break;
default:keyval=0xff;break;
}
}

main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
if(keyval!=0xff)disk=keyval;
delay(10);
}

}

⑷ 《單片機C語言程序設計實訓100例——基於8051+Proteus模擬》 第03篇源代碼

單片機c語言編程100個實例目錄1
函數的使用和熟悉
實例3:用單片機控制第一個燈亮
實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率
實例5:將 P1口狀態分別送入P0、P2、P3口:認識I/O口的引腳功能
實例6:使用P3口流水點亮8位LED
實例7:通過對P3口地址的操作流水點亮8位LED
實例8:用不同數據類型控制燈閃爍時間
實例9:用P0口、P1 口分別顯示加法和減法運算結果
實例10:用P0、P1口顯示乘法運算結果
實例11:用P1、P0口顯示除法運算結果
實例12:用自增運算控制P0口8位LED流水花樣
實例13:用P0口顯示邏輯"與"運算結果
實例14:用P0口顯示條件運算結果
實例15:用P0口顯示按位"異或"運算結果
實例16:用P0顯示左移運算結果
實例17:"萬能邏輯電路"實驗
實例18:用右移運算流水點亮P1口8位LED
實例19:用if語句控制P0口8位LED的流水方向
實例20:用swtich語句的控制P0口8位LED的點亮狀態
實例21:用for語句控制蜂鳴器鳴笛次數
實例22:用while語句控制LED
實例23:用do-while語句控制P0口8位LED流水點亮
實例24:用字元型數組控制P0口8位LED流水點亮
實例25: 用P0口顯示字元串常量
實例26:用P0 口顯示指針運算結果
實例27:用指針數組控制P0口8位LED流水點亮
實例28:用數組的指針控制P0 口8 位LED流水點亮
實例29:用P0 、P1口顯示整型函數返回值
實例30:用有參函數控制P0口8位LED流水速度
實例31:用數組作函數參數控制流水花樣
實例32:用指針作函數參數控制P0口8位LED流水點亮
實例33:用函數型指針控制P1口燈花樣
實例34:用指針數組作為函數的參數顯示多個字元串
單片機c語言編程100個實例目錄2
實例35:字元函數ctype.h應用舉例
實例36:內部函數intrins.h應用舉例
實例37:標准函數stdlib.h應用舉例
實例38:字元串函數string.h應用舉例
實例39:宏定義應用舉例2
實例40:宏定義應用舉例2
實例41:宏定義應用舉例3
* 中斷、定時器中斷、定時器 *中斷、定時器*中斷、定時器 /
實例42:用定時器T0查詢方式P2口8位控制LED閃爍
實例43:用定時器T1查詢方式控制單片機發出1KHz音頻
實例44:將計數器T0計數的結果送P1口8位LED顯示
實例45:用定時器T0的中斷控制1位LED閃爍
實例46:用定時器T0的中斷實現長時間定時
實例47:用定時器T1中斷控制兩個LED以不同周期閃爍
實例48:用計數器T1的中斷控制蜂鳴器發出1KHz音頻
實例49:用定時器T0的中斷實現"渴望"主題曲的播放
實例50-1:輸出50個矩形脈沖
實例50-2:計數器T0統計外部脈沖數
實例51-2:定時器T0的模式2測量正脈沖寬度
實例52:用定時器T0控制輸出高低寬度不同的矩形波
實例53:用外中斷0的中斷方式進行數據採集
實例54-1:輸出負脈寬為200微秒的方波
實例54-2:測量負脈沖寬度
實例55:方式0控制流水燈循環點亮
實例56-1:數據發送程序
實例56-2:數據接收程序
實例57-1:數據發送程序
實例57-2:數據接收程序
實例58:單片機向PC發送數據
實例59:單片機接收PC發出的數據
*數碼管顯示*數碼管顯示 數碼管顯示數碼管顯示*/
實例60:用LED數碼顯示數字5
實例61:用LED數碼顯示器循環顯示數字0~9
實例62:用數碼管慢速動態掃描顯示數字"1234"
實例63:用LED數碼顯示器偽靜態顯示數字1234
實例64:用數碼管顯示動態檢測結果
實例65:數碼秒錶設計
實例66:數碼時鍾設計
實例67:用LED數碼管顯示計數器T0的計數值
實例68:靜態顯示數字「59」
單片機c語言編程100個實例目錄3
鍵盤控制*鍵盤控制* *鍵盤控制 *鍵盤控制 */
實例69:無軟體消抖的獨立式鍵盤輸入實驗
實例70:軟體消抖的獨立式鍵盤輸入實驗
實例71:CPU控制的獨立式鍵盤掃描實驗
實例72:定時器中斷控制的獨立式鍵盤掃描實驗
實例73:獨立式鍵盤控制的4級變速流水燈
實例74:獨立式鍵盤的按鍵功能擴展:"以一當四"
實例75:獨立式鍵盤調時的數碼時鍾實驗
實例76:獨立式鍵盤控制步進電機實驗
實例77:矩陣式鍵盤按鍵值的數碼管顯示實驗
//實例78:矩陣式鍵盤按鍵音
實例79:簡易電子琴
實例80:矩陣式鍵盤實現的電子密碼鎖
液晶顯示LCD*液晶顯示LCD *液晶顯示LCD * *液晶顯示LCD*液晶顯示LCD *液晶顯示LCD */
實例81:用LCD顯示字元'A'
實例82:用LCD循環右移顯示"Welcome to China"
實例83:用LCD顯示適時檢測結果
實例84:液晶時鍾設計
*一些晶元的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 紅外遙控/
實例85:將數據"0x0f"寫入AT24C02再讀出送P1口顯示
實例86:將按鍵次數寫入AT24C02,再讀出並用1602LCD顯示
實例87:對I2C匯流排上掛接多個AT24C02的讀寫操作
實例88:基於AT24C02的多機通信 讀取程序
實例89:基於AT24C02的多機通信 寫入程序
實例90:DS18B20溫度檢測及其液晶顯示
實例91:將數據"0xaa"寫入X5045再讀出送P1口顯示
實例92:將流水燈控制碼寫入X5045並讀出送P1口顯示
實例93:對SPI匯流排上掛接多個X5045的讀寫操作
實例94:基於ADC0832的數字電壓表
實例95:用DAC0832產生鋸齒波電壓
實例96:用P1口顯示紅外遙控器的按鍵值
實例97:用紅外遙控器控制繼電器
實例98:基於DS1302的日歷時鍾
實例99:單片機數據發送程序
實例100:電機轉速表設計
模擬霍爾脈沖

http://www.dzkfw.com.cn/myxin/51c_language.chm 單片機c語言一百例子

⑸ c51單片機編程

一位共陽數碼管接在P0口,為靜態顯示。P3口接有8個獨立式按鍵,按鍵為K1~K8,按鍵8個按鍵中的任意一個,數碼管則顯示出按鍵編號。模擬圖如下,這是按下K6時顯示6。

⑹ 單片機c語言編程100個實例

51單片機C語言編程實例 基礎知識:51單片機編程基礎 單片機的外部結構: 1. DIP40雙列直插; 2. P0,P1,P2,P3四個8位準雙向I/O引腳;(作為I/O輸入時,要先輸出高電平) 3. 電源VCC(PIN40)和地線GND(PIN20); 4. 高電平復位RESET(PIN9);(10uF電容接VCC與RESET,即可實現上電復位) 5. 內置振盪電路,外部只要接晶體至X1(PIN18)和X0(PIN19);(頻率為主頻的12倍) 6. 程序配置EA(PIN31)接高電平VCC;(運行單片機內部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 單片機內部I/O部件:(所為學習單片機,實際上就是編程式控制制以下I/O部件,完成指定任務) 1. 四個8位通用I/O埠,對應引腳P0、P1、P2和P3; 2. 兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一個串列通信介面;(SCON,SBUF) 4. 一個中斷控制器;(IE,IP) 針對AT89C52單片機,頭文件AT89x52.h給出了SFR特殊功能寄存器所有埠的定義。 C語言編程基礎: 1. 十六進製表示位元組0x5a:二進制為01011010B;0x6E為01101110。 2. 如果將一個16位二進數賦給一個8位的位元組變數,則自動截斷為低8位,而丟掉高8位。 3. ++var表示對變數var先增一;var—表示對變數後減一。 4. x |= 0x0f;表示為 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變數TMOD的低四位賦值0x5,而不改變TMOD的高四位。 6. While( 1 ); 表示無限執行該語句,即死循環。語句後的分號表示空循環體,也就是{;} 在某引腳輸出高電平的編程方法:(比如P1.3(PIN4)引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P1.3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_3 = 1; //給P1_3賦值1,引腳P1.3就能輸出高電平VCC 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 注意:P0的每個引腳要輸出高電平時,必須外接上拉電阻(如4K7)至VCC電源。 在某引腳輸出低電平的編程方法:(比如P2.7引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2.7 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P2_7 = 0; //給P2_7賦值0,引腳P2.7就能輸出低電平GND 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 在某引腳輸出方波編程方法:(比如P3.1引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P3.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 5. { 6. P3_1 = 1; //給P3_1賦值1,引腳P3.1就能輸出高電平VCC 7. P3_1 = 0; //給P3_1賦值0,引腳P3.1就能輸出低電平GND 8. } //由於一直為真,所以不斷輸出高、低、高、低……,從而形成方波 9. } 將某引腳的輸入電平取反後,從另一個引腳輸出:( 比如 P0.4 = NOT( P1.1) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P0.4和P1.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_1 = 1; //初始化。P1.1作為輸入,必須輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { 7. if( P1_1 == 1 ) //讀取P1.1,就是認為P1.1為輸入,如果P1.1輸入高電平VCC 8. { P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 2 51單片機C語言編程實例 9. else //否則P1.1輸入為低電平GND 10. //{ P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 11. { P0_4 = 1; } //給P0_4賦值1,引腳P0.4就能輸出高電平VCC 12. } //由於一直為真,所以不斷根據P1.1的輸入情況,改變P0.4的輸出電平 13. } 將某埠8個引腳輸入電平,低四位取反後,從另一個埠8個引腳輸出:( 比如 P2 = NOT( P3 ) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2和P3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P3 = 0xff; //初始化。P3作為輸入,必須輸出高電平,同時給P3口的8個引腳輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { //取反的方法是異或1,而不取反的方法則是異或0 7. P2 = P3^0x0f //讀取P3,就是認為P3為輸入,低四位異或者1,即取反,然後輸出 8. } //由於一直為真,所以不斷將P3取反輸出到P2 9. } 注意:一個位元組的8位D7、D6至D0,分別輸出到P3.7、P3.6至P3.0,比如P3=0x0f,則P3.7、P3.6、P3.5、P3.4四個引腳都輸出低電平,而P3.3、P3.2、P3.1、P3.0四個引腳都輸出高電平。同樣,輸入一個埠P2,即是將P2.7、P2.6至P2.0,讀入到一個位元組的8位D7、D6至D0。 第一節:單數碼管按鍵顯示 單片機最小系統的硬體原理接線圖: 1. 接電源:VCC(PIN40)、GND(PIN20)。加接退耦電容0.1uF 2. 接晶體:X1(PIN18)、X2(PIN19)。注意標出晶體頻率(選用12MHz),還有輔助電容30pF 3. 接復位:RES(PIN9)。接上電復位電路,以及手動復位電路,分析復位工作原理 4. 接配置:EA(PIN31)。說明原因。 發光二極的控制:單片機I/O輸出 將一發光二極體LED的正極(陽極)接P1.1,LED的負極(陰極)接地GND。只要P1.1輸出高電平VCC,LED就正向導通(導通時LED上的壓降大於1V),有電流流過LED,至發LED發亮。實際上由於P1.1高電平輸出電阻為10K,起到輸出限流的作用,所以流過LED的電流小於(5V-1V)/10K = 0.4mA。只要P1.1輸出低電平GND,實際小於0.3V,LED就不能導通,結果LED不亮。 開關雙鍵的輸入:輸入先輸出高 一個按鍵KEY_ON接在P1.6與GND之間,另一個按鍵KEY_OFF接P1.7與GND之間,按KEY_ON後LED亮,按KEY_OFF後LED滅。同時按下LED半亮,LED保持後松開鍵的狀態,即ON亮OFF滅。 代碼 1. #include <at89x52.h> 2. #define LED P1^1 //用符號LED代替P1_1 3. #define KEY_ON P1^6 //用符號KEY_ON代替P1_6 4. #define KEY_OFF P1^7 //用符號KEY_OFF代替P1_7 5. void main( void ) //單片機復位後的執行入口,void表示空,無輸入參數,無返回值 6. { 7. KEY_ON = 1; //作為輸入,首先輸出高,接下KEY_ON,P1.6則接地為0,否則輸入為1 8. KEY_OFF = 1; //作為輸入,首先輸出高,接下KEY_OFF,P1.7則接地為0,否則輸入為1 9. While( 1 ) //永遠為真,所以永遠循環執行如下括弧內所有語句 10. { 11. if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1輸出高,LED亮 12. if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1輸出低,LED滅 13. } //松開鍵後,都不給LED賦值,所以LED保持最後按鍵狀態。 14. //同時按下時,LED不斷亮滅,各佔一半時間,交替頻率很快,由於人眼慣性,看上去為半亮態 15. } 數碼管的接法和驅動原理 一支七段數碼管實際由8個發光二極體構成,其中7個組形構成數字8的七段筆畫,所以稱為七段數碼管,而餘下的1個發光二極體作為小數點。作為習慣,分別給8個發光二極體標上記號:a,b,c,d,e,f,g,h。對應8的頂上一畫,按順時針方向排,中間一畫為g,小數點為h。 我們通常又將各二極與一個位元組的8位對應,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相應8個發光二極體正好與單片機一個埠Pn的8個引腳連接,這樣單片機就可以通過引腳輸出高低電平控制8個發光二極的亮與滅,從而顯示各種數字和符號;對應位元組,引腳接法為:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。 如果將8個發光二極體的負極(陰極)內接在一起,作為數碼管的一個引腳,這種數碼管則被稱為共陰數碼管,共同的引腳則稱為共陰極,8個正極則為段極。否則,如果是將正極(陽極)內接在一起引出的,則稱為共陽數碼管,共同的引腳則稱為共陽極,8個負極則為段極。 以單支共陰數碼管為例,可將段極接到某埠Pn,共陰極接GND,則可編寫出對應十六進制碼的七段碼表位元組數據

⑺ 80c51單片機程序實例

給你發個產品的真實程序,控制交流滑差電機,既檢測控制速度,又檢測實際速度,還根據檢測值控制電機在控制速度值下平穩運行。
ORG
0000H
;主軸控製程序
START:
AJMP
MAIN
;
REALSPDL
EQU
30H
REALSPDH
EQU
31H
CMPSPDL
EQU
32H
CMPSPDH
EQU
33H
ADJSPD
EQU
34H
BKCNT
EQU
35H
T0COUNT
EQU
36H
T1COUNT
EQU
37H
IOSPDL
EQU
38H
IOSPDH
EQU
39H
T_TMP
EQU
3AH
T_MS
EQU
3BH
T_250MS
EQU
3CH
CH1
EQU
3AH
CH2
EQU
3BH
UPSPD
EQU
2
DNSPD
EQU
2
STOPB
EQU
P1.4
RUNB
EQU
P1.3
LAMPB
EQU
P3.7
PZB
EQU
P3.4
PAB
EQU
P3.3
SPDB
EQU
P3.2
BREAKB
EQU
P1.1
ENABLE
EQU
P1.0
;-----------------------------------
ORG
0003H
SJMP
IE0DEAL
ORG
000BH
SJMP
TF0DEAL
ORG
0013H
SJMP
IE1DEAL
ORG
001BH
SJMP
TF1DEAL
ORG
0023H
SJMP
RITIDEAL
;------------------------------------
ORG
0030H
IE0DEAL:
CLR
TR0
MOV
IOSPDL,TL0
MOV
IOSPDH,TH0
MOV
TL0,#0
MOV
TH0,#0
SETB
TR0
PUSH
ACC
CLR
02H
MOV
A,REALSPDH
CLR
C
SUBB
A,#2
JC
IE0D2
SETB
02H
IE0D2:
POP
ACC
IE0D3:
RETI
;------------------------------------
TF0DEAL:
SETB
01H
RETI
;------------------------------------
IE1DEAL:
CLR
TR1
MOV
REALSPDL,TL1
MOV
REALSPDH,TH1
MOV
TL1,#0
MOV
TH1,#0
SETB
TR1
JB
03H,IE1D1
INC
T1COUNT
MOV
A,T1COUNT
CLR
C
SUBB
A,#250
JC
IE1D1
MOV
T1COUNT,#0
INC
T0COUNT
MOV
A,T0COUNT
CLR
C
SUBB
A,#4
JC
IE1D1
MOV
T0COUNT,#0
SETB
03H
IE1D1:
CLR
01H
RETI
;------------------------------------
TF1DEAL:
SETB
01H
MOV
REALSPDL,#0FFH
MOV
REALSPDH,#0FFH
RETI
;------------------------------------
RITIDEAL:
RETI
;******************************************************************************
DELAY2:
MOV
T_TMP,#0F9H
;0FAH=1ms
DJNZ
T_TMP,$
DJNZ
T_MS,DELAY2
;3EH=?ms
RET
;------------------------------------------------------------------------------
DELAY3:
MOV
T_MS,#0FAH
;0FAH=250ms
LCALL
DELAY2
DJNZ
T_250MS,DELAY3
;3FH=?*250ms
RET
;------------------------------------
MAIN:
CLR
EA
CLR
ET0
CLR
ET1
CLR
EX0
CLR
EX1
CLR
TR0
CLR
TR1
SETB
RUNB
SETB
STOPB
MOV
SP,#60H
MOV
TMOD,#11H
MOV
TCON,#05H
MOV
TL0,#0
MOV
TH0,#0
MOV
TL1,#0
MOV
TH1,#0
MOV
T_250MS,#20
LCALL
DELAY3
SETB
TR0
SETB
TR1
SETB
ET0
SETB
ET1
SETB
EX0
SETB
EX1
SETB
EA
MOV
T1COUNT,#0
MOV
T0COUNT,#0
SETB
BREAKB
SETB
ENABLE
SETB
01H
CLR
03H
CLR
04H
SETB
RUNB
SETB
STOPB
MOV
T_MS,#100
LCALL
DELAY2
INIT:
JB
RUNB,LOOP
MOV
T_MS,#200
LCALL
DELAY2
CPL
P3.7
SJMP
INIT
LOOP:
JNB
RUNB,CONTINUE
LOOP0:
JNB
STOPB,STOPP
RESUME:
SETB
BREAKB
SETB
ENABLE
SETB
01H
CLR
P3.7
MOV
TL0,#0
MOV
TH0,#0
MOV
TL1,#0
MOV
TH1,#0
MOV
T1COUNT,#0
MOV
T0COUNT,#0
MOV
BKCNT,#0
CLR
03H
CLR
04H
SJMP
LOOP
CONTINUE:
JB
01H,CNT1
LCALL
COMPARE
JZ
CNT3
CJNE
A,#0FFH,CNT2
CNT1:
SETB
BREAKB
CLR
ENABLE
SJMP
LOOP
CNT2:
SETB
BREAKB
SETB
ENABLE
SJMP
LOOP
CNT3:
JB
02H,CNT2
JNB
03H,CNT2
CLR
BREAKB
SETB
ENABLE
CNT4:
SJMP
LOOP
;------------------------------------
STOPP:
CLR
BREAKB
SETB
ENABLE
STOPP1:
JNB
STOPB,STOPP1
SETB
BREAKB
SETB
ENABLE
SJMP
LOOP
;------------------------------------
COMPARE:
MOV
A,REALSPDL
ADD
A,#1
MOV
CMPSPDL,A
MOV
A,REALSPDH
ADDC
A,#0
MOV
CMPSPDH,A
CLR
C
MOV
A,CMPSPDL
SUBB
A,IOSPDL
MOV
CMPSPDL,A
MOV
A,CMPSPDH
SUBB
A,IOSPDH
MOV
CMPSPDH,A
JC
COM11
;MORE
JZ
COM12
COM10:
MOV
A,#0FFH
RET
COM11:
MOV
A,#00H
RET
COM12:
LCALL
GETADJ
CLR
C
MOV
A,CMPSPDL
SUBB
A,ADJSPD
JNC
COM10
MOV
A,#0A0H
RET
;------------------------------------
GETADJ:
MOV
A,IOSPDH
JNZ
GETADJ0
MOV
A,IOSPDL
SUBB
A,#79
JNC
GETADJ01
MOV
ADJSPD,#3
;>700
RET
GETADJ01:
SUBB
A,#32
JNC
GETADJ03
MOV
ADJSPD,#6
;500~700
RET
GETADJ03:
SUBB
A,#73
JNC
GETADJ04
MOV
ADJSPD,#10
;300~500
RET
GETADJ04:
MOV
ADJSPD,#16
;216~300
RET
GETADJ0:
MOV
A,REALSPDH
SUBB
A,#2
JC
GETADJ1
MOV
ADJSPD,#3
;<108
RET
GETADJ1:
MOV
A,REALSPDL
SETB
C
RRC
A
SUBB
A,#150
JNC
GETADJ2
MOV
ADJSPD,#24
;>200
RET
GETADJ2:
SUBB
A,#50
JNC
GETADJ3
MOV
ADJSPD,#48
;150~200
RET
GETADJ3:
MOV
ADJSPD,#96
;<150
RET
;------------------------------------
END

⑻ 怎樣學習單片機編程,單片機編程實例

1,首先要學習C語言基礎,就相當於80%會單片機了,因為現在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C語言。
2,聽起來單片機比較陌生,不是因為不懂,而是不知道方法和流程。現簡單說說,僅供參考;
3,先看內核8051的單片機:台灣宏晶的STC89C51-DIP40/或其它如新茂,到網上買一個開發板,價格不會超過200元。
4,看一下單片機功能:包換內部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
5,編譯環境、編程軟體KEIL。
6,打開開發板的例子程序,在KEIL編譯,下載到板,看結果和說明是不是相符,達到這樣效果時,心裡肯定很激動,這時真正學會了單片機,成功了。
7,然後再學會看電路圖,電路圖其實很簡單,就是一根線從一個地方連接到另一個地方,寫代碼時,只記住單片機是哪一個管腳,然後對它寫代碼即可

⑼ 《單片機C語言程序設計實訓100例——基於8051+Proteus模擬》 【綜合設計部分】的源代碼

單片機c語言編程100個實例目錄1 函數的使用和熟悉例26:用P0 口顯示指針運算結果 實例27:用指針數組控制P0口8位LED流水點亮 實例28:用數組的指針控制P0 口8 位LED流水點亮 實例29:用P0 、P1口顯示整型函數返回值 實例30:用有參函數控制P0口8位LED流水速度 實例31:用數組作函數參數控制流水花樣 實例32:用指針作函數參數控制P0口8位LED流水點亮 實例33:用函數型指針控制P1口燈花樣 實例34:用指針數組作為函數的參數顯示多個字元串 單片機c語言編程100個實例目錄2 實例35:字元函數ctype.h應用舉例 實例36:內部函數intrins.h應用舉例 實例37:標准函數stdlib.h應用舉例 實例38:字元串函數string.h應用舉例 實例39:宏定義應用舉例2 實例40:宏定義應用舉例2 實例41:宏定義應用舉例3 * 中斷、定時器中斷、定時器 *中斷、定時器*中斷、定時器 / 實例42:用定時器T0查詢方式P2口8位控制LED閃爍 實例43:用定時器T1查詢方式控制單片機發出1KHz音頻 實例44:將計數器T0計數的結果送P1口8位LED顯示 實例45:用定時器T0的中斷控制1位LED閃爍 實例46:用定時器T0的中斷實現長時間定時 實例47:用定時器T1中斷控制兩個LED以不同周期閃爍 實例48:用計數器T1的中斷控制蜂鳴器發出1KHz音頻 實例49:用定時器T0的中斷實現"渴望"主題曲的播放 實例50-1:輸出50個矩形脈沖 實例50-2:計數器T0統計外部脈沖數 實例51-2:定時器T0的模式2測量正脈沖寬度 實例52:用定時器T0控制輸出高低寬度不同的矩形波 實例53:用外中斷0的中斷方式進行數據採集 實例54-1:輸出負脈寬為200微秒的方波 實例54-2:測量負脈沖寬度 實例55:方式0控制流水燈循環點亮 實例56-1:數據發送程序 實例56-2:數據接收程序 實例57-1:數據發送程序 實例57-2:數據接收程序 實例58:單片機向PC發送數據 實例59:單片機接收PC發出的數據 *數碼管顯示*數碼管顯示 數碼管顯示數碼管顯示*/ 實例60:用LED數碼顯示數字5 實例61:用LED數碼顯示器循環顯示數字0~9 實例62:用數碼管慢速動態掃描顯示數字"1234" 實例63:用LED數碼顯示器偽靜態顯示數字1234 實例64:用數碼管顯示動態檢測結果 實例65:數碼秒錶設計 實例66:數碼時鍾設計 實例67:用LED數碼管顯示計數器T0的計數值 實例68:靜態顯示數字「59」 單片機c語言編程100個實例目錄3 鍵盤控制*鍵盤控制* *鍵盤控制 *鍵盤控制 */ 實例69:無軟體消抖的獨立式鍵盤輸入實驗 實例70:軟體消抖的獨立式鍵盤輸入實驗 實例71:CPU控制的獨立式鍵盤掃描實驗 實例72:定時器中斷控制的獨立式鍵盤掃描實驗 實例73:獨立式鍵盤控制的4級變速流水燈 實例74:獨立式鍵盤的按鍵功能擴展:"以一當四" 實例75:獨立式鍵盤調時的數碼時鍾實驗 實例76:獨立式鍵盤控制步進電機實驗 實例77:矩陣式鍵盤按鍵值的數碼管顯示實驗 //實例78:矩陣式鍵盤按鍵音 實例79:簡易電子琴 實例80:矩陣式鍵盤實現的電子密碼鎖 液晶顯示LCD*液晶顯示LCD *液晶顯示LCD * *液晶顯示LCD*液晶顯示LCD *液晶顯示LCD */ 實例81:用LCD顯示字元'A' 實例82:用LCD循環右移顯示"Welcome to China" 實例83:用LCD顯示適時檢測結果 實例84:液晶時鍾設計 *一些晶元的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 紅外遙控/ 實例85:將數據"0x0f"寫入AT24C02再讀出送P1口顯示 實例86:將按鍵次數寫入AT24C02,再讀出並用1602LCD顯示 實例87:對I2C匯流排上掛接多個AT24C02的讀寫操作 實例88:基於AT24C02的多機通信 讀取程序 實例89:基於AT24C02的多機通信 寫入程序 實例90:DS18B20溫度檢測及其液晶顯示 實例91:將數據"0xaa"寫入X5045再讀出送P1口顯示 實例92:將流水燈控制碼寫入X5045並讀出送P1口顯示 實例93:對SPI匯流排上掛接多個X5045的讀寫操作 實例94:基於ADC0832的數字電壓表 實例95:用DAC0832產生鋸齒波電壓 實例96:用P1口顯示紅外遙控器的按鍵值 實例97:用紅外遙控器控制繼電器 實例98:基於DS1302的日歷時鍾 實例99:單片機數據發送程序 實例100:電機轉速表設計 模擬霍爾脈沖 實例3:用單片機控制第一個燈亮 實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率 實例5:將 P1口狀態分別送入P0、P2、P3口:認識I/O口的引腳功能 實例6:使用P3口流水點亮8位LED 實例7:通過對P3口地址的操作流水點亮8位LED 實例8:用不同數據類型控制燈閃爍時間 實例9:用P0口、P1 口分別顯示加法和減法運算結果 實例10:用P0、P1口顯示乘法運算結果 實例11:用P1、P0口顯示除法運算結果 實例12:用自增運算控制P0口8位LED流水花樣 實例13:用P0口顯示邏輯"與"運算結果 實例14:用P0口顯示條件運算結果 實例15:用P0口顯示按位"異或"運算結果 實例16:用P0顯示左移運算結果 實例17:"萬能邏輯電路"實驗 實例18:用右移運算流水點亮P1口8位LED 實例19:用if語句控制P0口8位LED的流水方向 實例20:用swtich語句的控制P0口8位LED的點亮狀態 實例21:用for語句控制蜂鳴器鳴笛次數 實例22:用while語句控制LED 實例23:用do-while語句控制P0口8位LED流水點亮 實例24:用字元型數組控制P0口8位LED流水點亮 實例25: 用P0口顯示字元串常量 實例26:用P0 口顯示指針運算結果

閱讀全文

與單片機編程案例相關的資料

熱點內容
pdf數字不顯示 瀏覽:888
convertwordtopdf 瀏覽:251
程序編譯基本單位 瀏覽:21
python分析圖片角度 瀏覽:60
阿里雲伺服器能復制數據嗎 瀏覽:560
python拼音轉換文字 瀏覽:563
動畫遺傳演算法 瀏覽:63
php如何解析xml文件 瀏覽:702
如何改變appstore的語言 瀏覽:462
javahtmlxml 瀏覽:34
單片機啟動文件 瀏覽:811
橙app如何開啟聊天 瀏覽:899
訪問伺服器公網地址 瀏覽:666
pdf列印底色去掉 瀏覽:464
java快遞介面 瀏覽:397
哪個app可以教新爸爸 瀏覽:210
如何查看伺服器系統版本信息 瀏覽:524
成都市土地出讓金演算法 瀏覽:704
鋼筋加密標記 瀏覽:578
ps中擴展功能在文件夾的什麼位置 瀏覽:905