单片机实验3

1、实验内容一
1.1、问题一:
设ROM中的表格TAB中存储有8个无符号数(小于等于10),求这8个无符号数的算术平均值(结果只保留整数位),结果存入内部RAM30H中(先将TAB中存入8个常数,可采用指针或存储器绝对地址访问)。
1.2、问题一的代码
C语言采用存储器绝对地址访问代码如下:

#include <reg51.h>
#include <absacc.h>
int i;
void main()
{
	int code TAB[8] = {1,2,3,4,5,6,7,8};
	int sum = 0;
	for (i = 0; i < 8;i++)
	{
		sum += TAB[i];
	}
	sum = sum / 8;
	DBYTE[0x0030] = sum;
}

C语言采用指针绝对地址访问代码如下:

#include <reg51.h>
#include <absacc.h>
int i;
void main()
{
	int code TAB[8] = {1,2,3,4,5,6,7,8};
	int data *xp = 0x30;
	int sum = 0;
	for (i = 0; i < 8;i++)
	{
		sum += TAB[i];
	}
	sum = sum / 8;
	*xp = sum;
}

2、实验内容二
2.1、问题二:
设晶振为12MHz,编写一个延时N个500ms的延时子程序,N在调用前由主程序赋值。利用该子程序设计一个系统,控制一个发光二极管以不同的频率闪烁。
2.2、问题二的代码:
C语言代码如下:

#include <reg51.h>
void delay(int);
void main()
{
	int N = 3;
	while (1)
	{
		P1 = 0x00;
		delay(N);
		P1 = 0x0FF;
		delay(N);
	}
}
void delay(int n)
{
	int i,j;
	while(n--)
	{
	for (i = 208; i > 0;i--)
		for(j = 300 ; j > 0;j--)
		;
	}
}

3、实验内容三
3.1、问题三:
如图3-1所示,单片机P1口的P1.0和P1.1各接一个开关K1、K2,P1.4、P1.5、P1.6和P1.7各接一只发光二极管。由K1和K2的不同状态来确定哪个发光二极管被点亮。(if语句或switch语句)
这里写图片描述

图3-1

3.2、问题三的代码:
C语言switch语句代码如下:
#include<reg51.h>
void main ()
{
  char a;
  a=P1;
  a=a&0x03;
  switch(a)
  {
        case 0:     P1=0x7F;   break;
		case 1:     P1=0xBF;   break;
		case 2:     P1=0xDF;   break;
		default :   P1=0xEF; 
   }
}
C语言if语句代码如下:
#include <reg51.h>
void main()
{
	char a;
	a = P1;
	a = a&0x03;
	if (a == 0)
		P1 = 0x7F;
	else if(a == 1)
	   	P1 = 0xBF;
	else if (a == 2)
		P1 = 0xDF;
	else
		P1 = 0xEF;
}

4、实验内容四
4.1、问题四:
用单位杜邦线将I/O口P1.0与发光二极管LED1连接,利用PWM(脉冲宽度调制)原理控制该二极管的亮度逐渐变暗至不亮,再逐渐变亮。
4.2、问题四的代码:
C语言代码如下:

#include <reg51.h>
void delay(int);
sbit P1_0 = P1^0;
void main()
{
	 while(1)
	 {
		 int low,cycal = 500;
		 for (low = 1; low < cycal;low++)
		 {
		 	P1_0 = 1;
			delay(low);
			P1_0 = 0;
			delay(cycal - low);
		}
		for (low = 1; low < cycal;low++)
		 {
		 	P1_0 = 0;
			delay(low);
			P1_0 = 1;
			delay(cycal - low);
		}
	 }

}
void delay(int n)
{
	while(n--)
	{
		;
	}
}

猜你喜欢

转载自blog.csdn.net/chao_shine/article/details/78936995