实验一
(1)将无符号整数 0xcd,182,0x59,0xaf,0xb5,251,0xa8,0x3f,0xc8,0x7e 存入数组,通过编程找出最
小数并送 P1 口显示。
#include
void main(void)
{
unsigned int i,p;
unsigned int t[]={
0xcd,182,0x59,0xaf,0xb5,251,0xa8,0x3f,0x8c,0x7e};
p=t[0];
for(i=0;i<=9;i++)
{
if(p>t[i])
p=t[i];
}
P1=p;
}
(2)采用软件延时,流水点亮 P1 口的高 4 位所接的发光二极管。(扩展要求:P1 口所接发光二极管花
样闪烁)
#include
void delay(){
unsigned int i;
for(i=0;i<20000;i++){
;
}
}
void main(){
unsigned int a[]={16,32,64,128};
int i;
for(i=0;i<4;i++){
P1=a[i];
delay();
}
}
(3)利用 P1 和 P3 口,分别接开关和发光二极管,采用无条件传输控制方式,实现开关控制发光二极
管的亮灭。
#include
void main(){
char key=0;
while(1){
key=P1&0xF0;
if(key!=0xF0)
P3=key;
}
}
实验二
(1)利用外中断/INT0,控制 P1 口所接 LED 花样闪烁。
#include
void delay();
void main(void)
{
P1=0;
EA=1;
EX0=1;
IT0=0;
while(1){}
}
void delay(){
unsigned int j;
for(j=0;j<40000;j++)
;
}
void pro_int0() interrupt 0
{
unsigned int i;
unsigned int a[]={2,8,32,128};
while(1)
for(i=0;i<4;i++){
P1=a[i];
delay();
}
}
(2)利用外中断/INT1,统计中断次数,并将统计结果送 P1 口的 8 位 LED 显示。
#include
unsigned
int i=0;
void delay();
void main(void)
{
P1=0;
EA=1;
EX1=1;
IT1=1;
while(1)
{}
}
void delay(){
unsigned int j;
for(j=0;j<30000;j++)
;
}
void pro_int1() interrupt 2
{
i++;
P1=i;
delay();
}
实验三
(1)利用 8051 的定时/计数器控制循环点亮 P1 口所接每一位 LED。要求点亮周期为 1.3S。(使用
方式 0、1 实现)、
方式 0
#include
void dely(void)
{
unsigned char i;
TMOD=0x00;
TH0=0x34;
TL0=0x1C;
TR0=1;
for(i=0;i<200;i++)
{
while(TF0==0)
;
TF0=0;
TH0=0x34;
TL0=0x1C;
}
}
void main(void)
{
unsigned int a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned int i;
while(1)
{
for(i=0;i<8;i++)
{
P1=a[i];
dely();
}
}
}
方式 1
#include
void dely(void)
{
unsigned char i;
TMOD=0x01;
TH0=0x02;
TL0=0x18;
TR0=1;
for(i=0;i<20;i++)
{
while(TF0==0)
;
TF0=0;
TH0=0x02;
TL0=0x18;
}
}
void main(void)
{
unsigned int a[8]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };
unsigned int i;
while(1)
{
for(i=0;i<8;i++)
{
P1=a[i];
dely();
}
}
}
(2)利用 8051 的计数器对外部脉冲进行计数,将计数次数通过 P1 口输出。
#include
unsigned int a=0;
void main(void)
{
EA=1;
ET0=1;
TMOD=0x05;
TH0=0xff;
TL0=0xff;
TR0=1;
while(1)
{
}
P1=a;
}
void pro_T0() interrupt 1
{
a++;
TH0=0xff;
TL0=0xff;
}
实验四
(1)通过并行口 P1 实现十字路口交通灯的模拟控制。
#include
void delay1(void){
int i;
for(i=0;i<60;i++)
{
while(TF1==0)
;
TL1=15536%256;