单片机实验程序全.docx
- 文档编号:25355557
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:19
- 大小:53.03KB
单片机实验程序全.docx
《单片机实验程序全.docx》由会员分享,可在线阅读,更多相关《单片机实验程序全.docx(19页珍藏版)》请在冰豆网上搜索。
单片机实验程序全
2基本输入输出实验(蜂鸣器控制程序)
严******************************************************
名称:
基本输入输出(LO)程序说明:
#mclude
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
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
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;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 程序