51单片机入门实验及示例程序Word格式.docx
《51单片机入门实验及示例程序Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机入门实验及示例程序Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
![51单片机入门实验及示例程序Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/29/2e0ea47a-35df-4b94-8100-ff415aa9e749/2e0ea47a-35df-4b94-8100-ff415aa9e7491.gif)
0;
i--)
for(j=110;
j>
j--);
}
voidmain()
EA=1;
//中断总允许位
IT1=0;
//设置外部中断1的触发方式为电平触发
EX1=1;
//开外部中断
P35=0;
P1=0xaa;
//初始化P1,方法二中必须写这句
while
(1);
voidt1_115()interrupt2
/*delay_115(20);
//按键消抖
while(!
P33);
//当松开按钮时程序才往下执行,否则一直停留在此处
delay_115(20);
//按键消抖*/
//方法一:
/*if(P1==0x55)
P1=0xaa;
else
P1=0x55;
*/
//方法二:
(若使用方法二则给P1初始化为0xaa或0x55)
//P1=~P1;
//取反
if(P33==0)
{
delay_115(15);
if(P33==0)
{
if(flag)
{
P1=~P1;
flag=0;
}
}
else
//key=0;
flag=1;
}
//key=0;
flag=1;
2、
ucharcount_115=0;
uchartemp_115=0xfe;
TMOD=0x01;
//设置T0的工作方式为方式1
ET0=1;
//开定时器T0
TR0=1;
//定时器T0启动
TH0=0x3C;
//设置初值
TL0=0xB0;
P0=0x10;
//打开4位数码管
while
(1)
if(count_115==20)//该变量每50ms加1,当count_115等于20时,即时间间隔为1s
count_115=0;
//将计数变量重置为0,以便开始下1s的定时
P1=temp_115;
temp_115=temp_115<
<
1;
//左移一位
temp_115=temp_115+0x01;
//最低位补1
if(temp_115==0xbf)//由于只需要点亮最外圈的六个管子,故此处重置temp_115为0xfe
temp_115=0xfe;
voidt0_115()interrupt1
TH0=0x3C;
//装入初值此处为50ms执行一次中断
count_115++;
//每执行一次中断,该变量加1
TR0=~TR0;
//暂停或启动定时器T0
3、此题过于简单,略。
。
4、
#defineucharunsignedchar
ucharthedata;
bitflag;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
//SM0=0;
//SM1=1;
//REN=1;
SCON=0x50;
ES=1;
while
(1)
if(flag==1)
ES=0;
flag=0;
SBUF=thedata;
while(!
TI);
TI=0;
ES=1;
voidserial()interrupt4
thedata=SBUF;
RI=0;
flag=1;
5、
if(thedata>
=48&
&
thedata<
=57)
thedata-=48;
=97&
thedata<
=122)//根据ascii值判断是否接收到了'
a'
-'
z'
thedata-=32;
//将小写字母转换成大写ascii值差32
6、
ucharcount=0;
uchartemp;
uchar*thedata;
uchari;
TMOD=0x21;
//TR0=1;
if(temp=='
1'
)
TR0=1;
thedata="
Start"
;
2'
TR0=0;
Stop"
//for(i=0;
i<
5;
i++)
while(*thedata)
//SBUF=thedata[i];
SBUF=*thedata;
while(!
TI=0;
thedata++;
if(count==20)
count=0;
P1=~P1;
voidt0()interrupt1
count++;
temp=SBUF;
7、
string.h>
uchari;
uchardata_count=0;
ucharreceive[8]="
\0\0"
ucharsend_Ok1[]="
Ok1\n"
ucharsend_Ok2[]="
Ok2\n"
ucharStart[]="
ucharStop[]="
ucharflag;
TR0=1;
data_count=0;
for(i=0;
4;
SBUF=send_Ok1[i];
if(flag==2)
TR0=0;
SBUF=send_Ok2[i];
if(RI)
{
RI=0;
receive[data_count]=SBUF;
if(strcmp(receive,Start)==0)
8;
receive[i]='
\0'
if(strcmp(receive,Stop)==0)
flag=2;
}
data_count++;
8、
ucharcount=0,NUM=10;
voiddelay(intx)
intm,n;
for(m=x;
m>
m--)
for(n=110;
n>
n--);
uchari=1;
P1=0x00;
delay(20);
if(P33==0)
P1=0xff;
if(i==1)
{
count=0;
NUM=10;
SBUF='
i++;
}
elseif(i==2)
NUM=20;
SBUF='
TI=0;
else//if(i==3)
NUM=40;
ES=0;
SBUF='
3'
while(!
TI=0;
ES=1;
i=1;
}
if(count==NUM)
if(NUM==10)
P1=~P1+0xf0;
elseif(NUM==20)
P1=~P1+0x0f;
else//if(NUM==40)