单片机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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--;
}
}