单片机实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常州工学院

电子信息工程专业单片机实验报告实验者王宏胜学号10020225 班级10信二组别_______ 同组者_________________ 实验评阅教师签名___________________ 实验编号实验一实验名称流水灯

一、实验目的

1、熟悉单片机I/O口的编程方法。

2、了解发光二极管LED的工作原理和驱动方法。

3、学习延时程序的编写和应用。

二、接线

硬件P1从P10至P17依次连接8个LED,PZ4左起8个脚,+5连接LED区域PZ4第九个脚

三、实验内容

从左往右每次点亮1个LED,当点亮最右边1个LED时,再从右往左每次点亮1个LED,每个LED亮灯时间约200ms。

四、程序

#include

#include

/****************LED Demo****************

描述:用单片机I/O口实现流水灯电路演示程序

功能:从左往右每次点亮1个LED,当点亮最右边1个LED时,再从右往左每次点亮1个LED,每个LED亮灯时间约200ms。

作者:王宏胜

日期:2013年5月20日

版次:Keil uVision4

**************** End ****************/

#define LED_PORT1 P1 //用P1口驱动灯,低亮,高灭

void time(unsigned int ucMs); /*延时单位:ms*/

void main(void)

{

unsigned char ucTimes;

#define DELAY_TIME 200 //延时

while(1)

{

//从左往右依次点亮LED

for(ucTimes=0;ucTimes<8;ucTimes++){ //循环点亮P1口灯

LED_PORT1=_crol_(0xfe,ucTimes); //亮灯需低电平驱动,仅1位

//低,其他位高

time(DELAY_TIME);

}

LED_PORT1=0xff; //灭P1口灯

//然后从右往左依次点亮LED

for(ucTimes=0;ucTimes<8;ucTimes++){ //循环点亮P1口灯

LED_PORT1=_crol_(0x7f,ucTimes); //亮灯需低电平驱动,仅1位

//低,其他位高

time(DELAY_TIME);

}

LED_PORT1=0xff; //灭P1口灯

}

}

/********************************

描述:延时5us,晶振改变时只用改变这一个函数!

对于11.0592M晶振而言,需要2个_nop_();

对于22.1184M晶振而言,需要4个_nop_();

功能:延时5us

入口参数:无

返回值:无

********************************/

void delay_5us(void) //延时5us,晶振改变时只用改变这一个函数!

{

_nop_();

_nop_();

}

/****************delay_50us***************/

void delay_50us(void)

{

unsigned char i;

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

{

delay_5us();

}

}

/****************delay_100us***************/

void delay_100us(void)

{

delay_50us();

delay_50us();

}

/****************延时函数*************** 描述:每个LED亮灯时间约200ms

功能:延时200ms

入口参数:无符号整型ms,代表是毫秒

返回值:无

**************** End ***************/ void time(unsigned int ucMs)

{

unsigned char j;

while(ucMs>0){

for(j=0;j<10;j++) delay_100us();

ucMs--;

}

}

相关文档
最新文档