嵌入式课程设计报告(4)

2019-03-09 22:24

//函数名称:LCDInit //函数返回:无 //参数说明:无

//功能概要:LCD初始化。

//=========================================================================== void LCDInit() {

uint_32 i = 0;

//定义数据口和控制口为输出 for(i = 0;i < 11;i++) {

gpio_init(LCD[i].gpio_port, LCD[i].gpio_pin, 1,0); }

//设置指令,RS,R/W = 00, 写指令代码 gpio_set (LCD[0].gpio_port, LCD[0].gpio_pin, 0); gpio_set (LCD[1].gpio_port, LCD[1].gpio_pin, 0);

//功能设置- //设置指令

LCDCommand(0x38); //5*7点阵模式,2行显示,8位数据总线 LCDCommand(0x08); //关显示,关光标显示,不闪烁 LCDCommand(0x01); //清屏 for (i=0; i<40000; i++)asm(\延时 LCDCommand(0x06);

LCDCommand(0x14); //光标右移一个字符位,AC自动加1 LCDCommand(0x0C); //开显示,关光标显示,不闪烁 }

//=========================================================================== //函数名称:LCDShow //函数返回:无

//参数说明:需要显示的数据 //功能概要:液晶显示data中的数据。

//=========================================================================== void LCDShow(uint_8 data[16])

13

{

uint_8 i; //LCD初始化 LCDInit();

//显示第1行16个字符

gpio_set (LCD[0].gpio_port, LCD[0].gpio_pin, 0); gpio_set (LCD[1].gpio_port, LCD[1].gpio_pin, 0); //后7位为DD RAM地址(0x00)

LCDCommand(0x80);

//写16个数据到DD RAM

gpio_set (LCD[0].gpio_port, LCD[0].gpio_pin, 1); gpio_set (LCD[1].gpio_port, LCD[1].gpio_pin, 0); //将要显示在第1行上的16个数据逐个写入DD RAM中 for (i = 0;i < 16;i++) { }

//显示第2行16个字符

gpio_set (LCD[0].gpio_port, LCD[0].gpio_pin, 0); gpio_set (LCD[1].gpio_port, LCD[1].gpio_pin, 0); //后7位为DD RAM地址(0x40)

LCDCommand(0xC0);

gpio_set (LCD[0].gpio_port, LCD[0].gpio_pin, 1); gpio_set (LCD[1].gpio_port, LCD[1].gpio_pin, 0);

//将要显示在第2行上的16个数据逐个写入DD RAM中 for (i = 16;i < 19;i++) { } }

LCDCommand(data[i]); LCDCommand(data[i]);

14

//=========================================================================== //函数名称:LCDCommand //函数返回:无

//参数说明:cmd:待执行的命令

//功能概要:执行给定的cmd命令,且延时。

//=========================================================================== void LCDCommand(uint_8 cmd) {

uint_8 i; uint_16 j; uint_8 temp;

//等待延迟防止重复调用此函数而LCD卡死 for (j=0; j<1600; j++);asm(\ //数据送到LCD的数据线上 for(i = 3;i < 11;i++) {

gpio_set (LCD[i].gpio_port, LCD[i].gpio_pin, 0); }

for(i = 3;i < 11;i++) { }

//给出E信号的下降沿(先高后低),使数据写入LCD gpio_set (LCD[2].gpio_port, LCD[2].gpio_pin, 1); for (j=0;j<25;j++) asm(\

gpio_set (LCD[2].gpio_port, LCD[2].gpio_pin, 0); }

temp = 0x01 & (cmd>>(i-3));

gpio_set (LCD[i].gpio_port, LCD[i].gpio_pin, temp);

4.4定时器(timer.c)

//=========================================================================== //文件名称:timer.c

//功能概要:时间处理软件源文件

//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn) //更新记录:2013-04-27 V1.0

//===========================================================================

15

#include \

//=========================================================================== //函数名称:SecAdd1 //函数返回:无

//参数说明:*p:为指向一个时分秒数组p[3]

//功能概要:秒单元+1,并处理时分单元(00:00:00-23:59:59)

//=========================================================================== void SecAdd1(uint_8 *p) {

*(p+2)+=1; //秒+1 if(*(p+2)>=60) //秒溢出 { }

*(p+2)=0; //清秒 *(p+1)+=1; //分+1 if(*(p+1)>=60) //分溢出 {

*(p+1)=0; //清分 *p+=1; //时+1 if(*p>=24) //时溢出 {

*p=0; //清时 } }

}

4.5 定时器/脉宽调制子程序(tpm.c)

//=========================================================================== //文件名称:tpm.c

//功能概要:tpm底层驱动构件源文件

//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn) //更新记录:2013-5-5 V2.0

//=========================================================================== #include \

//定时器模块0,1,2地址映射

const TPM_MemMapPtr TPM_ARR[]={TPM0_BASE_PTR,TPM1_BASE_PTR,TPM2_BASE_PTR};

16

//========================================================================= //函数名称:tpm_init //功能概要:初始化tpm模块. //参数说明:tpmModule:模块号:0、1、2

// clk_src_sel:时钟源选择:1:PLL/FLL(推荐)、2:晶振 // int_us:中断微秒数,中断时间间隔 //函数返回:无

//========================================================================= void tpm_init (uint_8 tpmModule,uint_8 clk_src_sel,uint_32 int_us) {

uint_32 int_ticks;

if(tpmModule>2) tpmModule=2; //防止越界值 //开启SIM时钟门

BSET(SIM_SCGC6_TPM0_SHIFT+tpmModule,SIM_SCGC6); //使能TPM时钟 //根据传入参数(时钟源、中断时间间隔),使能时钟、确定有关寄存器值 if (1==clk_src_sel) //选择PLL/FLL为TPM模块的时钟源 {

//MCGPLL/2或者MCGFLL作为时钟源

BSET(SIM_SOPT2_PLLFLLSEL_SHIFT,SIM_SOPT2); //使能PLL为时钟源

int_ticks=6*int_us; //6*int_us=(48000/8)*int_us/1000 } else {

//晶振作为时钟源

BSET(OSC_CR_ERCLKEN_SHIFT,OSC0_CR); //开启晶振输出时钟 int_ticks=int_us; //1*int_us=(8000/8)*int_us/1000 }

SIM_SOPT2 |= SIM_SOPT2_TPMSRC(clk_src_sel); //使能时钟选择 TPM_ARR[tpmModule]->CNT=0x00; //计数器清0 TPM_ARR[tpmModule]->MOD=int_ticks; //给模数寄存器赋值

//TOF写1清0,TOIE中断使能,CMOD选择每次时钟加1,PS=0x011 选择8分频; TPM_ARR[tpmModule]->SC=TPM_SC_TOF_MASK|TPM_SC_TOIE_MASK| TPM_SC_CMOD(1)|TPM_SC_PS(3); }

17


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

下一篇:智能电池充电器的设计毕业论文 应用电子

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

马上注册会员

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