ATMEL作為一個51系列單片機(jī)的大生產(chǎn)廠商,90年代中后期推出一款高性價比的RISC(精簡指令集)單片機(jī)系列,就是當(dāng)今很流行也很著名的AVR單片機(jī),在各種高性能單片機(jī)的競爭中,脫穎而出,很受各界電子人士熱愛。很多想學(xué)單片機(jī)的人都不敢學(xué)習(xí)AVR,覺得不好入門,其實(shí)不然,如果你使用C語言編程,入門都是一樣的,而且當(dāng)你學(xué)好后,不用像學(xué)習(xí)51的人,還要在學(xué)習(xí)一個高性能的單片機(jī),這樣很浪費(fèi)時間。
標(biāo)準(zhǔn)的C語言中沒有空語句。但在單片機(jī)的C語言編程中,經(jīng)常需要用幾個空指令產(chǎn)生短延時的效果。這在匯編語言中很容易實(shí)現(xiàn),寫幾個nop就行了。在keil C51中,直接調(diào)用庫函數(shù):#include // 聲明了void _nop_(void);_nop
程序能跑起來并不見得你的代碼就是很好的c代碼了,衡量代碼的好壞應(yīng)該從以下幾個方面來看1,代碼穩(wěn)定,沒有隱患。2,執(zhí)行效率高。3,可讀性高。4,便于移植。下面發(fā)一些我在網(wǎng)上看到的技巧和自己的一些經(jīng)驗(yàn)來和大家分
標(biāo)準(zhǔn)的C語言中沒有空語句。但在單片機(jī)的C語言編程中,經(jīng)常需要用幾個空指令產(chǎn)生短延時的效果。這在匯編語言中很容易實(shí)現(xiàn),寫幾個nop就行了。在keil C51中,直接調(diào)用庫函數(shù):#include // 聲明了void _nop_(void);_nop
寫單片機(jī)程序也是程序,也要遵循寫軟件的一些基本原則,不是為了完成功能那么簡單。我看過的所有的C語言單片機(jī)書籍基本都不注重模塊化思想,完全是拿著C當(dāng)匯編用,簡直是在糟蹋C語言! 如下問題,幾乎所有的單片機(jī)書
程序能跑起來并不見得你的代碼就是很好的c代碼了,衡量代碼的好壞應(yīng)該從以下幾個方面來看1,代碼穩(wěn)定,沒有隱患。2,執(zhí)行效率高。3,可讀性高。4,便于移植。下面發(fā)一些我在網(wǎng)上看到的技巧和自己的一些經(jīng)驗(yàn)來和大家分
單片機(jī)C語言編程中,定時器的初值對于初學(xué)者真的是比較不好計算,因此我總結(jié)了以下幾種方法。第1種方法:#define FOSC 11059200L //晶振的頻率#define TIMS (65536-FOSC/12/1000) //12T mode 對于8051系列單片機(jī)通用
/* 名稱:ADC0809 數(shù)模轉(zhuǎn)換與顯示說明:ADC0809 采樣通道 3 輸入的模擬量,轉(zhuǎn)換后的結(jié)果顯示在數(shù)碼管上。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned int//各數(shù)字的數(shù)碼管段碼(共陰)uc
/* 名稱:用 ADC0808 控制 PWM 輸出說明:使用數(shù)模轉(zhuǎn)換芯片 ADC0808,通過調(diào)節(jié)可變電阻 RV1 來調(diào)節(jié)脈沖寬度,運(yùn)行程序時,通過虛擬示波器觀察占空比的變化。*/#include<reg51.h>#define uchar unsigned char#define
/* 名稱:單片機(jī)與 PC 通信說明:單片機(jī)可接收 PC 發(fā)送的數(shù)字字符,按下單片機(jī)的K1 鍵后,單片機(jī)可向 PC 發(fā)送字符串。在 Proteus 環(huán)境下完成本 實(shí) 驗(yàn) 時 , 需 要 安 裝 Virtual Serial Port Driver 和串口調(diào)試助手
/* 名稱:單片機(jī)向主機(jī)發(fā)送字符串說明:單片機(jī)按一定的時間間隔向主機(jī)發(fā)送字符串,發(fā)送內(nèi)容在虛擬終端顯示。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned int//延時void DelayMS(uint ms)
/* 名稱:甲機(jī)串口程序說明:甲機(jī)向乙機(jī)發(fā)送控制命令字符,甲機(jī)同時接收乙機(jī)發(fā)送的數(shù)字,并顯示在數(shù)碼管上。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P1^0; sbit LED2
/* 名稱:甲機(jī)發(fā)送控制命令字符說明:甲單片機(jī)負(fù)責(zé)向外發(fā)送控制命令字符“A”、“B”、“C”,或者停止發(fā)送,乙機(jī)根據(jù)所接收到的字符完成 LED1 閃爍、LED2 閃爍、雙閃爍、或停止閃爍
/* 名稱:并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)說 明 : 切 換 連 接 到 并 串 轉(zhuǎn) 換 芯 片74LS165 的撥碼開關(guān),該芯片將并行數(shù)據(jù)以串行方式發(fā)送到 8051 的 RXD 引腳,移位脈沖由 TXD 提供,顯示在 P0 口。*/#include<reg51.h>
/* 名稱:串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)說明:串行數(shù)據(jù)由 RXD 發(fā)送給串并轉(zhuǎn)換芯片 74164,TXD 則用于輸出移位時鐘脈沖,74164 將串行輸入的 1 字節(jié)轉(zhuǎn)換為并行數(shù)據(jù),并將轉(zhuǎn)換的數(shù)據(jù)通過 8 只 LED 顯示出來。本例串口工作
/* 名稱:報警與旋轉(zhuǎn)燈說明:定時器控制報警燈旋轉(zhuǎn)顯示,并發(fā)出仿真警報聲。*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit SPK=P3^7;uchar FRQ=0x00; //延時
/* 名稱:定時器控制交通指示燈 說明:東西向綠燈亮 5s 后,黃燈閃爍,閃爍 5 次亮紅燈, 紅燈亮后,南北向由紅燈變成綠燈,5s 后南北向黃燈閃爍, 閃爍 5 次后亮紅燈,東西向綠燈亮,如此
1.某單片機(jī)系統(tǒng)的P2口接一數(shù)模轉(zhuǎn)換器DAC0832輸出模擬量,現(xiàn)在要求從DAC0832輸出連續(xù)的三角波,實(shí)現(xiàn)的方法是從P2口連續(xù)輸出按照三角波變化的數(shù)值,從0開始逐漸增大,到某一最大值后逐漸減小,直到0,然后再從0逐漸增大
/* 名稱:按鍵控制定時器選播多段音樂說明:本例內(nèi)置 3 段音樂,K1 可啟動停止音樂播放,K2 用于選擇音樂段。*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit
/* 名稱:演奏音階說明:本例使用定時器演奏一段音階,播放由 K1 控制。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit K1=P1^0; sbit SPK=P3^4; uint i=0; //音符索引//14 個