嵌入式实验报告(5)

2019-04-09 08:49

十五、PWM作32位定时器实验 实验内容:

将PWM作为32位定时器使用,控制蜂鸣器、LED灯的响与亮灭

实验电路图:

源程序:

/****************************************Copyright

(c)**************************************************

** Guangzou ZLG-MCU Development Co.,LTD.

** graduate school

** http://www.zlgmcu.com **

**--------------File

Info------------------------------------------------------------------------------- ** File name: main.c

** Last modified Date: 2004-09-16 ** Last Version: 1.0 ** Descriptions: The main() function example template **

**------------------------------------------------------------------------------------------------------ ** Created by: Chenmingji ** Created date: 2004-09-16 ** Version: 1.0 ** Descriptions: The original version

**

**------------------------------------------------------------------------------------------------------ ** Modified by: ** Modified date: ** Version: ** Descriptions: **

********************************************************************************************************/ #include \

#define BEEP 1 << 7 // P0.7控制蜂鸣器 /*

******************************************************************************************************** ** 函数名称: PWM_Int()

** 功能描述: PWM中断服务函数,取反控制蜂鸣器。

*******************************************************************************************************

*/

void __irq PWM_Int(void) {

PWMIR = 0x01; // 复位PWM中断标志

/* 取反LED9状态 */

if((IO0SET & BEEP) == 0) IO0SET = BEEP; else IO0CLR = BEEP;

VICVectAddr = 0x00; // VIC结束 } /*

******************************************************************************************************** ** 函数名称: main()

** 功能描述: 演示PWM作32位定时器使用实验。

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

int main (void) {

PINSEL0 = 0x00000000;

// 设

置管脚连接GPIO IO0DIR = BEEP; IO0SET = BEEP;

IRQEnable(); // IRQ

中断使能

/* PWM作为定时器时的初始化 */ PWMTC = 0; // 定时器设置为0 PWMPR = 0; // 时钟不分频

PWMMCR = 0x03;

// 设置T0MR0匹配后复位T0TC,并产生中断标志 PWMMR0 = Fpclk / 2; // 0.5秒钟定时 PWMTCR = 0x01;

// 启动定时器

/* 设置PWM中断 */

VICIntSelect = 0x00000000; // 所有中断连接IRQ

VICVectCntl0 = 0x20 | 8; // 选择通道0

VICVectAddr0 = (int)PWM_Int; // PWM中断服务程序地址 VICIntEnable = (1 << 8); // 使能PWM中断

while(1); // 等待中断 return 0; }

十一、 十六、LCD 1602显示4 实验电路图:

源程序:

#include \#define rs (1<<5) #define rw (1<<6) #define en (1<<7) #define busy (1<<15)

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

* 函数名称:ChkBusy()

* 函数功能:检查总线是否忙

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

void ChkBusy() { IO0DIR=0xf0; while(1) { IO0CLR=rs; IO0SET=rw; IO0SET=en; if(!(IO0PIN & busy))break; IO0CLR=en; } IO0DIR=0xffffffff;

}

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

* 函数名称:WrOp() * 函数功能:写命令

* 入口参数:dat,待写入LCD的命令 ****************************************************************************/

void WrOp(uint8 dat) { ChkBusy(); IO0CLR=rs; IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数 IO0SET=en; IO0CLR=en; }

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

* 函数名称:WrDat() * 函数功能:写数据

* 入口参数:dat,待写入LCD的数据 ****************************************************************************/

void WrDat(uint8 dat) { ChkBusy(); IO0SET=rs; IO0CLR=rw; IO0CLR=IO0CLR|0xff00; //先清零 IO0SET=dat<<8; //再送数 IO0SET=en; IO0CLR=en; }

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

* 函数名称:lcd_init() * 函数功能:lcd初始化

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

void lcd_init(void) { WrOp(0x38); WrOp(0x06); WrOp(0x0c); }

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

* 函数名称:LocateXY() * 函数功能:显示光标定位

* 入口参数:posx LCD列位置,posy LCD行位置

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

void LocateXY( uint8 posx,uint8 posy) { uint8 temp; temp = posx & 0xf; posy &= 0x1;

if ( posy )temp |= 0x40;

temp |= 0x80; WrOp(temp); }

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

* 函数名称:DispOneChar() * 函数功能:显示单字符

* 入口参数:x LCD列位置,y LCD行位置,Wdata 显示字符

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

void DispOneChar(uint8 x,uint8 y,uint8 Wdata) {

LocateXY( x, y ); // 定

位显示字符的x,y位置 WrDat( Wdata );

// 写字符 }

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

* 函数名称:ePutstr() * 函数功能:显示字符串

* 入口参数:x LCD列,y LCD行,j 字符串长度,*ptr 字符串指针

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

void ePutstr(uint8 x,uint8 y, uint8 j,uint8 *ptr){ uint8 i,l=0; for (i=0;i

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

* 函数名称:DisText() * 函数功能:显示文本

* 入口参数:addr LCD DDRAM地址,*p 文本指针

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

void DisText(uint8 addr,char *p) { WrOp(addr); while(*p !='\\0')WrDat(*(p++)); }

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

* 函数名称:main() * 函数功能:LCD初始化,自定义汉字字符,LCD显示英文和汉字字符。

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

int main(void) { uint8 i; uint8

examp1[]={0x32,0x30,0x31,0x33,0x00,0x36,0x01,0x31,0x36,0x02}; uint8

Hzzimo[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x00, // 年

0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, // 月

0x0F,0x09,0x09,0x0F,0x09,0x09,0x0F,0x00}; // 日 lcd_init(); // LCD初始化 WrOp( 0x40 ); // 自定义汉字字符:年、月、日 for (i=0;i<24;i++){ WrDat(Hzzimo[i]); } DisText(0x80,\ // 第一行从第0位开始显示英文字符 ePutstr(4,1,10,examp1); // 第二行从第4位开始显示2012年1月26日 while(1); }


嵌入式实验报告(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大气污染控制工程试题库(2013)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: