您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > stm32-12864并行驱动程序
//////////////////////////////////////////////////////////////////////////////////stm32-12864并行驱动程序////////////////////////////////////////////////////#includedelay.h//必须配合delay.c和delay.h文件使用,所以要包含delay.h。#includedisplay12864.hf/**********以下是相关引脚定义。**************///A口的#defineDisIOGPIOE//定义12864要使用的I/O端口。#defineDisClkRCC_APB2Periph_GPIOE//定义12864要使用的I/O端口的时钟。#defineDataGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7//定义12864使用的数据引脚。#defineENGPIO_Pin_10//定义使能端使用的引脚/*********************************************/#defineDisIOIOGPIOE//定义12864要使用的I/O端口。#defineDisClkIORCC_APB2Periph_GPIOE//定义12864要使用的I/O端口的时钟。#defineRS#defineRWGPIO_Pin_9GPIO_Pin_8/*光标定位函数定义结束。*/#definex10x80#definex20x88#definey0x80GPIO_InitTypeDefGPIOStru;//定义用于定义所以引脚为输出的变量。/********************************************************************************函数名:IOInitOut*函数描述:把所有端口初始化为推挽输出模式的函数*输入参数:无*输出结果:无*返回值:无*******************************************************************************/voidIOInitOut(void){//IO组GPIOStru.GPIO_Mode=GPIO_Mode_Out_PP;//定义所有的引脚为推挽输出的变量初始化。GPIOStru.GPIO_Speed=GPIO_Speed_50MHz;GPIOStru.GPIO_Pin=Data|EN;RCC_APB2PeriphClockCmd(DisClkIO,ENABLE);GPIO_Init(DisIO,&GPIOStru);//IO组GPIOStru.GPIO_Mode=GPIO_Mode_Out_PP;//定义所有的引脚为推挽输出的变量初始化。GPIOStru.GPIO_Speed=GPIO_Speed_50MHz;GPIOStru.GPIO_Pin=RS|RW;RCC_APB2PeriphClockCmd(DisClkIO,ENABLE);GPIO_Init(DisIO,&GPIOStru);}/********************************************************************************函数名:IOInitIn*函数描述:把数据引脚初始化为浮空输入的函*输入参数:无*输出结果:无*返回值:无*******************************************************************************/voidIOInitIn(void){GPIOStru.GPIO_Mode=GPIO_Mode_IN_FLOATING;//定义数据引脚为浮空输入的变量初始化。GPIOStru.GPIO_Speed=GPIO_Speed_50MHz;GPIOStru.GPIO_Pin=Data;RCC_APB2PeriphClockCmd(DisClkIO,ENABLE);//把所有端口初始化为输出模式的函数。GPIO_Init(DisIO,&GPIOStru);}/********************************************************************************函数名:WaitBusy*函数描述:等待12864的忙状态结束的函数*输入参数:无*输出结果:无*返回值:无*******************************************************************************/voidWaitBusy(void){IOInitIn();//把数据引脚定义为浮空输入GPIO_ResetBits(DisIOIO,RS);//RS=0GPIO_SetBits(DisIOIO,RW);//RW=1.GPIO_SetBits(DisIO,EN);//EN=1.while(GPIO_ReadInputData(DisIO)&0x0080);//只要位7的值,位7是忙标志位GPIO_ResetBits(DisIO,EN);//EN=0;IOInitOut();//把所有引脚定义为输出。}/********************************************************************************函数名:WriteCmd*函数描述:写命令函数*输入参数:8位命令*输出结果:无*返回值:无*******************************************************************************/voidWriteCmd(uint8_tcmd){WaitBusy();GPIO_ResetBits(DisIOIO,RS);//RS=0.GPIO_ResetBits(DisIOIO,RW);//RW=0.GPIO_SetBits(DisIO,EN);//EN=1.DisIO-ODR=((DisIO-ODR&0xff00)|cmd);//此处,只有直接操作寄存器才能//达到,只改变输出数据寄存器ODR的低8位,其它位//不变的目的。因为,只有低8位是数据引脚,//其它位可能是控制引脚,不能改变。delay_us(2);GPIO_ResetBits(DisIO,EN);//EN=0;delay_us(2);}/********************************************************************************函数名:WriteData*函数描述:写数据函数*输入参数:8位命令*输出结果:无*返回值:无*******************************************************************************/voidWriteData(uint8_tdata){WaitBusy();GPIO_SetBits(DisIOIO,RS);//RS=1.GPIO_ResetBits(DisIOIO,RW);//RW=0.GPIO_SetBits(DisIO,EN);//EN=1.DisIO-ODR=((DisIO-ODR&0xff00)|data);//同上。delay_us(2);GPIO_ResetBits(DisIO,EN);//EN=0;delay_us(2);}/********************************************************************************函数名:ReadData*函数描述:读IO口状态*输入参数:无*输出结果:无*返回值:8位数据*******************************************************************************/uint8_tReadData(void){uint8_tuc_Content;WaitBusy();IOInitIn();delay_ms(10);//注意:用BCDE组IO口必须这个·延时!GPIO_SetBits(DisIOIO,RW);//RW=1;读模式GPIO_SetBits(DisIOIO,RS);//RS=1;数据GPIO_SetBits(DisIO,EN);//EN=1.使能delay_us(2);//延时很重要//uc_Content=(DisIO-IDR)&0x00ff;uc_Content=GPIO_ReadInputData(DisIO);GPIO_ResetBits(DisIO,EN);//EN=0.delay_us(2);//延时很重要IOInitOut();returnuc_Content;}/********************************************************************************函数名:InitDis*函数描述:初始化12864和要用到的STM32的引脚*输入参数:无*输出结果:无*返回值:无*******************************************************************************/voidInitDis(void){IOInitOut();delay_init(8);//初始化延时函数的微妙计数基数。WriteCmd(0x30);//选择基本指令集,和,8位数据模式。delay_ms(2);WriteCmd(0x0c);//开显示,无游标,不反白.delay_ms(2);WriteCmd(0x01);//清除显示,并将DDRAM的地址计数器AC设为00H.delay_ms(2);WriteCmd(0x06);//设置,外部读写数据后,地址记数器AC会自动加1。delay_ms(2);WriteCmd(0x80);//将DDRAM地址计数器AC设为0.delay_ms(2);}/********************************************************************************函数名:DisStr*函数描述:显示字符串的函数*输入参数:字符串地址*输出结果:无*返回值:无*******************************************************************************/voidDisStr(uint8_t*s){while(*s!='\0'){WriteData(*s);s++;delay_ms(2);}}/********************************************************************************函数名:DisInt*函数描述:显示整型变量的函数,最多显示16位的整数(只能显示正数)*输入参数:16位二进制无符号整型数据*输出结果:无*返回值:无*******************************************************************************/voidDisInt(uint16_tnum){数倍,uint8_ttemp[17];uint8_tstr[17];inti=0,j=0;while(num!=0)//这里不能用num%10!=0,如果num是10的整//例如
本文标题:stm32-12864并行驱动程序
链接地址:https://www.777doc.com/doc-2860899 .html