STM32的1602程序.docx

上传人:b****5 文档编号:7668246 上传时间:2023-01-25 格式:DOCX 页数:7 大小:16.54KB
下载 相关 举报
STM32的1602程序.docx_第1页
第1页 / 共7页
STM32的1602程序.docx_第2页
第2页 / 共7页
STM32的1602程序.docx_第3页
第3页 / 共7页
STM32的1602程序.docx_第4页
第4页 / 共7页
STM32的1602程序.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

STM32的1602程序.docx

《STM32的1602程序.docx》由会员分享,可在线阅读,更多相关《STM32的1602程序.docx(7页珍藏版)》请在冰豆网上搜索。

STM32的1602程序.docx

STM32的1602程序

#ifndefLCD1602_STM32_H

#defineLCD1602_STM32_H

#defineLCD_RS_1GPIOE->BSRR=GPIO_Pin_07]--(LCD)D0~D7

#ifndefuchar

#defineucharunsignedchar

#endif

#ifndefuint

#defineuintunsignedint

#endif

externvoiddelay_nms(unsignedlongn);

externvoiddelay_nus(unsignedlongn);

uint8_tLCD_busy(void);;//插入小数点

LCD_DispString(str);//显示浮点小数

}

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

*名称:

LCD_Setpos_DispDecimal()

*功能:

在指定位置显示一个有效位不超过8位的浮点数

*入口参数:

row:

待显示的行1,2

*col:

待显示的列0~15

*num:

待显示的浮点数放大10的整数倍后得到的整数,不超过8位

*dot:

小数点的位数

*出口参数:

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

voidLCD_Setpos_DispDecimal(ucharrow,ucharcol,uint32_tnum,uchardot)

{

LCD_Setpos(row,col);

LCD_DispDecimal(num,dot);

}

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

*名称:

LCD_DispDateTime()

*功能:

显示日历,显示日期与时间

*入口参数:

year:

年,可以是任意值

*month:

月,1~12

*day:

日,1~31

*hour:

时,1~24或1~12

*min:

分,0~59

*sec:

秒,0~59

*出口参数:

*说明:

使用前必须先宏定义USE_LCD_DISP_DATE,在包含文件之前定义有效

*显示格式:

Date:

yyyy-mm-dd*

*Time:

hh:

mm:

ss*

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

voidLCD_DispDateTime(uint32_tyear,ucharmonth,ucharday,ucharhour,ucharmin,ucharsec)

{

LCD_Setpos(1,0);

LCD_DispString("Date:

");

LCD_Dispnum((uint32_t)year);

LCD_DispChar('-');

LCD_Dispnum((uint32_t)month);

LCD_DispChar('-');

LCD_Dispnum((uint32_t)day);

LCD_Setpos(1,15);

LCD_DispChar('*');//第一行结束符显示

LCD_Setpos(2,0);

LCD_DispString("Time:

");

LCD_Dispnum((uint32_t)hour);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)min);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)sec);

LCD_Setpos(2,15);

LCD_DispChar('*');//第二行结束符显示

}

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

*名称:

LCD_DispStopWatch()

*功能:

显示秒表,显示时,分,秒,10毫秒,精确到10ms

*入口参数:

hour:

时,1~24或1~12

*min:

分,0~59

*sec:

秒,0~59

*tenms:

10ms计数值,如3表示30ms

*出口参数:

*显示格式:

CurrentTime:

*

*hh:

mm:

ss:

tt*

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

voidLCD_DispStopWatch(ucharhour,ucharmin,ucharsec,uchartenms)

{

LCD_Setpos(1,0);

LCD_DispString("CurrentTime:

");

LCD_Setpos(1,15);

LCD_DispChar('*');//第一行结束符显示

LCD_Setpos(2,2);

LCD_Dispnum((uint32_t)hour);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)min);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)sec);

LCD_DispChar(':

');

LCD_Dispnum((uint32_t)tenms);

LCD_Setpos(2,15);

LCD_DispChar('*');//第二行结束符显示

}

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

*名称:

LCD_DispFreq()

*功能:

显示频率计,动态自动调整频率显示

*入口参数:

freq:

可以显示8位整数表示的频率值,频率范围1Hz~99MHz

*出口参数:

*说明:

入口的频率值单位是Hz,显示函数自动选择合适的显示方式

*freq>=1000000显示成6位小数的MHz

*elsefreq>=1000显示成3位小数的KHz

*elsefreq>=0默认显示单位是Hz(三个区间互斥)

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

voidLCD_DispFreq(uint32_tfreq)

{

LCD_Setpos(1,0);

LCD_DispString("CurrentFreq:

");

LCD_Setpos(2,1);//显示位置

if(freq>=1000000)

{

LCD_DispDecimal(freq,6);

LCD_DispString("MHz");

}

elseif(freq>=1000)

{

LCD_DispDecimal(freq,3);

LCD_DispString("KHz");

}

else{LCD_Dispnum(freq);

LCD_DispString("Hz");

}

LCD_Setpos(2,14);

LCD_DispString("OK");

}

//屏幕整体左移一格,用于滚动显示

voidLCD_ShiftLeft()

{

LCD_Writecmd(0x18);

}

//屏幕整体右移一格,用于滚动显示

voidLCD_ShiftRight(void)

{

LCD_Writecmd(0x1C);

}

//清屏,清除显示

voidLCD_Clear(void)

{

LCD_Writecmd(0x01);

}

//使光标还回原点位置

voidLCD_Return(void)

{

LCD_Writecmd(0x02);

}

//关显示

voidLCD_Close(void)

{

LCD_Writecmd(0x08);

}

//开显示

voidLCD_Open(void)

{

LCD_Writecmd(0x0C);

}

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

*名称:

LCD_FlickerChar()

*功能:

使指定位置字符闪烁,不显示光标

*入口参数:

row:

行1,2

*col:

列0~15

*出口参数:

*说明:

写命令0x0D不显示光标的闪烁,写命令0x0F是显示光标的闪烁

*一旦设定闪烁后,会根据位置变化闪烁,关闪烁写命令0x0C

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

voidLCD_FlickerChar(ucharrow,ucharcol)

{

LCD_Writecmd(0x0D);

LCD_Setpos(row,col);

}

//关闭字符闪烁

voidLCD_CloseFlicker(void)

{

LCD_Writecmd(0x0C);

}

//屏幕秒闪烁一次

voidLCD_FlickerScreen(void)

{

LCD_Writecmd(0x08);//关显示

delay_nms(500);

LCD_Writecmd(0x0C);//开显示

delay_nms(500);

}

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

*名称:

LCD_Init()

*功能:

初始化LCD1602

*入口参数:

*出口参数:

*常用命令:

0x38:

16*2显示,5*&点阵显示字符,8位数据;指令执行时间40us

*0x0C:

开显示,关光标40us

*0x08:

关显示,关光标40us

*0x0D:

字符闪烁,关光标,接着设定位置,闪烁周期左右

*0x0F:

字符闪烁,开光标

*0x06:

写完数据自动右移光标,普通情形,从左向右显示40us

*0x04:

写完数据自动左移光标,可以从右向左显示40us

*0x01:

清除显示内容,即清屏

*0x02:

使光标还回起始位置

*0x18:

屏幕上所有字符同时左移一格,适合滚动显示40us

*0x1C:

屏幕上所有字符同时右移一格,适合滚动显示40us

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

voidLCD_Init(void)

{

delay_nms(200);//延时20ms

LCD_WriteInitcmd(0x38);//16*2显示,5*7点阵,8位数据

delay_nms(10);

LCD_WriteInitcmd(0x38);//16*2显示,5*7点阵,8位数据

delay_nms(5);

LCD_WriteInitcmd(0x38);//16*2显示,5*7点阵,8位数据

delay_nms(5);

LCD_WriteInitcmd(0x08);//先关显示,后开显示

delay_nms(5);

LCD_WriteInitcmd(0x06);//自动右移光标,0x04为左移光标

delay_nms(5);

LCD_WriteInitcmd(0x01);//清除LCD的显示内容

delay_nms(6);

LCD_WriteInitcmd(0x0c);//显示开,关光标;0x08为关显示

delay_nms(5);

}

#endif//防止多次编译

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

*LCD1602驱动显示实验

*by追梦2011-4-3、5

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

#include""

#include""

#definePE00(uint32_t*)0x

//时钟配置函数8MHz*9=72MHz

voidRCC_Configuration()

{

RCC_DeInit();

RCC_HSEConfig(RCC_HSE_ON);//使能HSE

if(RCC_WaitForHSEStartUp()==SUCCESS)

{

RCC_HCLKConfig(RCC_SYSCLK_Div1);//HCLK=SYSCLK

RCC_PCLK2Config(RCC_HCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div2);

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

RCC_PLLCmd(ENABLE);

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource()!

=0x08);

}

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|\

RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

}

//延时nus

voiddelay_nus(unsignedlongn)

{

unsignedlongj;

while(n--)

{j=8;

while(j--);

}

}

//延时nms

voiddelay_nms(unsignedlongn)

{

while(n--)

delay_nus(1100);

}

//GPIO配置函数

voidGPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

=GPIO_Pin_All;

=GPIO_Speed_10MHz;

=GPIO_Mode_Out_OD;

GPIO_Init(GPIOD,&GPIO_InitStructure);//PD口OD输出

=(GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);

=GPIO_Mode_Out_OD;//~2OD输出

GPIO_Init(GPIOE,&GPIO_InitStructure);

}

///////////////////////////////////////////

intmain()

{

//uint32_ti=0;

charstr[]={"happy!

"};

RCC_Configuration();

GPIO_Configuration();

LCD_Init();

LCD_Setpos_DispString(1,3,str);

LCD_DispFreq(123456);

LCD_FlickerChar(2,3);

LCD_FlickerScreen();

LCD_FlickerScreen();

LCD_FlickerScreen();

delay_nms(2000);

LCD_CloseFlicker();

while

(1)

{

};

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1