![分享簡潔51單片機(jī)常用子程序_第1頁](http://file4.renrendoc.com/view11/M03/3E/3F/wKhkGWWfooiAesZQAAGsCAL6C-A121.jpg)
![分享簡潔51單片機(jī)常用子程序_第2頁](http://file4.renrendoc.com/view11/M03/3E/3F/wKhkGWWfooiAesZQAAGsCAL6C-A1212.jpg)
![分享簡潔51單片機(jī)常用子程序_第3頁](http://file4.renrendoc.com/view11/M03/3E/3F/wKhkGWWfooiAesZQAAGsCAL6C-A1213.jpg)
![分享簡潔51單片機(jī)常用子程序_第4頁](http://file4.renrendoc.com/view11/M03/3E/3F/wKhkGWWfooiAesZQAAGsCAL6C-A1214.jpg)
![分享簡潔51單片機(jī)常用子程序_第5頁](http://file4.renrendoc.com/view11/M03/3E/3F/wKhkGWWfooiAesZQAAGsCAL6C-A1215.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
/********本程序所有模塊都在11.0592Mhz晶振下測試通過,只供學(xué)習(xí)參考********/
/**************************本程序由精科創(chuàng)電子制作**************************/
#include<reg51.h>//包含51單片機(jī)頭文件,在51單片機(jī)C程序上,這是必須的
#include<intrins.h>//常用頭文件,不是必須的,但這里用到其中的_nop_(空操作函數(shù)),所以必須把這個頭文件包含過來
#defineucharunsignedchar//宏定義,這句話的作用就是--你這個unsignedchar,太長了,我懶得寫,以后就用uchar代替
#defineuintunsignedint//和上面相似
//***********以下是位定義*****************//
sbitS1=P3^3;//按鈕S1接P3.3
sbitS2=P3^2;
sbitS3=P3^5;
sbitSPK=P3^5;//蜂鳴器接P3.5
sbitP00=P0^0;
sbitP01=P0^1;
sbitP02=P0^2;
sbitP03=P0^3;
sbitP04=P0^4;
sbitP05=P0^5;
sbitP06=P0^6;
sbitP07=P0^7;
sbitP24=P2^4;
sbitKeyBoadCon=P2^6;
sbitcol1=P1^4;
sbitcol2=P1^5;
sbitcol3=P1^6;
sbitcol4=P1^7;
sbitLed4_1=P2^3;
sbitLed4_2=P2^2;
sbitLed4_3=P2^1;
sbitLed4_4=P2^0;
sbitDAC_WR=P3^6;//DAC寫引腳
sbitDAC_CS=P2^5;//DAC片選
//***********位定義結(jié)束*****************//
//ucharseg[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};//七段
ucharseg[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//七段小數(shù)點不亮
/*************音樂數(shù)據(jù)表*****************/
unsignedcharn=0;//n為節(jié)拍常數(shù)變量
unsignedcharcodemusic_tab[]={
0x18,0x30,0x1C,0x10,//格式為:頻率常數(shù),節(jié)拍常數(shù),頻率常數(shù),節(jié)拍常數(shù),
0x20,0x40,0x1C,0x10,
0x18,0x10,0x20,0x10,
0x1C,0x10,0x18,0x40,
0x1C,0x20,0x20,0x20,
0x1C,0x20,0x18,0x20,
0x20,0x80,0xFF,0x20,
0x30,0x1C,0x10,0x18,
0x20,0x15,0x20,0x1C,
0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,
0x20,0x30,0x80,0xFF,
0x20,0x20,0x1C,0x10,
0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x20,0x1C,0x10,
0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x30,0x1C,0x10,
0x18,0x20,0x15,0x20,
0x1C,0x20,0x20,0x20,
0x26,0x40,0x20,0x20,
0x2B,0x20,0x26,0x20,
0x20,0x20,0x30,0x80,
0x20,0x30,0x1C,0x10,
0x20,0x10,0x1C,0x10,
0x20,0x20,0x26,0x20,
0x2B,0x20,0x30,0x20,
0x2B,0x40,0x20,0x15,
0x1F,0x05,0x20,0x10,
0x1C,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x30,0x1C,0x10,
0x18,0x20,0x15,0x20,
0x1C,0x20,0x20,0x20,
0x26,0x40,0x20,0x20,
0x2B,0x20,0x26,0x20,
0x20,0x20,0x30,0x30,
0x20,0x30,0x1C,0x10,
0x18,0x40,0x1C,0x20,
0x20,0x20,0x26,0x40,
0x13,0x60,0x18,0x20,
0x15,0x40,0x13,0x40,
0x18,0x80,0x00
};
ucharh[4];
uinti;
ucharADCRS;
ucharRchar;
ucharX=0;
floathres;
voiddelayms(intt)//51單片機(jī)常用延時子程序毫秒級延時
{
inti;//聲明變量i--內(nèi)循環(huán)變量
intj;//聲明變量j--外循環(huán)變量
for(j=0;j<t;j++)
{
for(i=0;i<150;i++);//循環(huán)加法計算,消耗CPU時間,達(dá)到延時的目的
}
}
ucharADC(void)//adc子程序,本程序針對常用并行8位AD芯片ADC0804
{
ucharADCRes;//聲明一個uchar(無符號單字節(jié)變量,用于保存AD轉(zhuǎn)換結(jié)果)
P0=0xFF;//拉高P0數(shù)據(jù)總線,為讀做準(zhǔn)備(51單片機(jī)中,讀取IO端口時,必須先拉高對應(yīng)端口)
WR=0;//把ADC0804的WR腳拉低
delayms(1);WR=1;//把ADC0804的WR腳拉高
delayms(1);//延時1毫秒
RD=0;//把ADC0804的WR腳拉低
delayms(1);//延時1毫秒
ADCRes=P0;//讀取AD轉(zhuǎn)換結(jié)果到ADCRes變量
delayms(1);//延時1毫秒
RD=1;//拉高ADC0804RD腳
returnADCRes;//返回AD轉(zhuǎn)換結(jié)果
}
voidjkc_Dac(void)//dac子程序,輸出階梯波,本程序采用常用8位DAC芯片--DAC0832
{
uchari;
P2=0XFF;//拉高P2
DAC_CS=1;//拉高DAC0832片選
DAC_WR=1;//接高DAC0832寫
for(i=0;i<25;i++)//25次循環(huán),每次電壓增加10/255*Vref(參考電壓,這里是5伏)伏,形成階梯電壓
{
P0=i*10;
DAC_CS=0;
DAC_WR=0;
_nop_();
_nop_();
DAC_WR=1;
delayms(1);
}
}
voidint0()interrupt1//采用中斷0控制節(jié)拍
{TH0=0xd8;
TL0=0xef;
n--;
}
voiddelay(unsignedcharm)//控制頻率延時
{
unsignedi=3*m;
while(--i);
}
voidjkc_Flash_LED(void)//接于P0口的8個LED閃爍例程
{
P2=0XFF;//P2口高電平,關(guān)掉數(shù)碼管
while(1)
{
P0=0X00;//P0端口拉低,燈亮
delayms(200);
P0=0XFF;//P0端口拉高,燈滅
delayms(200);
}
}
voidjkc_Horse_LED(void)//跑馬燈例程
{
unsignedchartemp;
P2=0XFF;//P2口高電平,關(guān)掉數(shù)碼管
temp=0x01;
P0=~temp;//temp按位取反后賦給P0,直接輸出temp(0x01),最低位是1高電平,燈不亮,低電平才亮,所以要反轉(zhuǎn)位delayms(100);
while(1)
{
P0=~temp;
temp<<=1;//temp向左移動一位,即里面的1向左移動一位。為1的位對應(yīng)的端口經(jīng)過位反轉(zhuǎn)后,燈會亮,其余的亮不會亮
delayms(100);
if(temp==0X00)
{
temp=0X01;
}
}
}
voidjkc_Test_4LED(void)//四位數(shù)碼管測試程序
{
delayms(200);
//P0=seg[8];
P0=0X00;//點亮數(shù)碼管所有筆畫
P2=0XF0;//拉低P20~P23,P20~P23接的是四個數(shù)碼管的共陽端
delayms(200);
P2=0XFF;
delayms(200);
P2=0XF0;
delayms(200);
P2=0XFF;
delayms(200);
P2=0XF0;
delayms(200);
P2=0XFF;
while(1)//以下程序循環(huán)顯示0123456789
{
for(i=0;i<10;i++)
{
P0=seg[i];
P2=0XF0;
delayms(200);
P2=0XFF;
delayms(200);
}
}
}
voidjkc_Display4(uintnumber)//四位數(shù)碼管顯示數(shù)值子程序
{
ucharh[4];
uinttemp;
h[3]=number/1000;//數(shù)值的千位
temp=number%1000;//“%”取模運算符,即取余數(shù)
h[2]=temp/100;//數(shù)值的百位
temp=temp%100;
h[1]=temp/10;//數(shù)值的十位
temp=temp%10;
h[0]=temp;//數(shù)值的個位
//while(1)
//{
P2=0XFF;
P0=seg[h[0]];
Led4_1=0;
delayms(3);
Led4_1=1;
delayms(1);
P0=seg[h[1]];
Led4_2=0;
delayms(3);
Led4_2=1;
delayms(1);
P0=seg[h[2]];
Led4_3=0;
delayms(3);
Led4_3=1;
delayms(1);
P0=seg[h[3]];
Led4_4=0;
delayms(3);
Led4_4=1;
delayms(1);
//}
}
voidjkc_Display1(uintnumber)//1位獨立數(shù)碼管顯示數(shù)字子程序
{
uinttemp;
temp=number;
P2=0XFF;
P0=seg[temp];
P24=0;
//delayms(100);
}
voidjkc_CheckButton(void)//檢測3個獨立按鈕例程
{
while(1)
{
if(S1==0)
P00=0;
if(S2==0)
P01=0;
if(S3==0)
P0=0XFF;
}
}
voidjkc_Check_KeyBoad(void)//4*4矩陣鍵盤檢測子程序
{
col1=0;//這里只檢測左邊第一列,按下S4,S8,S13,S17相應(yīng)的LED會亮
while(1)
{
KeyBoadCon=0;
P0=0XFF;
if(P00==0)
P00=0;
if(P01==0)
P01=0;
if(P02==0)
P02=0;
if(P03==0)
P03=0;
KeyBoadCon=1;
delayms(30);
}
}
voidjkc_PlayMusic(void)//音樂子程序
{
unsignedcharp,m;//m為頻率常數(shù)變量
unsignedchari=0;
TMOD&=0x0f;
TMOD=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a:p=music_tab[i];
if(p==0x00){i=0,delayms(1000);gotoplay;}//如果碰到結(jié)束符,延時1秒,回到開始再來一遍
elseif(p==0xff){i=i+1;delayms(100),TR0=0;gotoa;}//若碰到休止符,延時100ms,繼續(xù)取下一音符
else{m=music_tab[i++],n=music_tab[i++];}//取頻率常數(shù)和節(jié)拍常數(shù)
TR0=1;//開定時器1
while(n!=0)SPK=~SPK,delay(m);
TR0=0;//關(guān)定時器1
}
}
voidmain(void)//主程序
{
P2=0XFF;
while(1)
{
//jkc_Flash_LED();//接于P0口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年浙江公務(wù)員考試行測試題(A卷)
- 學(xué)習(xí)培訓(xùn)指導(dǎo)服務(wù)協(xié)議書(7篇)
- 2025年企業(yè)員工流動性協(xié)議書
- 2025年彩涂板(卷)項目申請報告模板
- 2025年促銷禮品租賃合同文本
- 2025年音頻切換臺項目立項申請報告模板
- 2025年汽車保養(yǎng)維修服務(wù)合同示例
- 2025年保險公司合作綜合協(xié)議
- 2025年共同投資申請諒解協(xié)議框架
- 2025年企業(yè)復(fù)蘇與和解協(xié)議大綱
- 2025年山東商務(wù)職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025年個人合法二手車買賣合同(4篇)
- 2025年內(nèi)蒙古自治區(qū)包頭市中考試卷數(shù)學(xué)模擬卷(二)
- 外研版(三起)小學(xué)英語三年級下冊Unit 1 Animal friends Get ready start up 課件
- 2025年華潤燃?xì)庹衅腹P試參考題庫含答案解析
- 推進(jìn)煙草網(wǎng)格化管理工作
- 急危重癥患者優(yōu)先處置制度與流程
- 銅礦隱蔽致災(zāi)普查治理工作計劃
- 金融服務(wù)鄉(xiāng)村振興
- 2024-2030年中國出版社行業(yè)發(fā)展現(xiàn)狀及前景趨勢分析報告
- (新版)廣電全媒體運營師資格認(rèn)證考試復(fù)習(xí)題庫(含答案)
評論
0/150
提交評論