找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1507|回复: 3
收起左侧

通过8255A实现LCD12864与矩阵按键 单片机源程序

[复制链接]
ID:1020716 发表于 2022-7-18 22:21 | 显示全部楼层 |阅读模式
大家好,还是那个朦胧的我,最近学习了8255A的运用,尝试与LCD12864连接起来,求各位大佬看看,求指点

单片机源程序如下:
  1. #include <main.H>


  2. void main()
  3. {
  4. LCD_Init();
  5. LCD_Clear();
  6. while(1)
  7. {
  8. BUTT_4X4_Dat();
  9. }
  10. }
复制代码
  1. #ifndef __lcd12864_H__
  2. #define __lcd12864_H__

  3. #include <8255A.h>

  4. #define LCD_RS_0 0x08
  5. #define LCD_RS_1 0x09

  6. #define LCD_EN_0 0x0a
  7. #define LCD_EN_1 0x0b

  8. #define LCD_CS1_0 0x0c
  9. #define LCD_CS1_1 0x0d

  10. #define LCD_CS2_0 0x0e
  11. #define LCD_CS2_1 0x0f

  12. extern void LCD_Init();
  13. extern void LCD_Clear();
  14. extern void LCD_Write_hz(uchar x,uchar y,uchar *hz,uchar dat);


  15. #endif
复制代码
  1. #ifndef __8255A_H__
  2. #define __8255A_H__

  3. #include <absacc.h>
  4. #include <intrins.h>

  5. #define uchar unsigned char
  6. #define uint unsigned int

  7. #define PA XBYTE[0xfcff]
  8. #define PB XBYTE[0xfdff]
  9. #define PC XBYTE[0xfeff]
  10. #define COM XBYTE[0xffff]

  11. #endif
复制代码
  1. #include <BUTT.h>

  2. uchar key,key_Dat;

  3. void BUTT_4X4_Dat()
  4. {
  5. uchar a;
  6.         
  7.         key=60;
  8.         key_Dat=60;
  9.         
  10.         P1=0x0f;
  11.         
  12.         if(P1!=0x0f)
  13.         {
  14.          _nop_();
  15.                 if(P1!=0x0f)
  16.                 {
  17.                  switch(P1)
  18.                  {
  19.                          case 0x0e:key=0;break;
  20.                          case 0x0d:key=1;break;
  21.                          case 0x0b:key=2;break;
  22.                          case 0x07:key=3;break;
  23.                  }
  24.                  P1=0xf0;
  25.                  switch(P1)
  26.                  {
  27.                          case 0xe0:key=key;break;
  28.                          case 0xd0:key=key+4;break;
  29.                          case 0xb0:key=key+8;break;
  30.                          case 0x70:key=key+12;break;
  31.                  }
  32.                  while((a < 250) && (P1!=0xf0))
  33.                  {
  34.                    _nop_();
  35.                          a++;
  36.                  }
  37.                 }
  38.         }
  39. }
复制代码
  1. #include <lcd12864.h>

  2. void LCD_Write(bit Way,uchar dat)
  3. {
  4. if(Way == 1) COM=LCD_RS_1; else COM=LCD_RS_0;
  5.         PA=dat;
  6.         _nop_();
  7.         COM=LCD_EN_0;
  8.         _nop_();
  9.         COM=LCD_EN_1;
  10. }

  11. void LCD_Init()
  12. {
  13.         COM=LCD_RS_1;
  14.         COM=LCD_EN_1;
  15.          COM=LCD_CS1_1;
  16.         COM=LCD_CS2_1;
  17.         LCD_Write(0,0x3f);
  18.         LCD_Write(0,0xc0);
  19.         LCD_Write(0,0xb8);
  20.         LCD_Write(0,0x40);
  21. }

  22. void LCD_Clear()
  23. {
  24. uchar i,j;
  25.                 COM=LCD_CS1_1;
  26.         COM=LCD_CS2_1;
  27.         for(i=0;i<8;i++)
  28.         {
  29.          LCD_Write(0,0xb8+i);
  30.                
  31.                 for(j=0;j<64;j++)
  32.                 {
  33.                  LCD_Write(0,0x40+j);
  34.                         LCD_Write(1,0x00);
  35.                 }
  36.         }
  37. }

  38. void LCD_X_Y(uchar x,uchar y)
  39. {
  40. if(x > 7) x = 7;
  41. if(y > 127) y = 127;
  42.         
  43.         if(y<64)
  44.         {
  45.                 COM=LCD_CS1_1;
  46.         COM=LCD_CS2_0;
  47.                 LCD_Write(0,0xb8+y);
  48.         }
  49.         else
  50.         {
  51.          COM=LCD_CS1_0;
  52.         COM=LCD_CS2_1;
  53.                 y&=0xef;
  54.                 LCD_Write(0,0xb8+y);
  55.         }
  56.         LCD_Write(0,0x40+x);
  57. }

  58. void LCD_Write_hz(uchar x,uchar y,uchar *hz,uchar dat)
  59. {
  60. uchar i;
  61.         
  62.         LCD_X_Y(x,y);
  63.         for(i=0;i<16;i++)
  64.   LCD_Write(1,dat[hz+16+i]);
  65.         
  66.                 LCD_X_Y(x+1,y);
  67.         for(i=0;i<16;i++)
  68.   LCD_Write(1,dat[hz+16+8+i]);
  69. }
  70.         

复制代码

Keil代码.7z

13.97 KB, 下载次数: 16

回复

使用道具 举报

ID:584814 发表于 2022-7-19 09:18 | 显示全部楼层
是求表扬还是解疑问 ? 如果是前者,赏你一个小红花
回复

使用道具 举报

ID:1020716 发表于 2022-7-19 18:35 | 显示全部楼层
man1234567 发表于 2022-7-19 09:18
是求表扬还是解疑问 ? 如果是前者,赏你一个小红花

哈哈哈,想知道有没有什么值得改进的地方
回复

使用道具 举报

ID:1042173 发表于 2022-8-31 07:34 | 显示全部楼层
怎不加注解呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表