NXPMK60智能车子模块初始化驱动方式.docx
- 文档编号:25266048
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:50
- 大小:23.52KB
NXPMK60智能车子模块初始化驱动方式.docx
《NXPMK60智能车子模块初始化驱动方式.docx》由会员分享,可在线阅读,更多相关《NXPMK60智能车子模块初始化驱动方式.docx(50页珍藏版)》请在冰豆网上搜索。
NXPMK60智能车子模块初始化驱动方式
基于恩智浦MK60DN512Z系列单片机的智能模型车子程序集
作者徐挺
/**********************************************************
函数名称:
LCD_init()
**********************************************************/
voidLCD_Init(void)
{
GPIO_Init(PORTC,19,GPO,1);
GPIO_Init(PORTC,18,GPO,1);
GPIO_Init(PORTC,17,GPO,1);
GPIO_Init(PORTC,16,GPO,1);
LQTFT_RST=0;
time_delay_ms(200);
LQTFT_RST=1;
time_delay_ms(50);
LCD_write_command(0x11);//startOSC
time_delay_ms(100);
LCD_write_command(0xB1);//frameratecontrol
LCD_write_para8(0x05);
LCD_write_para8(0x3A);
LCD_write_command(0x36);//镜像控制?
LCD_write_para8(0x08);//
LCD_write_command(0xB2);
LCD_write_para8(0x05);
LCD_write_para8(0x3A);
LCD_write_command(0xB3);
LCD_write_para8(0x05);
LCD_write_para8(0x3A);
LCD_write_para8(0x05);
LCD_write_para8(0x3A);
LCD_write_command(0xB4);//inversionsetting
LCD_write_para8(0x00);//0x00=dotinversion
LCD_write_command(0xC0);//PowerControl1
LCD_write_para8(0xAA);//AVDD=5V;GVDD=4.2V
LCD_write_para8(0x0A);//GVCL=-4.2V
LCD_write_para8(0x84);//Mode=AUTO;VRHP=VRHN=0
LCD_write_command(0xC1);//PowerControl2
LCD_write_para8(0xC0);//V25=2.4V;VGH=2AVDD+VGH25-0.5=11.9V;VGL=-7.5V
LCD_write_command(0xC2);//PowerControl3
LCD_write_para8(0x0D);//
LCD_write_para8(0x00);//
LCD_write_command(0xC3);//PowerControl4
LCD_write_para8(0x8D);//
LCD_write_para8(0x2A);//
LCD_write_command(0xC4);//PowerControl5
LCD_write_para8(0x8D);
LCD_write_para8(0xEE);
LCD_write_command(0xC5);//VCOMsetting
LCD_write_para8(0x06);//
LCD_write_command(0xE0);
LCD_write_para8(0x06);
LCD_write_para8(0x1C);
LCD_write_para8(0x10);
LCD_write_para8(0x14);
LCD_write_para8(0x30);
LCD_write_para8(0x2B);
LCD_write_para8(0x24);
LCD_write_para8(0x29);
LCD_write_para8(0x28);
LCD_write_para8(0x26);
LCD_write_para8(0x2E);
LCD_write_para8(0x39);
LCD_write_para8(0x00);
LCD_write_para8(0x02);
LCD_write_para8(0x01);
LCD_write_para8(0x10);
LCD_write_command(0xE1);
LCD_write_para8(0x06);
LCD_write_para8(0x1C);
LCD_write_para8(0x10);
LCD_write_para8(0x14);
LCD_write_para8(0x30);
LCD_write_para8(0x2B);
LCD_write_para8(0x24);
LCD_write_para8(0x29);
LCD_write_para8(0x28);
LCD_write_para8(0x26);
LCD_write_para8(0x2E);
LCD_write_para8(0x39);
LCD_write_para8(0x00);
LCD_write_para8(0x02);
LCD_write_para8(0x01);
LCD_write_para8(0x10);
LCD_write_command(0x3A);//
LCD_write_para8(0x05);//RGB16-bit
LCD_write_command(0x29);//displayon
time_delay_ms(10);
LCD_display_full(RED);
}
/******************DRIVEIC寄存器寻址8080SERIES*******************************/
voidLCD_write_command(unsignedcharcmd)
{
unsignedchari;
LQTFT_A0=0;//A0=0发送命令
LQTFT_CS=0;
for(i=0;i<8;i++)
{
LQTFT_SCK=0;
if((cmd&0x80)==0x80)//高位先发送
LQTFT_SDA=1;
else
LQTFT_SDA=0;
//LQTFT_SDA=((0x80&cmd>0)?
1:
0);
LQTFT_SCK=1;
cmd=(cmd<<1);
}
LQTFT_CS=1;
}
/*****************DRIVEIC寄存器写数据8080SERIES******************************/
voidLCD_write_para8(unsignedchardat)
{
unsignedchari;
LQTFT_A0=1;//A0=1发送数据
LQTFT_CS=0;
for(i=0;i<8;i++)
{
LQTFT_SCK=0;
if((dat&0x80)==0x80)
LQTFT_SDA=1;
else
LQTFT_SDA=0;
//LQTFT_SDA=((0x80&dat>0)?
1:
0);
LQTFT_SCK=1;
dat=(dat<<1);
}
LQTFT_CS=1;
}
/****************DRIVEICGDRAM写数据16BITS8080SERIES*****************************/
voidLCD_write_para16(unsignedintdat)
{
unsignedchari,buf;
LQTFT_A0=1;
LQTFT_CS=0;
buf=(unsignedchar)(0xFF&(dat>>8));
for(i=0;i<8;i++)
{
LQTFT_SCK=0;
if((buf&0x80)==0x80)
LQTFT_SDA=1;
else
LQTFT_SDA=0;
//LQTFT_SDA=((0x80&buf>0)?
1:
0);
LQTFT_SCK=1;
buf=(buf<<1);
}
LQTFT_CS=1;
buf=(unsignedchar)(0xFF&dat);
LQTFT_CS=0;
for(i=0;i<8;i++)
{
LQTFT_SCK=0;
if((buf&0x80)==0x80)
LQTFT_SDA=1;
else
LQTFT_SDA=0;
//LQTFT_SDA=((0x80&buf>0)?
1:
0);
LQTFT_SCK=1;
buf=(buf<<1);
}
LQTFT_CS=1;
}
/**********************************************************
函数名称:
LCD_SetPos()
入口参数:
起始终止坐标
出口参数:
无
时间:
2016/11/12
功能说明:
重新定位输入信息位置
其他说明:
无
**********************************************************/
voidLCD_SetPos(unsignedcharxs,unsignedcharys,unsignedcharxe,unsignedcharye)
{
LCD_write_command(0x2A);//ColulmaddRSTsset
LCD_write_para8(0x00);//行起始坐标高8位,始终为零
LCD_write_para8(xs);//行起始坐标低8位
LCD_write_para8(0x00);//行终止坐标高8位,始终为零
LCD_write_para8(xe);//行终止坐标低8位
LCD_write_command(0x2B);//ColulmaddRSTsset
LCD_write_para8(0x00);//列起始坐标高8位,始终为零
LCD_write_para8(ys);//列起始坐标低8位
LCD_write_para8(0x00);//列终止坐标高8位,始终为零
LCD_write_para8(ye);//列终止坐标低8位
LCD_write_command(0x2C);//GRAM接收MCU数据或命令
}
/**********************************************************
函数名称:
LCD_address_rst()
入口参数:
无
出口参数:
无
时间:
2016/11/12
功能说明:
重置地址
其他说明:
无
**********************************************************/
voidLCD_address_rst(void)
{
LCD_write_command(0x2a);//配置MCU可操作的LCD内部RAM横坐标起始、结束参数
LCD_write_para8(0x00);//横坐标起始地址0x0000
LCD_write_para8(0x00);
LCD_write_para8(0x00);//横坐标结束地址0x007f(127)
LCD_write_para8(0x7f);
LCD_write_command(0x2b);//配置MCU可操作的LCD内部RAM纵坐标起始结束参数
LCD_write_para8(0x00);//纵坐标起始地址0x0000
LCD_write_para8(0x30);
LCD_write_para8(0x00);//纵坐标结束地址0x009f(159)
LCD_write_para8(0x70);
LCD_write_command(0x2C);//GRAM接收MCU数据或命令
}
/*********************************************************/
//延时函数
voidtime_delay(unsignedintt)
{
unsignedinti,j;
for(j=0;j for(i=0;i<1000;i++); } /********************************************************** 函数名称: LCD_display_full() 入口参数: color为常用的需要显示的颜色(已经提前定义),color为 NULL时,则可将不常用颜色放入dat中加以显示 出口参数: 无 时间: 2012-09-09 功能说明: 全屏显示单色画面 其他说明: 无 **********************************************************/ voidLCD_display_full(unsignedintcolor) { unsignedinti,j; LCD_SetPos(0,0,XMAX,YMAX); for(i=0;i { for(j=0;j { LCD_write_para16(color); } } } voidLCD_CLS(void) { LCD_display_full(BLACK); } /****************显示图片********************************/ voidshow_pic(unsignedcharxs,unsignedcharys,unsignedcharxe,unsignedcharye,unsignedchar*ppic) { unsignedinti,j,k=0; LCD_SetPos(xs,ys,xe,ye); for(i=0;i { for(j=0;j { LCD_write_para16(((unsignedint)ppic[k])<<8|ppic[k+1]); k+=2; } } } /*------------------------------------------------------------------------------------------------------ 【函数】OV7725_Init 【功能】摄像头初始化 【参数】fps帧率 【返回值】无 【实例】推荐使用50帧的 【注意事项】注意K60性能有限,太高帧率会出问题 --------------------------------------------------------------------------------------------------------*/ voidOV7725_Init(uint8_tfps) { uint8_tid[2];//存放摄像头id uint8_tack=0;//检验所有寄存器操作是否出错 uint16_twidth=OV7725_IMAGEW,height=OV7725_IMAGEH; uint16_thstart,vstart,hsize; //摄像头寄存器设置 GPIO_Init(PORTE,4,GPI_UP,1);//配置为GPIO功能 GPIO_Init(PORTE,5,GPI_UP,1);//配置为GPIO功能 EXTI_Init(PTC,6,rising_down);//行中断 EXTI_Init(PTC,7,falling_up);//场中断 GPIO_Init(PORTD,8,0,0); GPIO_Init(PORTD,9,0,0); GPIO_Init(PORTD,10,0,0); GPIO_Init(PORTD,11,0,0); GPIO_Init(PORTD,12,0,0); GPIO_Init(PORTD,13,0,0); GPIO_Init(PORTD,14,0,0); GPIO_Init(PORTD,15,0,0);//注意不要使用灯PD15 OV7725_SoftwareReset();//寄存器恢复初始值 time_delay_ms(50); /*7725最大分辨率640*480*/ ack+=OV7725_Init_Regs();//先按官方的默认初始化VGA后面需要再改 ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_COM2_REG,0x03);//输出驱动能力Bit[4]: 睡眠模式Bit[1: 0]: 驱动能力00: 1x01: 2x10: 3x11: 4x #if1//RGB模式 ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_COM7_REG,0x46);//使用QVGA和RGB565格式 ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_COM3_REG,0x00);//Bit[6]: 0水平镜像关1水平镜像开注意开启水平镜像时最好开启0x32寄存器的Bit[7]: 镜像图像边缘对齐-在镜像模式下应该设置为1 hstart=(0x3fU<<2U);//图像水平开始位置使用VGA时为0x23 vstart=(0x03U<<1U);//图像垂直开始位置使用VGA时为0x07 #else//灰度模式 ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_COM7_REG,0x43);//使用QVGA和BayerRAW格式 ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_COM3_REG,0x00); hstart=0x3fU<<2U;//图像水平开始位置 vstart=0x03U<<1U;//图像垂直开始位置 #endif ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_CNST_REG,0x20); OV7725_SetFPS(fps); ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_EXHCL_REG,0x00);//虚拟像素插入LSB用于在水平方向插入虚拟像素的LSB ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_ADVFL_REG,0x00);//垂直同步插入虚拟行(1位等于1行)的LSB ack+=SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_ADVFH_REG,0x00);//垂直同步插入虚拟行的MSB /*Resolutionandtiming.*/ hsize=width+16; /*设置输出图片大小.*/ //水平起始位置高位因为寄存器是8位的最大255,像素最大640*480放不下,用了10位数据,这里是高8位,剩下的两位放在OV7725_HREF_REG中 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_HSTART_REG,hstart>>2U); //水平宽度高位因为寄存器是8位的最大255,像素最大640*480放不下,用了10位数据,这里是高8位,剩下的两位放在OV7725_HREF_REG中 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_HSIZE_REG,hsize>>2U); //垂直起始位置高位因为寄存器是8位的最大255,像素最大640*480放不下,用了9位数据,这里是高8位,剩下的两位放在OV7725_HREF_REG中 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_VSTART_REG,vstart>>1U); //垂直高度高位因为寄存器是8位的最大255,像素最大640*480放不下,用了9位数据,这里是高8位,剩下的两位放在OV7725_HREF_REG中 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_VSIZE_REG,height>>1U); //水平输出宽度高位因为寄存器是8位的最大255,像素最大640*480放不下,用了10位数据,这里是高8位,剩下的两位放在OV7725_EXHCH_REG中 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_HOUTSIZE_REG,width>>2U); //垂直输出高度高位因为寄存器是8位的最大255,像素最大640*480放不下,用了9位数据,这里是高8位,剩下的两位放在OV7725_EXHCH_REG中 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_VOUTSIZE_REG,height>>1U); //水平宽度和垂直高度的低位 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_HREF_REG, ((vstart&1U)<<6U)|((hstart&3U)<<4U)|((height&1U)<<2U)|((hsize&3U)<<0U)); //水平输出和垂直输出的低2位和低1位 SCCB_RegWrite(OV7725_SCCB_ADDR,OV7725_EXHCH_REG,((height&1U)<<2U)|((width&3U)<<0U)); } /*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NXPMK60 智能 车子 模块 初始化 驱动 方式