單片機(jī)C例程大全_第1頁(yè)
單片機(jī)C例程大全_第2頁(yè)
單片機(jī)C例程大全_第3頁(yè)
單片機(jī)C例程大全_第4頁(yè)
單片機(jī)C例程大全_第5頁(yè)
已閱讀5頁(yè),還剩177頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

*LED閃爍的簡(jiǎn)單試驗(yàn)

*連接方法:JP11(P2)和JP1用8PIN排線連接起來(lái)

#include<reg51.h>〃此文件中定義了51的一些特殊功能寄存器

voiddelay(unsignedinti);〃聲明延時(shí)函數(shù)

main()

(

P2=0x00;//置P0口為低電平

delay(600);〃調(diào)用延時(shí)程序

P2=Oxff;〃置P0口為高電平

delay(600);//調(diào)用延時(shí)程序

/*******延時(shí)函數(shù)*************/

voiddelay(unsignedinti)

unsignedcharj;

for(i;i>0;i-)〃循環(huán)600*255次

for(j=255;j>0;j-);

)

;二進(jìn)制加法試驗(yàn)

;p2口八個(gè)燈作二進(jìn)制加法。理解二進(jìn)值的計(jì)算*

;硬件連接:p2口8路指示燈

描述:

p2口八個(gè)燈作二進(jìn)制加法。理解二進(jìn)值的計(jì)算*

連接方法:JP11(P2)和JP1(LED燈)用8PIN排線連接起來(lái)*

#include<reg52.h>

voiddelay(unsignedinti);〃聲明延時(shí)函數(shù)

main()

unsignedcharNum=Oxff;

while(1)

{P2=Num;

delay(lOOO);〃延時(shí)函數(shù)

Num—;

voiddelay(unsignedinti)

unsignedcharj;

for(i;i>0;i-)

for(j=255;j>0;j-);

)

********

LED閃爍的簡(jiǎn)單試驗(yàn)

*延時(shí)實(shí)現(xiàn)p2口LED流水燈效果(用循環(huán)移位指令)

連接方法:JP11(P2)和JP1(LED燈)用8PIN排線連接起來(lái)

#include<reg51.h>〃此文件中定義了51的一些特殊功能寄存器

#include<intrins.h>

voiddelayms(unsignedcharms)

//延時(shí)子程序

unsignedchari;

while(ms-)

for(i=0;i<120;i++);

main()

unsignedcharLED;

LED=Oxfe;//Oxfe11111110

while(l)

P2=LED;

delayms(250);

LED=LED?1;〃循環(huán)右移1位,點(diǎn)亮下一個(gè)LED”<v”為左移位

if(P2==0x00){LED=Oxfe;}//Oxfe=11111110

描述:跑馬燈程序

連接方法:JP11(P2)和JP1(LED燈)用8PIN排線連接起來(lái)

#include<reg51.h>

#include<intrins.h>

*延時(shí)子程序*

voiddelayms(unsignedcharms)

unsignedchari;

while(ms—)

for(i=0;i<120;i++);

)

*主程序*

main()

(

unsignedcharLED;

LED=Oxfe;

P2=LED;

while(l)

(

delayms(250);

LED=_crol_(LED,l);〃循環(huán)右移1位,點(diǎn)亮下一個(gè)LED此函數(shù)位庫(kù)函數(shù)

P2=LED;

)

)

,**************************************************************'***************

沖斷控制的P2.0小燈。采用11.0592/12MHZ晶振。

;連接方法:JPI1(P2)和JPI(LED燈)用8PIN排線連接起來(lái)

ORGOOOOh

AJMPmain

ORGOOObh

AJMPint_timer

ORG0030h

main:MOVtmod,#01h;設(shè)置定時(shí)器工作方式寄存器。

MOVth0,#high(65536-10000);

MOVtl0,#low(65536-10000);設(shè)10MS初始值。

MOVie,#82h;設(shè)置中斷允許寄存器

MOV30h,#10;

MOV31h,#6;30H和31H是兩個(gè)軟件計(jì)數(shù)器。

SETBtrO;啟動(dòng)定時(shí)

AJMP$;原地踏步

int_timer:;定時(shí)器0中斷服務(wù)程序。

MOVth0,#high(65536-10000);

MOVU0,#low(65536-10000);重設(shè)10MS定時(shí)。

DJNZ30h,ll;

MOV30h,#10;

DJNZ31h,ll;

MOV31h,#6;軟件計(jì)數(shù)

CPLp2.0;10*6*10MS=600MS時(shí)間到,Pl.l取反

11:RETI;中斷返回

END

;*跑馬燈實(shí)驗(yàn)

;延時(shí)實(shí)現(xiàn)LED流水燈效果p2口八個(gè)燈作跑馬燈。采用了寄存器存中間數(shù)

;連接方法:JP11(P2)和JP1(LED燈)用8PIN排線連接起來(lái)

#include<reg52.h>

voiddelay(unsignedinti);〃聲明延時(shí)函數(shù)

charLED;

main()

(

unsignedchari;

while(1)

LED=Oxfe;

for(i=0;i<8;i++)

P2=LED;

delay(500);

LED=LED?1;//左移

LED=LEDI0x01;〃移位后,后面的位為高電平

if(LED==0x7Dbreak;/麋前退出FOR循環(huán)

for(i=0;i<8;i++)

{

P2=LED;

delay(500);

LED=LED?1;〃右移

LED=LEDI0x80;〃移位后,后面的位為高電平

voiddelay(unsignedinti)

unsignedcharj;

for(i;i>0;i-)

for(j=255;j>0;j-);

按鍵狀態(tài)顯示試驗(yàn)*

/*連接方法:連接JP10(P0)與JP5(按鈕接口)

JP11(P2)與JP1(LED接口)*

/*按鍵則點(diǎn)亮LED燈,8路指示燈接p0U

#include<reg5l.h>

#include<intrins.h>

sbitBEEP=PM5;〃將蜂鳴器定義在Pl.5端口上

sbitRELAY=P1A4;〃將繼電器定義在Pl.4端口上

sbitKI=P0A0;sbitK2=0x80Al;//P0和0X80表示的是同一個(gè)地址

sbitK3=P0A2;sbitK4=0x80八3;

sbitK5=P0A4;sbitK6=0x80八5;

voidbeep();

main()

while(l)

P2=Oxff;

if(Kl==0)P2=Oxfe;

if(K2!=1)PI2=Oxfd;

if(!K3)P2=Oxfb;

if(?K4)P2=0xf7;

if(!Kl&&!K2)?P2=0x00;//2個(gè)按鈕同時(shí)按下P2□8個(gè)燈全部點(diǎn)亮

if(!K5)beep();〃喇叭發(fā)聲

if(!K6)

RELAY=0;〃通過(guò)了反相器(HC6800試用)

else

RELAY=1;

)

voidbeep()

unsignedchari,j;

for(i=0;i<100;i++)

BEEP=!BEEP;//BEEP取反

for(j=0;j<250;j++)〃需要產(chǎn)生方波

_nop_();

}

BEEP=1;//關(guān)閉蜂鳴器

*按鍵控制程序

*連接方法:JP1O(P2)與JP1(LED燈)連接,

*JP11(P0)與JP5(按鍵接口)連接*

*開(kāi)始點(diǎn)亮PILED

按P01LED向右移一位*

*按POOLED向左移一位

*連續(xù)按動(dòng)按鈕LED會(huì)不停的左移或右移

#include<reg5l.h>

#include<intrins.h>

unsignedcharscan_key();

voidproc_key(unsignedcharkey_v);

voiddelayms(unsignedcharms);

sbitKI=P0A0;〃對(duì)應(yīng)按鈕KI

sbitK2=P0Al;〃對(duì)應(yīng)按鈕K2

main()

(

unsignedcharkey_s,key_v;

key_v=0x03;

P2=Oxfe;

while(l)

(

key__s=scan_key();

if(key_s!=key_v)

{

delayms(lO);

key_s=scan_key();

if(key_s!=key_v)

key_v=key_s;

proc_key(key_v);

unsignedcharscan_key()

(

unsignedcharkey_s;

key_s=0x00;

key_s1=K2;

key_s?=1;

key_s1=KI;

returnkey_s;

}

voidproc_key(unsignedcharkey_v)

(

if((key_v&0x01)==0)

(

P2=_cror_(P2,l);

)

elseif((key_v&0x02)==0)

(

P2=_crol_(P2,1);

}

)

voiddelayms(unsignedcharms)//延時(shí)子程序

(

unsignedchari;

while(ms—)

for(i=0;i<120;i++);

*按鍵控制程序

*連接方法:JP10(P2)與JP1(LED燈)連接,

*JPU(P0)與JP5(按鍵接口)連接*

*開(kāi)始點(diǎn)亮PILED

;鍵盤(pán)P2.5控制的小燈P0.0。P2.7對(duì)應(yīng)K1*

ORG0000H

AJMPMAIN

ORG0030H

MAIN:MOVC,p0.0;檢測(cè)按鍵

MOVP2.0,C;根據(jù)按鍵決定輸出。

AJMPMAIN;循環(huán)

END

;P0.0小鍵盤(pán)按下P2.0亮再按0.5秒滅。

;連接方法:連接方法:JP10(P2)與JPI(LED燈)連接,

JP11(P0)與JP5(按鍵接口)連接

;FLAG20HEXPRESSTHE0.5STIMEARRIVED.

;FLAG21HEXPRESSTHELEDLIGHTED.

ORGOOOOh

AJMPmainO

ORG0030h

MAINO:

CLR21H;清標(biāo)志

main:

MOVC,P0.0;檢測(cè)按鍵

JCmain

MOVR6,#200;設(shè)定延時(shí)

MOVR7,#200

TTO:

JNB21H,TT2;檢測(cè)燈狀態(tài)

tt:

MOVC,P0.0;檢測(cè)按鍵

JNCttl

JNB20H,MAIN;檢測(cè)時(shí)間標(biāo)志

CLR20H

AJMPTT3

TT2:

MOVc,P0.0;檢測(cè)按鍵

JNCtt2

TT3:

CPL21H;改變燈狀態(tài)

CPLp2.0

AJMPmain

TT1:NOP;延時(shí)但不是子程序

NOP

NOP

NOP

NOP

NOP

DJNZR6,TT

MOVR6,#200

DJNZR7,TT

MOVR7,#200

SETB20H

AJMPTT

END

,*.?************....*************....*********.....********........*******’‘'',

按鍵PO.O每按下次加一,通過(guò)的P2端口顯示

;連接方法:JP1O(P0)與JP1(LED燈)連接,

;JP11(P2)與JP5(按鍵接口)連接*

;顯示出其的二進(jìn)制計(jì)數(shù)值。

,******************************************************************************

orgOOOOh

ajmploop

org0030h

mova,#Offh

loop:jnbpO.O,tt

jmploop

tt:movp2,a;全不亮

calldelay;延時(shí)。

deca;每次減一。

jmploop

delay:movr5,#50;延時(shí)。

d1:movr6,#40

d2:movr7,#20

ret

end

******************************************************************************

鍵盤(pán)控制的花樣彩燈。*

連接方法:JP10(P2)與JP1(LED燈)連接,

JP11(P0)與JP5(按鍵接口)連接

按p24,p27,p26,p27,p2口8個(gè)燈分別作移動(dòng)右移動(dòng),停止右移左移*

*?*************..*.*************....*****************....***********...*

亮燈控制程序;

,,

ORG0000H

UMPSTART

org0030h

;主程序;

START:

MOVP3,#OFFH

JNBP0.7,FUN0;檢測(cè)按鍵

JNBPO.4,FUN1

JNBP0.5,FUN2

JNBP0.6,FUN3;關(guān)閉按紐

AJMPSTART

FUNO:LCALLDL10MS;消岸抖動(dòng)

JBP0.7,START

WAITLO:JNBP0.7,WAITL0;等待鍵釋放

FUNO1:LCALLFUNOO

AJMPSTART

FUN1:LCALLDL10MS;消岸抖動(dòng)

JBP0.4,START

WAITLkJNBP3.3,WAITL1;等待鍵釋放

FUN1O:LCALLFUN11

AJMPSTART

FUN2:LCALLDL10MS;消岸抖動(dòng)

JBPO.5,START

WAITL2:JNBP0.5,WAITL2;等待鍵釋放

FUN20:LCALLFUN22

AJMPSTART

FUN3:LCALLDL10MS;消岸抖動(dòng)

JBP0.6,START

WAITL3:JNBP0.6,WAITL3;等待健釋放

MOVP2,#OFFH;關(guān)顯示

UMPSTART

FUNOO:MOVA,#0FEH;左移子程序

FUNOOO:MOVP2,A

LCALLDLO5S

JNBACC.7,OUT;檢測(cè)是否結(jié)束

RLA

AJMPFUNOOO

OUT:RET

FUN11:MOVA,#07FH;右移子程序

FUN111:MOVP2,A

LCALLDLO5S

JNBACC.O,OUT;檢測(cè)是否結(jié)束

RRA

AJMPFUN111

FUN22:MOVA,#0AAH;間隔顯示子程序

MOVP2,A

LCALLDL30S

CPLA

MOVP2,A

LCALLDL30S

RET

.*********,

;延時(shí)程序;

,************,

DL512:MOVR2,#0FFH;延時(shí)500US

LOOPkDJNZR2XOOP1

RET

DL10MS:MOVR3,#14H;延時(shí)10MS

LOOP2:LCALLDL512

DJNZR3,LOOP2

RET

DL05S:MOVR4,#0AH;延時(shí)-100MS

LOOP3:LCALLDL10MS

DJNZR4,LOOP3

RET

DL30S:MOVR5,#O3H;延時(shí)300MS.

LOOP4:LCALLDL05S

DJNZR5,LOOP4

RET

end

此為獨(dú)立按鍵接口

[文件名]C51音樂(lè)程序(八月桂花)

[功能]通過(guò)單片機(jī)演奏音樂(lè)

#include<REG52.H>

include<INTRINS.H>

〃本例采用89C52,晶振為11.0592MHZ

//關(guān)于如何編制音樂(lè)代碼,其實(shí)十分簡(jiǎn)單,各位可以看以下代碼.

〃頻率常數(shù)即音樂(lè)術(shù)語(yǔ)中的音調(diào),而節(jié)拍常數(shù)即音樂(lè)術(shù)語(yǔ)中的多少拍;

〃所以拿出譜子,試探編吧!

sbitBeep=P1A5;

unsignedcharn=0;//n為節(jié)拍常數(shù)變量

unsignedcharcodemusic_tab[]={

0x18,0x30,OxlC,0x10,//格式為:頻率常數(shù),節(jié)拍常數(shù),頻率常數(shù),節(jié)拍常數(shù),

0x20,0x40,OxlC,0x10,

0x18,0x10,0x20,0x10,

OxlC,0x10,0x18,0x40,

OxlC,0x20,0x20,0x20,

OxlC,0x20,0x18,0x20,

0x20,0x80,OxFF,0x20,

0x30,OxlC,0x10,0x18,

0x20,Ox15,0x20,OxIC,

0x20,0x20,0x20,0x26,

0x40,0x20,0x20,0x2B,

0x20,0x26,0x20,0x20,

0x20,0x30,0x80,OxFF,

0x20,0x20,OxlC,0x10,

0x18,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x20,OxlC,0x10,

0x18,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x30,OxlC,0x10,

0x18,0x20,0x15,0x20,

OxlC,0x20,0x20,0x20,

0x26,0x40,0x20,0x20,

0x2B,0x20,0x26,0x20,

0x20,0x20,0x30,0x80,

0x20,0x30,OxlC,0x10,

0x20,0x10,OxlC,0x10,

0x20,0x20,0x26,0x20,

0x2B,0x20,0x30,0x20,

0x2B,0x40,0x20,0x15,

OxIF,0x05,0x20,0x10,

OxIC,0x10,0x20,0x20,

0x26,0x20,Ox2B,0x20,

0x30,0x20,Ox2B,0x40,

0x20,0x30,OxlC,OxlO,

0x18,0x20,0x15,0x20,

OxIC,0x20,0x20,0x20,

0x26,0x40,0x20,0x20,

0x2B,0x20,0x26,0x20,

0x20,0x20,0x30,0x30,

0x20,0x30,0xlC,0xl0,

0x18,0x40,OxlC,0x20,

0x20,0x20,0x26,0x40,

0x13,0x60,0x18,0x20,

0x15,0x40,0x13,0x40,

0x18,0x80,0x00

);

voidintO()interrupt1〃采用中斷0控制節(jié)拍

{TH0=0xd8;

TLO=Oxef;

n-;

)

voiddelay(unsignedcharm)〃控制頻率延時(shí)

(

unsignedi=3*m;

while(—i);

)

voiddelayms(unsignedchara)〃豪秒延時(shí)子程序

(

while(-a);〃采用while(-a)不要采用while(a-);各位可編譯一下看看

匯編結(jié)果就知道了!

)

voidmain()

{unsignedcharp,m;〃m為頻率常數(shù)變量

unsignedchari=0;

TMOD&=0x0f;

TMODI=0x01;

TH0=0xd8;TL0=0xef;

IE=0x82;

play:

while(l)

a:p=music_tab[i];

if(p—0x00){i=0,delayms(lOOO);gotoplay;}〃如果碰到結(jié)束符,延時(shí)1

秒,回到開(kāi)始再來(lái)一遍

elseif(p—Oxff){i=i+l;delayms(100),TR0=0;gotoa;}〃若碰到休止符,延時(shí)100ms,

繼續(xù)取下一音符

else{m=music_tab[i++],n=music_tab[i++];}〃取頻率常數(shù)和節(jié)拍

常數(shù)

TR0=l;〃開(kāi)定時(shí)器1

while(n!=0)Beep=~Beep,delay(m);〃等待節(jié)拍完成,

通過(guò)P1口輸出音頻(可多聲道哦!)

TR0=0;〃關(guān)定時(shí)器1

ORG0000H;偽指令,指定程序從8000H開(kāi)始存放

AJMPMAIN;跳轉(zhuǎn)指令,程序跳轉(zhuǎn)到MAIN處

ORG01OOH;偽指令,指定以下程序從8100H開(kāi)始存放

MAIN:

MOVSP,#60;給堆棧指針賦初值

LOOP:ACALLMUSIC

AJMPLOOP

,***********************

;蜂鳴器輸出聲響子程序

,*********************

MUSIC:

MOVR5,#60H;控制音長(zhǎng)

MIC:

CPLP1.5

ACALLDELAY5MS;控制音調(diào)

DJNZR5,MIC

RET

,***************

;延時(shí)子程序

DELAY5MS:

MOVR7,#3H

DELAYO:MOVR6,#40H

DELAY1:DJNZR6,DELAY1

DJNZR7,DELAY0

RET

END

orgOOOOh

ajmpmain

org0030h

main:

MOVR2,#08H

DLV1:MOVR3,#0FAH

DLV2:CPLP1.5

LCALLDELAY1;延時(shí)

DJNZR3JDLV2

DJNZR2,DLV1

MOVR2,#10H;改變循環(huán)初值

DLV3:MOVR3,#0FAH

DLV4:CPLP1.5

LCALLDELAY2

DJNZR3,DLV4

DJNZR2,DLV3

ajmpmain

delay1:

movr7,#00h

LLA:DJNZR7,LLA

ret

delay2:

movr7,#128

LLB:DJNZR7,LLB

ret

end

ORG0000H

JMPMAIN

ORG000BH

JMPINTTO

ORG01OOH

MAIN:MOVSP,#60H

MOVTMOD,#01H

SETBETO

SETBEA

SETBTRO

STARTO:;clrPl.5

MOV30H,#00H

NEXT:MOVA,30H

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVR2,A

JZENDD

ANLA,#0FH

MOVR5,A

MOVA,R2

SWAPA

ANLA,#0FH

JNZSING

CLRTRO

JMPDI

SING:DECA

MOV22H,A

RLA

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVTH0,A

MOV21H,A

MOVA,22H

RLA

INCA

MOVCA,@A+DPTR

MOVTL0,A

MOV20H,A

SETBTRO

DI:CALLDELAY

INC30H

JMPNEXT

ENDD:CLRTRO

JMPSTARTO

INTTO:

PUSHPSW

PUSHACC

MOVTL0,20H

MOVTH0,21H

CPLPl.5

POPACC

POPPSW

RETI

DELAY:MOVR7,#02

DELAYO:MOVR4,#187

DELAY1:MOVR3,#248

DJNZR3,$

DJNZR4,DELAY1

DJNZR7,DELAYO

DJNZR5,DELAY

RET

TABLE:DB82HoiH,81H,94H,84H,0B4H,0A4H,04H

DB82H,01H,81H,94H,84H,0C4H,0B4H,04H

DB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H

DB0E2H,01H,OE1H,0D4H,0B4H,0C4H,0B4H,04H

DB82H,01H,81H,94H,84H,0B4H,0A4H,04H

DB82H,01H,81H,94H,84H,0C4H,0B4H,04H

DB82HoIH,81H,0F4H,0D4H,0B4H,0A4H,94H

DB0E2H,01H,OE1H,0D4H,0B4H,0C4H,0B4H,04H

//TABLEI:DW64260,64400,64524,64580,64684,64777,64820,64898

//DW64968,65030,65058,65110,65157,65178,65217

END

ORGOOOOH

LIMPSTART

ORGOOOBH

INC20H;中斷服務(wù),中斷計(jì)數(shù)器加1

MOVTH0,#0D8H

MOVTL0,#0EFH;12M晶振,形成10毫秒中斷

RETI

START:

MOVSP,#50H

MOVTH0,#0D8H

MOVTL0,#0EFH

MOVTMOD,#01H

MOVIE,#82H

MUSICO:

NOP

MOVDPTR,#DAT;表頭地址送DPTR

MOV20H,#00H;中斷計(jì)數(shù)器清0

MOVB,#00H;表序號(hào)清0

MUSIC1:

NOP

CLRA

MOVCA,@A+DPTR;查表取代碼

JZENDO;是00H,則結(jié)束

CJNEA,#0FFH,MUSIC5

□MPMUSIC3

MUSIC5:

NOP

MOVR6,A

INCDPTR

MOVA,B

MOVCA,@A+DPTR;取節(jié)拍代碼送R7

MOVR7,A

SETBTRO;啟動(dòng)計(jì)數(shù)

MUSIC2:

NOP

CPLPl.5

MOVA,R6

MOVR3,A

LCALLDEL

MOVA,R7

CJNEA,20H,MUSIC2;中斷計(jì)數(shù)器(20H)=R7否?

;不等,則繼續(xù)循環(huán)

MOV20H,#00H;等于,則取下一代碼

INCDPTR

;INCB

LIMPMUSIC1

MUSIC3:

NOP

CLRTRO淋止100毫秒

MOVR2,#0DH

MUSIC4:

NOP

MOVR3,#0FFH

LCALLDEL

DJNZR2,MUSIC4

INCDPTR

LJMPMUSIC1

ENDO:

NOP

MOVR2,#10H;歌曲結(jié)束,延時(shí)1秒后繼續(xù)

MUSIC6:

MOVR3,#00H

LCALLDEL

DJNZR2,MUSIC6

UMPMUSICO

DEL:

NOP

DEL3:

MOVR4,#02H

DEL4:

NOP

DJNZR4,DEL4

NOP

DJNZR3,DEL3

RET

NOP

DAT:

db26h,20h,20h,20h,20h,20h,26h,10h,20h,l0h,20h,80h,26h,20h,30h,20h

db30h,20h,39hJ0h,30h,l0h,30h,80h,26h,20h,20h,20h,20h,20h,lch,20h

db20h,80h,2bh,20h,26h,20h,20h,20h,2bh,l0h,26h,l0h,2bh,80h,26h,20h

db30h,20h,30h,20h,39hJ0h,26hJ0h,26h,60h,40hJOh,39h』0h,26h,20h

db30h,20h,30h,20h,39h,l0h,26h,l0h,26h,80h,26h,20h,2bh,l0h,2bh,lOh

db2bh,20h,30h,l0h,39h,l0h,26h,l0h,2bh,l0h,2bh,20h,2bh,40h,40h,20h

db20h,l0h,20h,l0h,2bh,l0h,26h,30h,30h,80h,l8h,20h,l8h,20h,26h,20h

db20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20hJch,20h,20h,20h

db20h,80h,lch,20h,lch,20h,lch,20h,30h,20h,30h,60h,39h,10h,30h,lOh

db20h,20h,2bh,l0h,26h,l0h,2bhJ0h,26h,l0h,26h,l0h,2bh,l0h,2bh,80h

db18h,20h,l8h,20h,26h,20h,20h,20h,20h,60h,26h,l0h,2bh,20h,30h,20h

db30h,20h,lch,20h,20h,20h,20h,80h,26h,20h,30h,l0h,30h,10h,30h,20h

db39h,20h,26h,lOh,2bh,l0h,2bh,20h,2bh,40h,40h,l0h,40h,l0h,20h,lOh

db20h,l0h,2bh,l0h,26h,30h,30h,80h,00H

END

/*繼電器實(shí)驗(yàn)

/*連接方法:連接JP11(P2)與JP5(按鈕接口)

/*按下P2.7繼電器P1.4動(dòng)作

#include<reg51.h>//51的端口和各特殊寄存器定義在此文件中

sbitRELAY=P1A4;〃定義繼電器對(duì)應(yīng)單片機(jī)管腳

sbitKI=P2A7;//定義按鈕對(duì)應(yīng)單片機(jī)管腳

主函數(shù)*

main()

(

if(!K1)RELAY=0;〃按鈕按下開(kāi)啟繼電器

elseRELAY=1;//按鈕松開(kāi)關(guān)閉繼電器

138譯碼器實(shí)驗(yàn)

*實(shí)驗(yàn)?zāi)康?1.了解138譯碼器工作原理*

2.學(xué)會(huì)用C語(yǔ)言對(duì)138譯碼器編程控制*

實(shí)驗(yàn)現(xiàn)象:LED燈每隔一段時(shí)間循環(huán)點(diǎn)亮*

接線方法:J15連JP1(參考圖片連接)*

#include<reg5l.h>

sbitHC138A=P2A2;//定義譯碼器輸入端A在P2.2管腳上

sbitHC138B=P2八3;//定義譯碼器輸入端B在P2.3管腳上

sbitHC138C=P2A4;〃定義譯碼器輸入端C在P2.4管腳上

延時(shí)函數(shù)

voiddelay(unsignedinti)

(

unsignedcharj;

for(i;i>0;i-)〃循環(huán)1500*255次CPU在這里執(zhí)行一段時(shí)間

for(j=255;j>0;j-);

main()

(

//點(diǎn)亮第一個(gè)LED燈

HC138C=0;HC138B=0;HC138A=0;//輸入000

delay(1500);〃延時(shí)

//點(diǎn)亮第二個(gè)LED燈

HC138C=0;HC138B=0;HC138A=1;〃輸入001

delay。500);//延時(shí)

//點(diǎn)亮第三個(gè)LED燈

HC138C=O;HC138B=l;HC138A=0;//輸入010

delay(1500);

//點(diǎn)亮第四個(gè)LED燈

HC138C=0;HC138B=1;HC138A=1;〃輸入Oil

delay(2000);

//點(diǎn)亮第五個(gè)LED燈

HC138C=l;HC138B=0;HC138A=0;〃輸入100

delay(1500);

//點(diǎn)亮第六個(gè)LED燈

HC138c=1;HC138B=O;HC138A=1;〃輸入101

delay(1500);

HC138C=l;HC138B=l;HC138A=0;〃輸入110

delay(1500);

HC138c=I;HC138B=1;HC138A=1;〃輸入111

delay(1500);

Inputs

Outputs

EnableSelect

G1G2#CBAY0Y1Y2Y3Y4Y5Y6Y7

XHXXXHHHHHHHH

LXXXXHHHHHHHH

HLLLLLHHHHHHH

HLLLHHLHHHHHH

HLLHLHHLHHHHH

HLLHHHHHLHHHH

HLHLLHHHHLHHH

HLHLHHHHHHLHH

HLHHLHHHHHHLH

HLHHHHHHHHHHL

?G2-G2AiG2B

H"N^iLwlowtowel.X*don'tc?e74LS138

*標(biāo)題:試驗(yàn)數(shù)碼管上如何顯示數(shù)字(共陽(yáng)極)*

*連接方法:P0與JP3用8PIN排線連接

*請(qǐng)學(xué)員認(rèn)真消化本例程,用單片機(jī)腳直接控制數(shù)碼管*

#include<reg5l.h>

voiddelay(unsignedinti);〃函數(shù)聲名

//此表為L(zhǎng)ED的字模01234567

89abcdef

unsignedcharcodeLED7Code[]=

{?Ox3F,?0x06,?Ox5B,?0x4F,?0x66,?0x6D,?0x7D,?0x07,?0x7F,?0x6F,?0x77,?0x7C,?0x39,?0x5

E,?0x79,?0x71};

main()

(

unsignedintLedNumVal;〃定義變量

while(l)

//將字模送到P0口顯示

LedNumVal++;

P0=LED7CodelLedNumVal%16J&0x7f;//LED70x7f為小數(shù)點(diǎn)共陰和共陽(yáng)此

處也是不一樣;

delay(6000);〃調(diào)用延時(shí)程序

延時(shí)程序*

voiddelay(unsignedinti)

(

charj;

for(i;i>0;i-)〃循環(huán)6000*200次

for(j=200;j>0;j-);

我5I極數(shù)—丁

*標(biāo)題:試驗(yàn)數(shù)碼管上顯示數(shù)字(單片機(jī)直接實(shí)現(xiàn)位選共陰極)

*連接方法:P0與J12用8PIN排線連接P1與JP16用排線連接

*請(qǐng)學(xué)員認(rèn)真消化本例程,用573鎖存器控制和單片機(jī)腳直接位選控制(非譯碼器控制)數(shù)碼

管*

#include<reg5l.h>

voiddelay(unsignedinti);〃函數(shù)聲名

charDelayCNT;//定義變量

〃此表為L(zhǎng)ED的字模,共陰數(shù)碼管0-9-

unsignedcharcodeDisp_Tab[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};〃段碼控制

〃此表為8個(gè)數(shù)碼管位選控制,共陰數(shù)碼管1-8個(gè)-

unsignedcharcodedispbitf8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};〃位選控制

查表的方法控制

main()

unsignedinti,LedNumVal=l;〃變量定義

unsignedintLedOut[10J;〃變量定義

DelayCNT=O;

while(l)

if(++DelayCNT>=20)〃控制數(shù)字變化速度

(

DelayCNT=O;//20個(gè)掃描周期清零一次

++LedNumVal;〃每隔20個(gè)掃描周期加一次

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[l]=Disp_Tab[LedNumVal%1000/100]l0x80;

LedOut[2]=Disp_Tab[LedNumVal%100/10];

LedOut[3]=Disp_Tab[LedNumVal%10];

LedOut[4]=Disp_Tab[LedNumVal%10000/1000];〃千位

LedOut[5]=Disp_Tab[LedNumVal%1000/100]l0x80;〃百位帶小數(shù)點(diǎn)

LedOut[6]=Disp_Tab[LedNumVal%100/10];〃十位

LedOut[7]=Disp_Tab[LedNumVai%10];//個(gè)位

for(i=0;i<9;i++)

{

PO=LedOutliJ;

Pl=dispbit[i];〃使用查表法進(jìn)行位選

/*switch(i)〃使用switch語(yǔ)句控制位選

caseO:P1=0x7F;break;

case1:P1=OxbF;break;

case2:P1=OxdF;break;

case3:P1=OxeF;break;

case4:P1=0xi7;break;

case5:P1=Oxfb;break;

case6:P1=Oxfd;break;

case7:P1=Oxfe;break;

*/

delay(150);〃掃描間隔時(shí)間太長(zhǎng)會(huì)數(shù)碼管會(huì)有閃爍感

)

voiddelay(unsignedinti)

(

charj;

for(i;i>0;i-)

for(j=200;j>0;j-);

)

*標(biāo)題:試驗(yàn)數(shù)碼管上顯示數(shù)字(譯碼器位選共陰極)*

*連接方法:P0與J12用8P1N排線連接

*請(qǐng)學(xué)員認(rèn)真消化本例程,用573鎖存器和譯碼器控制和數(shù)碼管

#include<reg5l.h>

sbitLS138A=P2A2;〃定義138譯碼器的輸入A腳由P2.2控制

sbitLS138B=P2八3;〃定義138譯碼器的輸入腳B由P2.3控制

sbitLS138C=P2A4;〃定義138譯碼器的輸入腳C由P2.4控制

voiddelay(unsignedinti);〃函數(shù)聲名

charDelayCNT;

〃此表為L(zhǎng)ED的字模,共陰數(shù)碼管0?9-

unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

/************主函數(shù)**********************/

main()

(

unsignedinti,LedNumVal;

unsignedintLedOut[10];

DelayCNT=0;

while(l)〃進(jìn)入循環(huán)狀態(tài)

(

if(++DelayCNT>=50)

{

DelayCNT=0;〃延時(shí)計(jì)數(shù)每掃描一次加一次

++LedNumVal;//每隔50個(gè)掃描周期加一次

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOutLlJ=Disp_Tab[LedNumVal%1000/100JI0x80;

LedOut[2]=Disp_Tab[LedNumVal%100/10];

LedOutl3J=Disp_Tab[LedNumVal%10J;

LedOut[4]=Disp_Tab[LedNumVal%10000/1000];〃千位

LedOut[5]=Disp_Tab[LedNumVal%1000/100]l0x80;//百位帶小數(shù)點(diǎn)

LedOut[6]=Disp_Tab[LedNumVal%100/10];〃十位

LedOutl7J=Disp_Tab[LedNumVal%10];〃個(gè)位

for(i=0;i<8;i++)〃實(shí)現(xiàn)8位動(dòng)態(tài)掃描循環(huán)

(

PO=LedOut[i];〃將字模送到P0口顯示

switch(i)〃使用switch語(yǔ)句控制位選也可以是用查表的方式學(xué)員可以試著自

己修改

(

caseO:LS138A=0;LS138B=O;LS138C=0;break;

case1:LS138A=1;LS138B=O;LS138C=O;break;

case2:LS138A=0;LS138B=1;LS138C=0;break;

case3:LS138A=1;LS138B=1;LS138C=O;break;

case4:LS138A=0;LS138B=0;LS138C=1;break;

case5:LS138A=l;LS138B=0;LS138C=1;break;

case6:LS138A=0;LS138B=1;LS138C=1;break;

case7:LS138A=1;LS138B=1;LS138C=1;break;

delay(150);

)

*延時(shí)程序*

voiddelay(unsignedinti)

charj;

for(i;i>0;i-)

for(j=200;j>0;j-);

)

****

*標(biāo)題:74HC573輸出使能試驗(yàn)(單片機(jī)直接實(shí)現(xiàn)位選共陰極)

*連接方法:PO

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論