电机学院单片机实验程序参考Word格式文档下载.docx
《电机学院单片机实验程序参考Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电机学院单片机实验程序参考Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
}//闪烁三次
P1=0x00;
//全部暗掉
}
}
实验二
/*实验二花样灯--内容:
花样灯一般有两种方法实现:
1、程序循环执行2、查表法---------这里我们两种都使用一下-*/
#include<
reg51.h>
/*--------------花样表格-----------------------*/
unsignedcharcodeseg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};
voidDelay(unsignedintt);
//函数声明
/*------------------主函数------------------*/
main()
unsignedchari;
//定义一个无符号字符型//局部变量i取值范围0~255
P1=0xFE;
//第1个LED亮
for(i=0;
8;
{
Delay(20000);
P1<
<
=1;
}
P1=0x7F;
//第8个LED亮
P1>
>
P1|=0x01;
P1|=0x80;
/*---------下面通过查表方法获得花样参数----------*/
16;
i++)//查表可以简单的显示各种花样实用性更强
P1=seg[i];
/*延时函数,含有输入参数unsignedintt,无返回值
unsignedint是定义无符号整形变量,其值的范围是0~65535*/
voidDelay(unsignedintt)
while(--t);
实验三
//38译码器
sbitP2_0=P2^0;
sbitP2_1=P2^1;
sbitP2_2=P2^2;
unsignedintt;
unsignedintk0;
unsignedintk1;
unsignedintk2;
if(P2_0==1)//开关按下去的时候为0
k0=4;
elsek0=0;
if(P2_1==1)
k1=2;
elsek1=0;
if(P2_2==1)
k2=1;
elsek2=0;
t=k0+k1+k2;
switch(t)
case0:
P1=0xfe;
break;
case1:
P1=0xfd;
case2:
P1=0xfb;
case3:
P1=0xf7;
case4:
P1=0xef;
case5:
P1=0xdf;
case6:
P1=0xbf;
case7:
P1=0x7f;
实验四
//中断报警,开关按下报警
sbitP3_7=P3^7;
unsignedchara[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
voiddelay(unsignedintn)
n;
unsignedintj;
EA=1;
//CPU开中断
EX0=1;
//开INT0非中断
IT0=0;
//令INT0非低电平触发
while
(1)
P3_7=1;
for(j=0;
{
P1=a[j];
delay(30000);
}
voidint0()interrupt0
unsignedintk;
for(k=0;
k<
4;
k++)
P3_7=~P3_7;
delay(50000);
P3_7=1;
实验五
//红绿灯
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_5=P1^5;
sbitP1_6=P1^6;
sbitP1_7=P1^7;
voidtime(unsignedcharn)
while(n)
TH1=0x3C;
TL1=0xB0;
TR1=1;
while(!
TF1);
TF1=0;
n--;
TR1=0;
TMOD=0x10;
EA=1;
EX0=1;
IT0=0;
P1=0xde;
time(100);
P1_0=0;
P1_5=0;
P1_6=0;
time(10);
P1_5=1;
P1=0x7b;
P1_1=0;
P1_2=0;
P1_7=0;
P1_2=1;
}
unsignedcharb;
b=P1;
P3_7=0;
P1=0x7e;
time(40);
TR1=1;
P1=b;
实验六
//数码管显示60秒倒计时
#defineucharunsignedchar
#defineuintunsignedint
uchart,a,s,g;
uchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitP3_4=P3^4;
sbitP3_5=P3^5;
voidstart();
voiddisplay(uchars,ucharg);
voiddelay(uintz);
start();
if(a==20)
a=0;
t--;
g=t%10;
s=t/10;
if(t==0)
P3_7=0;
t=60;
}
display(s,g);
voidstart()//程序初始化
t=60;
P3_4=1;
P3_5=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
IT0=1;
P0=table[0];
voiddisplay(uchars,ucharg)
P3_5=0;
P0=table[s];
delay(50);
P3_4=0;
P0=table[g];
}
voidtimer0()interrupt1
a++;
voiddelay(uintz)
uintx,y;
for(x=z;
x>
0;
x--)
for(y=10;
y>
y--);
实验七
//键盘接口技术
#include"
unsignedintm;
signedcharnum,i,j,t;
unsignedchara[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitP34=P3^4;
sbitP35=P3^5;
intfastfound()
P2=0x87;
if((P2&
0x07)!
=0x07)
return
(1);
else
return(0);
kbscan(void)
unsignedcharsccode,recode;
unsignedintx;
for(t=200;
t>
t--);
if((P2&
P2=0x87;
recode=P2&
0x07;
P2=0xf8;
sccode=P2&
0xf8;
switch(sccode+recode)
case0xf3:
x=1;
case0xeb:
x=2;
case0xdb:
x=3;
case0xbb:
x=4;
case0xf5:
x=5;
case0xed:
x=6;
case0xdd:
x=7;
case0xbd:
x=8;
case0xf6:
x=9;
case0xee:
x=10;
case0xde:
x=11;
case0xbe:
x=12;
return(x);
num=0;
if(fastfound()==1)
num=kbscan();
if(num<
10)
P0=a[num];
P34=0;
P35=1;
else
i=num/10;
j=num%10;
P0=a[j];
P34=0;
P35=1;
for(m=0;
m<
100;
m++);
P0=a[i];
P34=1;
P35=0;