微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 1602液晶屏显示程序:自定义字符+定时器时钟

1602液晶屏显示程序:自定义字符+定时器时钟

时间:10-02 整理:3721RD 点击:

第一次发帖,程序菜鸟级,基于原子的STM32板子,望指点。
不知为何“附件无法保存”,只好贴代码了。
先是[qq]810768333[/qq],要代码可q我。
h文件

  1. #define __1602_H         
  2. #include "sys.h"

  3. #define c_A 2
  4. #define c_B 3
  5. #define c_C 4
  6. #define c_D 5
  7. #define c_E 6
  8. #define c_F 7
  9. #define c_G 8

  10. #define PORT_CON GPIOE//控制脚口
  11. #define c_con c_E

  12. #define PORT_DATA GPIOF//数据脚口
  13. #define c_data c_F

  14. #define RS PEout(0)//数据/命令脚
  15. #define EP PEout(1)//使能脚
  16. #define RW PEout(2)//读写脚

  17. void lcd_init( void );
  18. void port_in( u8 data );
  19. void lcd_num(u8 add, u16 x );
  20. void lcd_string( u8 add, u8 *p );
  21. void lcd_com(u8 com);
  22. void LCD_Define( u8 m, u8 *p );
  23. void lcd_picture( u8 add, u8 pic );

  24. extern u8 tu[];
  25. extern u8 tu2[];
  26.                                     
  27. #endif

复制代码

c文件

  1. #include "1602.h"
  2. #include "delay.h"

  3. #define Tsp1 40
  4. #define Tpw 15
  5. #define Thd2 25

  6. u8 tu[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,//图形1:频谱柱子显示?
  7.                                 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,
  8.                                 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,
  9.                                 0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,
  10.                                 0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,
  11.                                 0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
  12.                                 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,
  13.                                 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,                                       
  14.                                 };

  15. u8 tu2[]={0x1F,0x15,0x0E,0x04,0x04,0x04,0x04,0x04,//图形2:各种小东西
  16.                                  0x00,0x1F,0x10,0x16,0x12,0x1E,0x00,0x00,
  17.                                  0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x08,
  18.                                  0x1F,0x11,0x0E,0x0E,0x15,0x04,0x0A,0x0A,
  19.                                  0x0F,0x0E,0x0C,0x08,0x08,0x1E,0x12,0x1E,
  20.                                  0x00,0x11,0x0A,0x04,0x0E,0x11,0x11,0x0E,
  21.                                  0x04,0x04,0x0E,0x0E,0x1F,0x04,0x04,0x0E,
  22.                                  0x14,0x01,0x14,0x00,0x02,0x08,0x02,0x14,
  23.                                 };

  24. void delay_10ns( u16 time )
  25. {
  26.         for ( ; time > 0; time -- );
  27. }
  28. void pin_init( void )
  29. {   
  30.         RCC->APB2ENR|=1<<c_con;    //使能PORTF时钟
  31.         RCC->APB2ENR|=1<<c_data;    //使能PORTD时钟                                                                                                   
  32.         PORT_CON->CRL&=0X00000000;
  33.         PORT_CON->CRL|=0X33333333;//PE.5推挽输出
  34.         PORT_DATA->CRL&=0X00000000;
  35.         PORT_DATA->CRL|=0X33333333;//PD推挽输出
  36. }

  37. void port_in( u8 data )
  38. {
  39.         PORT_DATA->ODR &= 0x00 <<0;
  40.         PORT_DATA->ODR |= data <<0;//通过配置寄存器输出数据给1602
  41. }

  42. void busy_check()//忙检测
  43. {
  44.         u8 bc = 0, times = 0;
  45.         delay_10ns( Tsp1 );
  46.         do
  47.         {
  48.                         RS = 0;
  49.                         RW = 1;
  50.                         delay_ms( 1 );
  51.                         EP = 1;
  52.                         bc = PORT_DATA->IDR & 0x80;
  53.                         delay_10ns( Tpw );
  54.                         EP = 0;
  55.                         delay_10ns( Tpw );
  56.                         delay_ms( 1 );
  57.                         times ++;
  58.         }while( bc && (times <= 10) );
  59. }

  60. void lcd_com(u8 com)//写指令
  61. {
  62.         RS = 0;
  63.         RW = 0;
  64.         port_in( com );
  65.         delay_10ns( Tsp1 );
  66.         EP=1;
  67.         delay_10ns( Tpw );
  68.         EP=0;
  69.         delay_10ns( Thd2 );
  70.         busy_check();
  71. }

  72. void lcd_dat(u8 dat)//写数据
  73. {       
  74.         RS = 1;
  75.         RW = 0;
  76.         port_in( dat );
  77.         delay_10ns( Tsp1 );
  78.         EP=1;
  79.         delay_10ns( Tpw );
  80.         EP=0;
  81.         delay_10ns( Thd2 );
  82.         busy_check();
  83. }

  84. void lcd_init()//初始化
  85. {
  86.         u8 i;
  87.         pin_init();
  88.         EP=0;
  89.         for ( i = 0; i < 3; i++ )
  90.         {
  91.                 lcd_com(0x38);                        //       
  92.                 delay_ms( 5 );
  93.         }
  94.         lcd_com(0x0c);                        //       
  95.         lcd_com(0x06);                        //       
  96.         lcd_com(0x01);                        //清除LCD的显示内容
  97. }
  98. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. void lcd_num(u8 add, u16 x )//两位数字输出
  100. {
  101.         u8 ten, unit;
  102. //        hun = x / 100;
  103.         ten = x / 10;
  104.         unit = x % 10;
  105.         lcd_com( add );
  106. //        lcd_dat( hun + 0x30 );
  107.         lcd_dat( ten + 0x30 );
  108.         lcd_dat( unit + 0x30 );
  109. }

  110. void lcd_string( u8 add, u8 *p )//字符串输出
  111. {
  112.         while( *p != '\0' )
  113.         {
  114.                 lcd_com( add );
  115.                 add ++;
  116.                 lcd_dat( *p );
  117.                 p ++;
  118.         }
  119. }

  120. //*------------自定义图形函数--------------*/
  121. void LCD_Define( u8 m, u8 *p )
  122. {
  123.         unsigned char i,s = 8*m;       
  124.         for ( i=0; i<s; i++ )
  125.         {
  126.                 lcd_com( 0x40+i );
  127.                 lcd_dat( p[ i ] );
  128.         }
  129. }

  130. void lcd_picture( u8 add, u8 pic ) //图形输出
  131. {
  132.         lcd_com( add );
  133.         lcd_dat( pic );
  134. }

复制代码


谢谢 小编 分享 !

小编你是想发布代码呢,还是有什么疑问需要大家帮你解答?

回想自己找代码的痛苦,想到自己曾经受过很多烧友帮忙,就给新手分享一下。

好东西,谢谢小编了!

thanks your giving。

最好能以工程文件的形式分享呢 或者代码多一些注释
只有代码很枯燥,别人也看不懂

我知道,只是上传不了,不知道怎么回事。

1602液晶屏显示程序:自定义字符+定时器时钟

谢谢分享谢谢分享                       谢谢分享
        谢谢分享谢谢分享                谢谢分享         
                    谢谢分享              谢谢分享谢谢分享谢谢分享
              谢谢分享              谢谢分享        谢                谢
              谢谢分享              谢谢分享        谢                谢
              谢谢分享              谢谢分享        分                分
              谢谢分享              谢谢分享        享                享
              谢谢分享              谢谢分享        谢                谢
              谢谢分享              谢谢分享        谢                谢
谢        谢谢分享               谢谢分享       分                分
谢谢     谢谢分享              谢谢分享        享                享
谢谢分 谢谢分享              谢谢分享        谢                谢

太有用了,小编我Q你

不错的文档,顶一下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top