单片机实验程序全.docx

上传人:b****6 文档编号:12730284 上传时间:2023-06-07 格式:DOCX 页数:19 大小:53.03KB
下载 相关 举报
单片机实验程序全.docx_第1页
第1页 / 共19页
单片机实验程序全.docx_第2页
第2页 / 共19页
单片机实验程序全.docx_第3页
第3页 / 共19页
单片机实验程序全.docx_第4页
第4页 / 共19页
单片机实验程序全.docx_第5页
第5页 / 共19页
单片机实验程序全.docx_第6页
第6页 / 共19页
单片机实验程序全.docx_第7页
第7页 / 共19页
单片机实验程序全.docx_第8页
第8页 / 共19页
单片机实验程序全.docx_第9页
第9页 / 共19页
单片机实验程序全.docx_第10页
第10页 / 共19页
单片机实验程序全.docx_第11页
第11页 / 共19页
单片机实验程序全.docx_第12页
第12页 / 共19页
单片机实验程序全.docx_第13页
第13页 / 共19页
单片机实验程序全.docx_第14页
第14页 / 共19页
单片机实验程序全.docx_第15页
第15页 / 共19页
单片机实验程序全.docx_第16页
第16页 / 共19页
单片机实验程序全.docx_第17页
第17页 / 共19页
单片机实验程序全.docx_第18页
第18页 / 共19页
单片机实验程序全.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机实验程序全.docx

《单片机实验程序全.docx》由会员分享,可在线阅读,更多相关《单片机实验程序全.docx(19页珍藏版)》请在冰点文库上搜索。

单片机实验程序全.docx

单片机实验程序全

2基本输入输出实验(蜂鸣器控制程序)

严******************************************************

名称:

基本输入输出(LO)程序说明:

#mclude^defineumtunsignedmtfrdefineucharunsignedcharsbitbuzzei-=P3A5;

sbitKeyadd=P2A0;

sbitKeydec=P2Al;sbitKeycom=P2A2;

voidDelay(umtz)

{uiiitx;

ucharv;fbi(x=z;x>0;x—)

{for(y=250;y>0;y-);

}

}

〃包含头文件

〃宏定义

〃延时

voidmain(void)

{uchai-voice;

voice=3;

wlule(l)

{

if(Keyadd==O)

voice=l;

if(Keydec==O)

voice=2;

if(Keycom==0)

voice=3;

if(voice==l)

{buzzei-^buzzer;

Delay(l);

}

elseif(voice==2){buzzei-^buzzer;Delay(20);

}

else

〃按键被按下时为0

buzzer=l;

 

3定时器中断实验

严*****************名称:

实验三作业说明:

********************************************************/

#mclude^defineumtunsignedmt#defineucharunsignedcharuchaicounter;

uchaivoice;

sbitbuzzei-=P3A5;

sbitKeyadd=P2A0;

sbitKeydec=P2Al;

sbitKeycom=P2A2;sbitKeycan=P2A3;

〃包含头文件

〃宏定义

计算计数器初值-//

^defineTO_TIME1

^defineTOReLoadLl

#defineTOReLoadHl

254〃定时时间us为单位

((65536-(umt)(T0_TINIE1*11.0592/12))%256)((65536-(umt)(T0_TEvIEl*l1.0592/12))/256)

//

 

计算计数器初值//

^defineT0ReLoadL2

#defineT0ReLoadH2

#defineT0_TIME21400〃定时时间us为单位

((65536-(umt)(T0_TINIE2*11.0592/12))%256)((65536・(uint)(T0_TIME2*11.0592/12))/256)

严********************************************************

名称:

主程序说明:

**********************************************************/

voidmain(void)

{

//初始化TIMER0

TMOD|=0x01;

〃定时器TO方式1

TH0

=TOReLoadHl;

〃装载计数器初值

TLO

=TOReLoadLl;

TRO

=1;

〃启动TuneiO

ETO

=1;

//TiinerO中断使能

EA

=1;

〃总开关使能

//——

大循坏

countei=0;

voice=l;

if(Keydec==O)

voice=2;

if(Keycom==0)

voice=3;

 

名称:

TiinerO中断服务子程序

功能:

产生10ms定时中断

voidTimeiO_Iiit(void)intewupt1{if(voice=l)

{TH0=T0ReLoadHl;

〃重装载计数器初值

TL0=T0ReLoadLl;buzzei-^buzzer;

}

if(voice=2)

{TH0=T0ReLoadH2;

TL0=T0ReLoadL2:

buzzei-^buzzer;

}if(voice=3)

4LED数码管动态扫描显示实验

#mclude

#defineuiiitunsignediiit

#defineuclwunsignedchar

//LED显示代码-//

//bit7bit6bit5bit4bit3bit2bitlbitO//dpGCDEFBA

#defineTOReLoadL

#defineTOReLoadH

uchaicodeseg[10]={0x3f.0x22.0x5b.0x73?

0x66,//0,1,23,4

0x75,0x7d,0x23,0x7f,0x77,};//5,6,7,8,9

uchai

idatadis_buSLl[4];

〃第一行LED显示缓冲

uchai

idatadis_buSL2[4];

//第二行LED显示缓冲

uchai

counter;

sbitU4_

■HC574_CP

=PlA0;

//S3显示锁存74HC574脉冲

sbitU5_

■HC574_CP

=P1A1;

//S4显示锁存74HC574脉冲

^defineT0_TDvIE10000

〃定时时间us为单位

((65536-(umt)(T0_TDvIE*11.0592/12))%256)

((65536・(uint)(T0_TIME*ll・0592/12))/256)

严********************************************************

名称:

数码管显示驱动子程序

说明:

**********************************************************/voidDisplay(void)

{uchardatai,j,k.temp00;temp00=0x20;

〃关所有打描位

//S3显示锁存74HC574脉冲上升沿

//S4显示锁存74HC574脉冲上升沿

〃送扫描位

〃延时

//打描位移位

〃关所有打描位

for(i=0;i<4;i++){

Pl|=0x3C;PO=dis_buffLl[i];

U4HC574CP=0:

—z

U4HC574CP=1;P0=dis_buffL2[i];

U5HC574CP=0:

—z

U5HC574CP=1;Pl&=(^tempOO);for(j=0j<20^++)

{for(k=0;k<20;k++);

}

temp00»=l;

}

Pl|=0x3C;

严********************************************************

名称:

主程序

**********************************************************/

voidmain(void)

uchardatabai.shi.ge;uiiitdataNum;

uchardatatempOO;TMOD|=0x01;

THO=T0ReLoadH;

TLO=TOReLoadL;

TRO=1;

ETO=1;

EA=1;

countei-O;

Num=999;

for(;;)

{bai=NunV100;

tempOO=Num-bai*100;slu=temp00/10;

ge=temp00-slii*10;dis_bufLl[O]=O;dis_bufLl[l]=O;

dis_bufLl[2]=0;

dis_bufLl[3]=0;dis_bufL2[0]=0;

dis_bi】f!

L2[l]=seg[bai];dis_bi】f!

L2[2]=seg[shi];dis_buff_2[3]=seg[ge];

if(counter=100)

{

countei-O;Num—;

}

if(Num=0)

Num=999;

DisplavQ;

}

}

voidTimeiO_Iiit(void)intewupt1

〃定时器TO方式1

〃装载计数器初值

〃启动TunerO//TiinerO中断使能

〃总开关使能

〃调用LED数码管显示子程序

TH0=T0ReLoadH;

TLO=TOReLoadL;

countei++;

〃重装载计数器初值

 

5实时时钟与温度传感器实验(只需main()部分代码)voidmain(void)

{

ucharHour^Min.Sec;

//初始化TIMERO

TMOD|=OxOi;

THO=T0ReLoadH;TLO=TOReLoadL;

TRO=1;

ETO=1;

EA=1;

〃定时器TO方式1

〃装载计数器初值〃启动TunerO//TiinerO中断使能

〃总开关使能

countei=0;

//人循坏

WR_DS1302(0x8匕0X00);

WR_DS1302(0x84.0X14);

WR_DS1302(0x82,0X43);

WR_DS1302(0x80.0X00);

WR_DS1302(0x8匕0X80);

血(;;)

{

Hou尸RD_DS1302(0x85);

Mm=RD_DS1302(0x83);

Sec=RD_DS1302(0x81);

dis_buff.l[0]=seg[Hour»4];if(counter<=49)

dis_buSLl[l]=seg[Hour&OxOf]|0x80;elseif(countei<=99)

dis_bufiLl[l]=seg[Houi&OxOf];

elseif(countei-=100)counter=0;

dis_buff.l[2]=seg[Miii»4];

[3]=seg[Mm&0xOf];

dis_buff_2[0]=0;

dis_buff_2[l]=0;

dis_buff_2[2]=seg[Sec»4];

dis_buff_2[3]=seg[Sec&OxOf];

DisplavQ;

674HC595串行输入实验

//use_nop_()ftinction

#include

#iiiclude

#defineumtunsignedmt

#defineuclwunsignedchar

uchaicounter;

//计算计数器初值-//

 

 

严********************************************************

名称:

WR_74HC595

说明:

向2片74HC595写入2字节数据(HC595_buff)

**********************************************************/voidWR_74HC595(void){

ucharij,k,temp00;

 

HC595RegCLK=0;

HC595SluftCLK=0;

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

{

k=0X80;temp00=HC595_buffI1-1];

for(j=0j<8j++)

{

if(temp00&k)HC595S_Data=1;

elseHC595S_Data=0;

HC595ShiftCLK=1;k»=1;

〃锁存线置“低”

//HC595.CLK=0

//HC595.SDA

〃产生上升沿,移入数据

//k右移一位

HC595ShiftCLK=0;

//HC595.CLK

 

HC595RegCLK=1;

//产生上升沿,锁存数据

 

〃重装载计数器初值

voidTimeiO_Iiit(void)intewupt1{

TH0=T0ReLoadH;

TL0=T0ReLoadL;

countei++;

}

严********************************************************

名称:

主程序

说明:

main主函数放在所有子程序的后面,自称无需声明定义

voidmain(void)

{ucharCNj;

CN=0;

HC595_buff!

0]=0x00;

HC595.buff[l]=0x00;

初始化TIMERO

TMOD|=OxOi;

THO=T0ReLoadH;TLO=TOReLoadL;

TRO=1;

ETO=1;

EA=1;

〃定时器TO方式1

〃装载计数器初值〃启动TuneiO//TiinerO中断使能

〃总开关使能

 

counter=0;

血(;;)

{if(CN<10)

{

if(countei—50)

{counter=0;

HC595_buff[0]sHC595_buff[0];

HC595_buffI1]=〜HC595_biiffI1];CN++;

countei=0;

1=0;

if(CN==10){HC595_biiff!

O]=OxOO;

HC595_buff[l]=OxO8;}

elseif(CN==10)

{

if(countei—10)

{】++;

countei-0;

if(i<4)

{HC595_buffIl]»=l;

}elseif(i=4)

{HC595_buffl0]=0x80;HC595_bi】ff!

l]=0x00;

}

elseif(i<12)

{HC595_buffl0]»=l;

}

elseif(i=12)

{1=0;

HC595.bufftO]=OxOO;HC595.buff[l]=0x08;

}

}

}

WR_74HC595Q;

7交通信号灯控制实验(仅需TraficLighter_ctrl()?

程序部分代码)voidTraficLighter_ctil(void)

switch(TiaficLightei_state)

{

case0:

//初始化状态,两个方向都为红灯5秒钟

{if^timei^countl==50)

{

tiiner_countl=0;

HC595_buff!

0]=〜HC595_biiffT0];

HC595_buffI1]=〜HC595_bi】ffI1];

}

if(tiiner_count0==0)

TraficLighter_state=1;

timer_count0=30;

HC595_buffl0]=0;

}}break;case1:

HC595_bufIIl]=0;

〃状态1,南北方向红灯,东西绿灯

East_Green=l;

West_Green=l;

Nortli_Red=l;

Soutli_Red=l;

if(timei_count0==0)

TraficLightei_state=2;

timer_count0=5;

HC595_buffl0]=0;

}

}break;

case2:

HC595_bufIIl]=0;

〃状态2,南北方向红,东西黄灯闪烁

South_Red=l;

North_Red=l;

if(timei_count1=50)

timei_countl=0;

East_Ydlow=〜East_Y亡llow;

West_Ybllow=〜West_Ydlow;

if(timei_count0==0)

{

TraficLighter_state=3;

timei_count0=50;

HC595_bi】ff!

0]=0;

HC595_bi】ff{l]=0;

}

}break;

case3:

〃状态3,南北方向绿灯,东西红灯

{East_Red=l;

WesCRed=l;

Noitli_Green=l;

Soutli_Green=l;

if(timei_count0==0)

{

TraficLighter_state=4;

timei_countO=5;

HC595_bi】ff!

0]=0;

HC595_bi】ff{l]=0;

}

}break;

case4:

〃状态4,东西方向红,南北黄灯闪烁

{East_Red=l;

West_Red=l;

if(timei_count1=50)

{

timei_countl=0:

SouthYellow=-SouthYellow;

North_Ydlow=〜North_Yellow;

}

if(timei_count0==0)

{

TraficLighter_state=1;

timei_count0=5;

HC595_bi】ff!

0]=0;

HC595_bi】ff{l]=0;

}

}break;

〃包含头文件

〃宏定义

8UART串口通讯实验

#mclude^defineumtunsignedmt^defineucharunsignedcharucharRec_No;

uchaiRec_Data;uchai-Rec_Addr;

ucharSend_ok;

ucharRec.order;ucharSelf.Addi;

sbitrelay=P3A7;

严********************************************************

名称:

主程序

说明:

voidmain(void)

{

SMO

=0;

SMI

=1;

REN

=1;

TMOD|=0x20;

TH1

=Oxfd;

TL1

=Oxfd;

TRI

=1;

PCON&=Ox7f;

//UART串II初始化

〃串口方式1

〃允许接收

〃定时器T1方式2

〃装载计数器初值

〃启动Tuner1

//SMOD=03RT=9600bps;SMOD=1,ERT=19200bps;

Send_ok=0;

Self.Addr=0x02;

ES=1;〃打开串II中断

EA=1;〃总开关使能

//人循坏

while(l)

}

}

严***********************名称:

串II中断服务子程序功能:

**********************************************************/voidUARTO(void)mtenupt4{ucharTempO;

if(RI=l)〃接收到数据

{Rec_No++;

TenipO=SBUF;

RI=O;

if(Rec_No==l)

{Rec_Addr=TempO;

}〃必须软件清零标志

elseif(Rec_No==2)

{Rec_oidei-TempO;

Rec_No=0;

if(Rec_AddL=SelfLAddQ

if(Rec_ordei-=0x21)relay=O;

if(Rec_ordei-=0x22)

relav=l;if(Rec_ordei-=0x20){SEUF=Rec_No;

Send_ok=0;

}

}}

}if(TI=l)

TI=0;

if(Send_ok==0){SBUF=35;

Send_ok=l;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2