搜索

[活动专区] 【赛元95F】+6.DIY拓展4:焊接Lcd屏,准备盖2楼啦!

[复制链接]
1188|10
 楼主 | 2020-3-26 21:12 | 显示全部楼层 |阅读模式
家里一堆1602的屏幕,找来几个铜柱、接线柱和一些导线,开始把1602给点亮哈!材料备齐,如下:
875555e7caa45b435b.png

使用特权

评论回复
 楼主 | 2020-3-26 21:15 | 显示全部楼层
2min后,叮叮叮,屏幕焊接好了,2楼大致出来了,一楼的地基也好了,哈,看成果吧!

723705e7caa7003b73.png
       2楼住着小液晶屏幕
233275e7caa874a540.png
      1楼的柱子打好了,可以通电话了哈





使用特权

评论回复
 楼主 | 2020-3-26 21:15 | 显示全部楼层
下面开始拼接,两层小洋楼平地起,我住在里面,远方那个她呢?你在哪?
358285e7cab0c77240.png

使用特权

评论回复
 楼主 | 2020-3-26 21:16 | 显示全部楼层
驱动测试代码如下:(实现对1602液晶的显示)
  1. //lcd1602.c代码
  2. #include "lcd1602.h"

  3. sbit rs = P2^7;
  4. sbit rw = P2^6;
  5. sbit en = P2^5;
  6. #define  Lcd_Date  P3
  7. /*****************************************************
  8. *函数名称:Lcd1602_Delay(unsigned int c)
  9. *函数功能:lcd1602延时函数
  10. *入口参数:unsigned int c
  11. *出口参数:void
  12. *****************************************************/
  13. void Lcd1602_Delay(unsigned int c)   
  14. {
  15.   unsigned char a,b;
  16.         for (; c>0; c--)
  17.         {
  18.                  for (b=199;b>0;b--)
  19.                     for(a=4;a>0;a--);             
  20.         }
  21.            
  22. }

  23. /*****************************************************
  24. *函数名称:void LcdWriteCom(unsigned char cmd)  
  25. *函数功能:lcd1602写指令函数
  26. *入口参数:unsigned char cmd
  27. *出口参数:void
  28. *****************************************************/
  29. void LcdWriteCom(unsigned char cmd)
  30. {
  31.    rs = 0;
  32.          rw = 0;
  33.          en = 0;
  34.          Lcd_Date = cmd;
  35.          Lcd1602_Delay(1);
  36.          en = 1;
  37.          Lcd1602_Delay(5);
  38.          en = 0;
  39. }
  40. /*****************************************************
  41. *函数名称:void LcdWriteData(unsigned char date)  
  42. *函数功能:lcd1602写数据函数
  43. *入口参数:unsigned char date
  44. *出口参数:void
  45. *****************************************************/
  46. void LcdWriteData(unsigned char date)
  47. {
  48.          rs = 1;
  49.          rw = 0;
  50.          en = 0;
  51.          Lcd_Date = date;
  52.          Lcd1602_Delay(1);
  53.          en = 1;
  54.          Lcd1602_Delay(5);
  55.          en = 0;
  56. }

  57. /*****************************************************
  58. *函数名称:void LcdInit(void)   
  59. *函数功能:lcd1602初始化函数
  60. *入口参数:void
  61. *出口参数:void
  62. *****************************************************/
  63. void LcdInit(void)
  64. {
  65.         LcdWriteCom(0x38);  //开显示
  66.         Lcd1602_Delay(5);
  67.         LcdWriteCom(0x0c);  //不显示光标
  68.         Lcd1602_Delay(5);
  69.         LcdWriteCom(0x06);  //写1个指针加1
  70.         Lcd1602_Delay(5);
  71.         LcdWriteCom(0x01);  //清屏
  72.         Lcd1602_Delay(5);
  73.         LcdWriteCom(0x80);  //设置数据指针起点
  74.         Lcd1602_Delay(5);
  75. }

  76. /*****************************************************
  77. *函数名称:void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)   
  78. *函数功能:按指定位置显示一个字符
  79. *入口参数:unsigned char X, unsigned char Y, unsigned char DData,限制X不能大于15,Y不能大于1
  80. *出口参数:void
  81. *****************************************************/
  82. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  83. {
  84.          Y &= 0x1;
  85.          X &= 0xF; //限制X不能大于15,Y不能大于1
  86.          if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
  87.          X |= 0x80; // 算出指令码
  88.          LcdWriteCom(X); //这里不检测忙信号,发送地址码
  89.          LcdWriteData(DData);
  90. }
  91. /*****************************************************
  92. *函数名称:void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  93. *函数功能:按指定位置显示一个字符串
  94. *入口参数:unsigned char X, unsigned char Y, unsigned char code *DData,限制X不能大于15,Y不能大于1
  95. *出口参数:void
  96. *****************************************************/
  97. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  98. {
  99.   unsigned char ListLength;
  100.   ListLength = 0;
  101.   Y &= 0x1;
  102.   X &= 0xF; //限制X不能大于15,Y不能大于1
  103.   while (DData[ListLength]>=0x20) //若到达字串尾则退出
  104.   {
  105.                  if (X <= 0xF) //X坐标应小于0xF
  106.                         {
  107.                          DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
  108.                          ListLength++;
  109.                          X++;
  110.                         }
  111.   }
  112. }
复制代码


使用特权

评论回复
 楼主 | 2020-3-26 21:17 | 显示全部楼层
lcd1602.h文件代码
  1. /****************************************************************************/
  2. //lcd1602.h代码
  3. #ifndef _LCD1602_H
  4. #define _LCD1602_H
  5. #include "H/SC95F861x_C.H"
  6. void Lcd1602_Delay(unsigned int c);
  7. void LcdWriteCom(unsigned char cmd);
  8. void LcdWriteData(unsigned char date);
  9. void LcdInit(void);
  10. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  11. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  12. #endif
复制代码


使用特权

评论回复
 楼主 | 2020-3-26 21:18 | 显示全部楼层
main.c测试代码
  1. /****************************************************************************/
  2. //main.c测试代码

  3. IO_Init();
  4. Uart_Init(32,9600);
  5. Uart_Send_String("\r\n串口初始化..............OK!\n");
  6. Timer_Init();
  7. Uart_Send_String("定时器初始化..............OK!\n");
  8. LcdInit();
  9. Uart_Send_String("Lcd初始化..............OK!\n");
  10. DisplayListChar(0, 0, "SC 95F8617 Demo!");
  11. DisplayListChar(9, 1, "--21ic");
复制代码


使用特权

评论回复
 楼主 | 2020-3-26 21:18 | 显示全部楼层
忙了大半夜,展示一下吧,哈哈哈,完了可以去睡觉了。
955165e7caba4d6e0b.png

使用特权

评论回复
| 2020-3-26 22:31 | 显示全部楼层
这种屏不用SPI驱动实在是太浪费IO了

使用特权

评论回复
 楼主 | 2020-3-27 10:46 | 显示全部楼层
knk 发表于 2020-3-26 22:31
这种屏不用SPI驱动实在是太浪费IO了

反正IO多的是

使用特权

评论回复
 楼主 | 2020-3-27 11:34 | 显示全部楼层
knk 发表于 2020-3-26 22:31
这种屏不用SPI驱动实在是太浪费IO了

1602支持SPI吗?可以用四线的啊?你傻了吧

使用特权

评论回复
| 2020-3-27 20:17 | 显示全部楼层
真佩服版主啊,一系列作品,而且程序都发出来了,太好了

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表