单片机实验3
2017-12-30 12:41
225 查看
1、实验内容一
1.1、问题一:
设ROM中的表格TAB中存储有8个无符号数(小于等于10),求这8个无符号数的算术平均值(结果只保留整数位),结果存入内部RAM30H中(先将TAB中存入8个常数,可采用指针或存储器绝对地址访问)。
1.2、问题一的代码
C语言采用存储器绝对地址访问代码如下:
C语言采用指针绝对地址访问代码如下:
2、实验内容二
2.1、问题二:
设晶振为12MHz,编写一个延时N个500ms的延时子程序,N在调用前由主程序赋值。利用该子程序设计一个系统,控制一个发光二极管以不同的频率闪烁。
2.2、问题二的代码:
C语言代码如下:
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
4、实验内容四
4.1、问题四:
用单位杜邦线将I/O口P1.0与发光二极管LED1连接,利用PWM(脉冲宽度调制)原理控制该二极管的亮度逐渐变暗至不亮,再逐渐变亮。
4.2、问题四的代码:
C语言代码如下:
4000
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
相关文章推荐
- 学习笔记 从零开始学单片机(1) 建立实验环境
- 惠州学院-单片机实验1-P1口亮灯实验
- 单片机实验一
- 简易波形显示器——单片机实验结课成果
- 单片机实验: 三轴磁场模块 GY-271
- 单片机第二次实验
- c51单片机超声测距hcsr04在 rtos运行的 实验 基于陈明计先生的smallrtos
- 单片机实验——4X4矩阵键盘识别技术
- 单片机实验-A/D和D/A转换
- 【单片机】编码键盘实验
- 单片机 并行端口输入输出实验
- 惠州学院-单片机实验3-P3.3口输入,P1口输出
- AVR单片机模数转换的ADC实验 ATmega16
- 单片机实验三
- 单片机实验-数据传送
- 单片机实验期末考试-使用两个外部中断控制8只LED显示的电路
- 单片机实验——0到60秒的计时器(使用硬件中断方式实现)
- 【单片机】LED实验
- 简单的单片机实验
- 一:51单片机简单IO实验(自测)