单片机原理及应用——数据排序实验报告

 

第二篇:单片机原理及应用实验报告

单片机原理及应用实验报告

一、选题意义. 2

二、单片机AT89C52结构介绍. 2

三、实验内容. 3

四、实验步骤. 3

五、在uvision环境下软件程序设计. 3

六、Proteus仿真. 6

七、实验器件. 8

八、焊接电路实物图. 9

九、实验心得. 9

一、选题意义

1.     熟悉使用AT89C52单片机进行系统设计;

2.     通过对单片机工作原理的深入理解,运用所学知识解决实际问题;

3.     通过实际系统的设计,加深对单片机的微计算机系统设计的理解和掌握。

二、单片机AT89C52结构介绍

AT89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,256×8bit内部RAM,低功耗空闲和省电模式,32个双向I/O口,3个16位可编程定时/计数器,全双工UART串行中断口线,2个外部中断源。图2-2是AT89C52引脚图。

三、实验内容

本实验利用单片机的计数器原理,通过采用protuas仿真软件来模拟实现。利用AT89C52单片机芯片实现计数功能(0~10)并显示当前计数值,还能够实现秒表的启动/暂停,复位功能。

四、实验步骤

1、先确定好设计的内容,用protuas设计电路图。

2、编写代码,编译并调试正确。将生成的.hex文件加载到单片机中,运行电路并调试使电路功能正确。

3、设计完成后,制作计数器实物,并使得运行正确。

五、在uvision环境下软件程序设计

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit K1 = P3^7;

uchar i, Second_Counts, Key_Flag_Idx;

bit Key_State;

char DSY_CODE[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

// delay

void DelayMS(uint time)

while(time--)

{

uchar t;

for(t=0;t<120;t++);

}

}

// handle button events ,处理按键事件

void Key_Event_Handle()

{

if(Key_State == 0) //Trigger key function when key pressed

{

Key_Flag_Idx = (Key_Flag_Idx + 1) % 3;

switch(Key_Flag_Idx)

{

case 1: EA = 1;ET0 = 1; TR0 = 1; break;

case 2: EA = 0;ET0 = 0; TR0 = 0; break;

case 0: P0 = 0x3f; P2 = 0x3f;i = 0;Second_Counts = 0;

}

}

}

// main ,主程序

void main()

{

P0 = 0x3f; //initial state of LED  显示00

P2 = 0x3f;

i = 0;

Second_Counts = 0;

Key_Flag_Idx = 0; //times of the press (Firstr, second, third respectively stand for different meanings)按键次数

Key_State = 1; // 按键状态

TMOD = 0x01; //T0 work in mode 1 定时器0方式1

TH0 = (65536 - 50000) / 256; //Set 50ms timer 定时器0:50ms

TL0 = (65536 - 50000) % 256;

while(1)

{

if(Key_State != K1) //Key is pressed or released

{

DelayMS(10);

Key_State = K1; //update key state

Key_Event_Handle();

}

}

}

// T0 interrupt function

void DSY_Refresh() interrupt 1

{

TH0 = (65536 - 50000) / 256; //恢复定时器0初值

TL0 = (65536 - 50000) % 256;

if(++i == 2) //100ms //50ms*2=0.1s转换状态

{

i = 0;

Second_Counts++;

P0 = DSY_CODE[Second_Counts / 10];

P2 = DSY_CODE[Second_Counts % 10];

if(Second_Counts == 100)

Second_Counts = 0; //满100(10s)后显示00

}

}

六、Proteus仿真

  1、初始值

   2、按下第一次按钮,记时截图

   3、按下第二次按钮,计数器停止

   4、按下第三次按钮,数值清零初始

七、实验器件

八、焊接电路实物图

九、实验心得

通过这次试验,让我对单片机有了新的认识。在原有的理论基础上又增加了不少实践经验。

这次试验最重要的是培养我们的创新意识和动手能力,再选题方面我们小组经过激烈的讨论,最终选定一个方向:通过单片机来实现0-9简单的计时作用。

这是我第一次做单片机实验,说起来有一些紧张和新奇。在此之前我并没有接触过单片机,我本以为与之前的光学实验及其它实验差不多,可我进到实验室之后,我就改变了这个看法。

通过组内人员的团结协作,最终快速效率的完成了这次试验的目标,由此可以说明合作的力量是不可小视的。

相关推荐