分享簡潔51單片機常用子程序_第1頁
分享簡潔51單片機常用子程序_第2頁
分享簡潔51單片機常用子程序_第3頁
分享簡潔51單片機常用子程序_第4頁
分享簡潔51單片機常用子程序_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

/********本程序所有模塊都在11.0592Mhz晶振下測試通過,只供學習參考********/

/**************************本程序由精科創(chuàng)電子制作**************************/

#include<reg51.h>//包含51單片機頭文件,在51單片機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單片機常用延時子程序毫秒級延時

{

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時間,達到延時的目的

}

}

ucharADC(void)//adc子程序,本程序針對常用并行8位AD芯片ADC0804

{

ucharADCRes;//聲明一個uchar(無符號單字節(jié)變量,用于保存AD轉(zhuǎn)換結(jié)果)

P0=0xFF;//拉高P0數(shù)據(jù)總線,為讀做準備(51單片機中,讀取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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論