您的位置:首页 > 编程语言 > C语言/C++

单片机实验3

2017-12-30 12:41 225 查看
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--)
{
;
}
}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 单片机