1602液晶屏显示程序:自定义字符+定时器时钟
第一次发帖,程序菜鸟级,基于原子的STM32板子,望指点。
不知为何“附件无法保存”,只好贴代码了。
先是[qq]810768333[/qq],要代码可q我。
h文件
- #define __1602_H
- #include "sys.h"
- #define c_A 2
- #define c_B 3
- #define c_C 4
- #define c_D 5
- #define c_E 6
- #define c_F 7
- #define c_G 8
- #define PORT_CON GPIOE//控制脚口
- #define c_con c_E
- #define PORT_DATA GPIOF//数据脚口
- #define c_data c_F
- #define RS PEout(0)//数据/命令脚
- #define EP PEout(1)//使能脚
- #define RW PEout(2)//读写脚
- void lcd_init( void );
- void port_in( u8 data );
- void lcd_num(u8 add, u16 x );
- void lcd_string( u8 add, u8 *p );
- void lcd_com(u8 com);
- void LCD_Define( u8 m, u8 *p );
- void lcd_picture( u8 add, u8 pic );
- extern u8 tu[];
- extern u8 tu2[];
-
- #endif
- #include "1602.h"
- #include "delay.h"
- #define Tsp1 40
- #define Tpw 15
- #define Thd2 25
- u8 tu[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,//图形1:频谱柱子显示?
- 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,
- 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,
- 0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,
- 0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,
- 0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
- 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
- 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
- };
- u8 tu2[]={0x1F,0x15,0x0E,0x04,0x04,0x04,0x04,0x04,//图形2:各种小东西
- 0x00,0x1F,0x10,0x16,0x12,0x1E,0x00,0x00,
- 0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x08,
- 0x1F,0x11,0x0E,0x0E,0x15,0x04,0x0A,0x0A,
- 0x0F,0x0E,0x0C,0x08,0x08,0x1E,0x12,0x1E,
- 0x00,0x11,0x0A,0x04,0x0E,0x11,0x11,0x0E,
- 0x04,0x04,0x0E,0x0E,0x1F,0x04,0x04,0x0E,
- 0x14,0x01,0x14,0x00,0x02,0x08,0x02,0x14,
- };
- void delay_10ns( u16 time )
- {
- for ( ; time > 0; time -- );
- }
- void pin_init( void )
- {
- RCC->APB2ENR|=1<<c_con; //使能PORTF时钟
- RCC->APB2ENR|=1<<c_data; //使能PORTD时钟
- PORT_CON->CRL&=0X00000000;
- PORT_CON->CRL|=0X33333333;//PE.5推挽输出
- PORT_DATA->CRL&=0X00000000;
- PORT_DATA->CRL|=0X33333333;//PD推挽输出
- }
- void port_in( u8 data )
- {
- PORT_DATA->ODR &= 0x00 <<0;
- PORT_DATA->ODR |= data <<0;//通过配置寄存器输出数据给1602
- }
- void busy_check()//忙检测
- {
- u8 bc = 0, times = 0;
- delay_10ns( Tsp1 );
- do
- {
- RS = 0;
- RW = 1;
- delay_ms( 1 );
- EP = 1;
- bc = PORT_DATA->IDR & 0x80;
- delay_10ns( Tpw );
- EP = 0;
- delay_10ns( Tpw );
- delay_ms( 1 );
- times ++;
- }while( bc && (times <= 10) );
- }
- void lcd_com(u8 com)//写指令
- {
- RS = 0;
- RW = 0;
- port_in( com );
- delay_10ns( Tsp1 );
- EP=1;
- delay_10ns( Tpw );
- EP=0;
- delay_10ns( Thd2 );
- busy_check();
- }
- void lcd_dat(u8 dat)//写数据
- {
- RS = 1;
- RW = 0;
- port_in( dat );
- delay_10ns( Tsp1 );
- EP=1;
- delay_10ns( Tpw );
- EP=0;
- delay_10ns( Thd2 );
- busy_check();
- }
- void lcd_init()//初始化
- {
- u8 i;
- pin_init();
- EP=0;
- for ( i = 0; i < 3; i++ )
- {
- lcd_com(0x38); //
- delay_ms( 5 );
- }
- lcd_com(0x0c); //
- lcd_com(0x06); //
- lcd_com(0x01); //清除LCD的显示内容
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void lcd_num(u8 add, u16 x )//两位数字输出
- {
- u8 ten, unit;
- // hun = x / 100;
- ten = x / 10;
- unit = x % 10;
- lcd_com( add );
- // lcd_dat( hun + 0x30 );
- lcd_dat( ten + 0x30 );
- lcd_dat( unit + 0x30 );
- }
- void lcd_string( u8 add, u8 *p )//字符串输出
- {
- while( *p != '\0' )
- {
- lcd_com( add );
- add ++;
- lcd_dat( *p );
- p ++;
- }
- }
- //*------------自定义图形函数--------------*/
- void LCD_Define( u8 m, u8 *p )
- {
- unsigned char i,s = 8*m;
- for ( i=0; i<s; i++ )
- {
- lcd_com( 0x40+i );
- lcd_dat( p[ i ] );
- }
- }
- void lcd_picture( u8 add, u8 pic ) //图形输出
- {
- lcd_com( add );
- lcd_dat( pic );
- }
谢谢 小编 分享 !
小编你是想发布代码呢,还是有什么疑问需要大家帮你解答?
回想自己找代码的痛苦,想到自己曾经受过很多烧友帮忙,就给新手分享一下。
好东西,谢谢小编了!
thanks your giving。
最好能以工程文件的形式分享呢 或者代码多一些注释
只有代码很枯燥,别人也看不懂
我知道,只是上传不了,不知道怎么回事。
1602液晶屏显示程序:自定义字符+定时器时钟
谢谢分享谢谢分享 谢谢分享
谢谢分享谢谢分享 谢谢分享
谢谢分享 谢谢分享谢谢分享谢谢分享
谢谢分享 谢谢分享 谢 谢
谢谢分享 谢谢分享 谢 谢
谢谢分享 谢谢分享 分 分
谢谢分享 谢谢分享 享 享
谢谢分享 谢谢分享 谢 谢
谢谢分享 谢谢分享 谢 谢
谢 谢谢分享 谢谢分享 分 分
谢谢 谢谢分享 谢谢分享 享 享
谢谢分 谢谢分享 谢谢分享 谢 谢
太有用了,小编我Q你
不错的文档,顶一下