单片机实验报告

时间:2024.4.21

单片机实验报告

 

南京理工大学紫金学院电光系

一、  实验目的(四号+黑体)

1.Keil C51软件的介绍

2.学习I/O的使用;

3.学习延时子程序的编写和使用;

4.掌握单片机编程器使用和芯片烧写方法。

二、  实验原理

1.  灯闪烁实验

    1) 在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。

 2) 系统板上硬件连线:把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。

原理图

   3) 程序设计流程

 

2.广告流水灯实验

1) 做单一灯的左移右移,八个发光二极管L1~L8分别接在单片机的P1.0~P1.7接口上,输出“0”的时候,发光二极管亮,开始时P1.0->P1.1->P1.2->P1.3->...->P1.7->P1.6->...P1.0亮,重复循环。

2) 系统板上硬件连线:把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。要求:P1.0对应着L1,P1.1对应L2,……,P1.7对应着L8。

原理图

(1)   程序设计流程:流程图如下

 

                                                                是

3.模拟开关实验

1)监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄火。

2)系统板上硬件连线:把“单片机系统”A2区的P1.0端口用导线连接到D1区的LED1端口上;把“单片机系统”A2区的P3.0端口用导线连接到D1区的KEY1端口上;

原理图

(1)   程序设计流程

 

               否                     是

三、  实验内容

1 灯闪烁

利用单片机的I/O引脚控制一发光二极管,实现闪烁效果。

  1)C51代码

#include"reg51.h"

sbit led=P1^0;

void delay();

void main()

{

    while(1)

        {

            led=0;

            delay();

            led=1;

            delay();

        }

}

void delay()

{

    unsigned int i,j;

    for(i=200;i>0;i--)

        for(j=110;j>0;j--);

}

2 广告流水灯

利用单片机的任一组I/O引脚控制八个发光二极管,实现广告流水灯效果

    1)C51代码

#include"reg51.h"

void time()

{

long int i;

for(i=0;i<=38000;i++);}

void delay()

{

    unsigned int i,j;

    for(i=200;i>0;i--)

        for(j=110;j>0;j--);

}

void main()

{

    while(1)

        {

            P1=0xfe;delay();

            P1=0xfd;delay();

            P1=0xfb;delay();

            P1=0xf7;delay();

            P1=0xef;delay();

            P1=0xdf;delay();

            P1=0xbf;delay();

            P1=0x7f;delay();

            P1=0xff;time();

P1=0x7f;delay();

            P1=0xbf;delay();

            P1=0xdf;delay();

            P1=0xef;delay();

            P1=0xf7;delay();

            P1=0xfb;delay();

            P1=0xfd;delay();

            P1=0xfe;delay();

            P1=0xff;time();

        }

}

3 模拟开关

读取单片机的I/O引脚状态来控制发光二极管,引脚状态由外部开关控制。

1)C51代码

 #include "reg51.h"

sbit key = P0^0;   

sbit led= P1^0;

void main(void)

{

    while(1)

    {      

        if(key==0) 

            led=0;

        if(key==1) 

           led=1;

    }

}

   

四、  小结与体会

通过本次实验了解了keil和protues软件的使用,学会了I/O口的使用,学会了延时子程序的编写和使用以及掌握了单片机编程器的使用和芯片烧写方法。在自己编写程序时,要注意高低电平的分析,掌握好循环和片选定义。

(格式同上)


第二篇:大连海事大学单片机(下)实验程序总结——吴颖晶


讲义第三章实验十

1、编写程序,将8XX51单片机的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数

据存储器中。

#include<absacc.h>

int xdata *c;

main()

{

c=0x0000;

DBYTE[0x20]=0x02;

DBYTE[0x35]=0x03;

*c=DBYTE[0x20]*DBYTE[0x35];

while(1);

}

2、P1口接8个发光二极管LED,编程实现8个LED灯依次点亮0.5秒钟,如此循环。设fosc=12MHz。

(定时器采用中断方式编程)

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar i;

uchar a=10;

timer0()interrupt 1 using 1

{

TH0=-50000/256;

TL0=-5000%256;

a--;

}

void main()

{

while(1)

{

TMOD=1;

P1=0xfe;

TH0=-50000/256;

TL0=-5000%256;

EA=1;

ET0=1;

TR0=1;

while(1)

if(a==0)

{

P1=_crol_(P1,1);

a=10;

}

}

}

3、(选作)将内部RAM从21H单元开始存放的压缩BCD码数转换为二进制数,并存入30H为首址的单元,BCD码的长度存放在20H单元中。 (没有)

讲义第四章实验二

通过ADC0809实现对电位器输出的模拟电压的采集,并将采集到的数字量显示到二极管上。

#include"reg51.h"

#include"absacc.h"

#define AD0809 XBYTE[0x7000]

main()

{

unsigned char i, dat=0xff;

while(1)

{

AD0809=0x00;

//启动AD0809

for(i=0;i<200;i++);

//延时等待

dat=AD0809;

//读取A/D转换的结果

P1=dat;

//送P1显示

}

}

讲义第四章实验三

利用DAC0832输出模拟电压信号,并用运算放大器电路反向后进行观察。 #include<reg51.h>

#include<absacc.h>

#define da0832 XBYTE[0x7FFF]

main()

{

unsigned char i,j;

while(1)

{

for(i=0;i<=255;i++)

{

da0832=i;

/* 启动转换 */

for(j=0;j<=255;j++);

/* 延时 */

}

}

}

讲义第四章实验七(题目有改动)

1、P1接8个开关,P2接8个LED,单片机读入P1状

态,通过串行方式1或2自发自收,从P2口输出显示。

(实验代码丢失,以下仅供参考)

#include <reg51.h>

void main()

{

TMOD=0x20; TH1=0xCC;

TL1=0xCC;

TR1=1;

SCON=0x50;//方式二

while(1) { TI=0; P1=0xFE;

} SBUF=0xfe; while(RI!=1); RI=0; P1=SUBF; while(TI!=1);

}

2、利用实验仪D1区完成按键的动作判断、按键识别和功能定义:对两个以上的按键进行上述操作。具体要求:

– 4个按键分别对应以下四个操作

– (1)显示值加1

– (2)显示值减1

– (3)显示值乘2

– (4)显示值除2

(实验代码丢失,以下仅供参考)

#include<reg51.h>

#define uchar unsigned char

void delay(T)

{ uchar i,j;

}

uchar key()

{

uchar data key0,key1; P1=0xFF; key0=P1&0xFF; if(key0==0xFF) return 0; delay(20);

key1=P1&0xFF;

}

{

uchar data value=0; if(key1==0xFF) return 0; if(key0!=key1) return 0; return key1; for(i=0;i<T;i++) for(j=0;j<110;j++); main()

uchar data KEY; while(1) { KEY=key(); switch(KEY) { case 0xFE:value++;break; case 0xFD:value--;break;

case 0XFB:value>>1;break;

case 0XF7:value<<1;break;

}. } } P2=value;

讲义第四章实验六

1、设计接口、编写程序,实现点阵LED的静态显示。

(1)利用点阵LED的任意一行,间隔点亮LED(如 01010101或10101010);

#include <reg51.h>

void main()

{

while(1)

{

P1= 0XAA;

P0 = 0x01;

}

}

(2)利用点阵LED的一行,实现跑马灯的功能,LED从 左到右轮流、循环显示。

#include <reg51.h>

#include <intrins.h>

void delay()

{

unsigned char i,j;

for(i=0;i<255;i++) for(j=0;j<255;j++);

}

void main()

{

P1= 0XAA; P0 = 0x00; while(1) { } P1 = _crol_(P1,1); delay();

}

2、编写程序,实现点阵LED的动态显示:在点阵 LED上显示‘A’字符。

#include <reg51.h>

unsigned char tab0[]={0xfe,0xfd,0xfb};

unsigned char tab1[]={0xdf,0x8f,0x77};

void delay()

{

} unsigned char i,j; for(i=0;i<70;i++) for(j=0;j<50;j++);

void main()

{

unsigned char i=0;

for(i=0;i<3;i++)

{

}

P0=tab0[i]; P1=tab1[i]; delay();

}

大实验:直流电机的调速控制系统(第四章实验十一) #include <reg51.h>

#include <absacc.h>

#define uchar unsigned char

#define V_TH0 0XFF

#define V_TL0 0XD8

#define V_TMOD 0X01

sbit P1_0=P1^0;

sbit P1_1=P1^1;

sbit Key_UP=P1^2;

sbit Key_DOWN=P1^3;

sbit Key_STOP=P1^4;

sbit P1_5=P1^5;

sbit P1_6=P1^6;

sbit P1_7=P1^7;

void init_sys(void); /*系统初始化函数*/

void Delay5Ms(void);

uchar KeyV;

uchar TempKeyV;

uchar flag=0;

unsigned char ZDJ_A,ZDJ_B;

void main (void)

{

ZDJ_A=40; /*占空比初始值设定*/

ZDJ_B=70; /*占空比初始值设定*/

init_sys(); { while(1)

/*对按键的检测*/ P1_0=0;

P1_1=0;

if (Key_UP)KeyV = 1;

if (Key_DOWN)KeyV = 2;

if (Key_STOP)KeyV = 3;

if (KeyV!= 0)

{

Delay5Ms();

if (Key_UP)

TempKeyV = 1;

if (Key_DOWN)

TempKeyV = 2;

if (Key_STOP)

TempKeyV = 3;

} /*改变速度*/ if (P1_5==0) //如果按了+键,增加占空比

Delay5Ms();

if (P1_5==0)

{

ZDJ_A++; ZDJ_B=100-ZDJ_A; {

}

}

if (P1_6==0) //如果按了-键,减少占空比 {

Delay5Ms();

if (P1_6==0) { } ZDJ_A--; ZDJ_B=100-ZDJ_A;

} if (P1_7==0) {

Delay5Ms(); if (P1_7==0)

{

if(ZDJ_A==0)flag=1; if(flag==0) { ZDJ_A++; ZDJ_B=100-ZDJ_A;

} else { ZDJ_A--; ZDJ_B=100-ZDJ_A; }

}

}

}

}

/********************************************************* / *函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/ /*********************************************************/ void init_sys(void) /*系统初始化函数*/

{

/*定时器初始化*/

TMOD=V_TMOD;

TH0=V_TH0;

TL0=V_TL0;

TR0=1;

ET0=1;

EA=1;

}

/****************************************************** / *函数功能:延时 */ /******************************************************/ void Delay5Ms(void)

{

}

/****************************************************** / *函数功能:中断函数 */ /******************************************************/ void timer0(void) interrupt 1 using 2

{

static uchar click=0; /*中断次数计数器变量*/

TH0=V_TH0; /*恢复定时器TL0=V_TL0; ++click; if (click>=100) click=0; if (KeyV==TempKeyV) { if (KeyV == 1) { if (click<=ZDJ_A) /*当小于占空比值时输出

} { P1_0=0; else P1_0=1; if (click<=ZDJ_B) P1_1=0; else P1_1=1; 初始值*/ unsigned int TempCyc = 1000; while(TempCyc--); 低电平,高于时是高电平,从而实现占空比的调整*/ if (KeyV == 2)

if (click<=ZDJ_A) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/

}

} P1_0=1; else P1_0=0; if (click<=ZDJ_B) P1_1=1; else P1_1=0; } if (KeyV == 3) { P1_0=0; P1_1=0; }

更多相关推荐:
单片机实验报告

单片机实验报告学生姓名学号专业指导教师学院信息与电气工程学院20xx年11月单片机实验报告实验一MCS51指令系统实验数据排序1实验目的熟悉MCS51指令系统掌握程序设计方法加深对内部存储器读写的认识熟悉仿真开...

单片机实验报告

通信与信息工程学院20xx20xx学年第二学期实验报告课程名称单片机原理及应用专业班级学号学生姓名指导教师日期20xx年4月15日1实验一单片机汇编语言程序设计一实验目的1学习MedWin或Keilc51仿真软...

单片机实验报告

题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握Keil软件的基本使用12掌握单片机汇编语言基本编程二实验内容1学习用Keil软件...

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

单片机实验报告

海南大学届单片机实验报告4份论文题目学生姓名学号所在院系专业班级授课教师完成时间蜂鸣器实验实验目的1熟悉实验板中蜂鸣器工作原理掌握汇编编程控制蜂鸣器播放音乐2掌握单片机编程控制蜂鸣器发出不同频率声音的方法3了解...

单片机实验报告

单片机课程设计报告实验五系别物理与电子工程学院年级专业班级学号学生姓名指导教师设计时间常熟理工学院课程设计报告目录1题目22实验要求221实验目的222实验内容23总体设计231硬件设计232软件设计44运行结...

51单片机实验报告

08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位...

单片机实验报告

单片机与嵌入式系统实验报告1一软件模拟调试实验本部分实验内容主要为指令系统和汇编语言程序设计采用软件模拟调试的方法目的在于通过这些实验使学生巩固所学知识加深对MCS51单片机内部结构指令系统的理解更进一步掌握汇...

单片机实验报告

单片机实验报告学院信息工程学院专业班级生物医学工程111班姓名学号南昌大学实验报告实验一IO口输入输出实验学生姓名学号班级生医111班实验类型验证综合设计创新实验日期20xx1126实验成绩一实验目的掌握单片机...

单片机实验报告

实验一LED流水灯一实验目的1学习单片机并口的使用方法2学习延时子程序的编写和使用3学习集成开发环境MedWin的安装与使用4学习STC单片机在线下载软件STCISP的使用二实验内容所谓流水灯就是8个发光二极管...

单片机实验报告

目录一实验一1二实验二7三实验三11四实验四15实验一定时计数器验证实验一实验目的熟悉定时计数器T0的特点学会合理选择定时方式并能根据具体情况结合软件的方式定时二实验设备及器件IBMPC机一台PROTEUS硬件...

单片机实验报告

单片机原理及应用实姓名班级指导教师验报告王翀学号63120xx40204通信工程专业20xx级2班许强单片机原理及应用实验报告实验项目名称键盘数码管显示综合实验实验日期1221实验成绩实验评定标准一实验目的通过...

单片机实验报告(42篇)