|
大家好,還是那個朦朧的我,最近學習了8255A的運用,嘗試與LCD12864連接起來,求各位大佬看看,求指點
單片機源程序如下:
- #include <main.H>
- void main()
- {
- LCD_Init();
- LCD_Clear();
- while(1)
- {
- BUTT_4X4_Dat();
- }
- }
復制代碼- #ifndef __lcd12864_H__
- #define __lcd12864_H__
- #include <8255A.h>
- #define LCD_RS_0 0x08
- #define LCD_RS_1 0x09
- #define LCD_EN_0 0x0a
- #define LCD_EN_1 0x0b
- #define LCD_CS1_0 0x0c
- #define LCD_CS1_1 0x0d
- #define LCD_CS2_0 0x0e
- #define LCD_CS2_1 0x0f
- extern void LCD_Init();
- extern void LCD_Clear();
- extern void LCD_Write_hz(uchar x,uchar y,uchar *hz,uchar dat);
- #endif
復制代碼- #ifndef __8255A_H__
- #define __8255A_H__
- #include <absacc.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define PA XBYTE[0xfcff]
- #define PB XBYTE[0xfdff]
- #define PC XBYTE[0xfeff]
- #define COM XBYTE[0xffff]
- #endif
復制代碼- #include <BUTT.h>
- uchar key,key_Dat;
- void BUTT_4X4_Dat()
- {
- uchar a;
-
- key=60;
- key_Dat=60;
-
- P1=0x0f;
-
- if(P1!=0x0f)
- {
- _nop_();
- if(P1!=0x0f)
- {
- switch(P1)
- {
- case 0x0e:key=0;break;
- case 0x0d:key=1;break;
- case 0x0b:key=2;break;
- case 0x07:key=3;break;
- }
- P1=0xf0;
- switch(P1)
- {
- case 0xe0:key=key;break;
- case 0xd0:key=key+4;break;
- case 0xb0:key=key+8;break;
- case 0x70:key=key+12;break;
- }
- while((a < 250) && (P1!=0xf0))
- {
- _nop_();
- a++;
- }
- }
- }
- }
復制代碼- #include <lcd12864.h>
- void LCD_Write(bit Way,uchar dat)
- {
- if(Way == 1) COM=LCD_RS_1; else COM=LCD_RS_0;
- PA=dat;
- _nop_();
- COM=LCD_EN_0;
- _nop_();
- COM=LCD_EN_1;
- }
- void LCD_Init()
- {
- COM=LCD_RS_1;
- COM=LCD_EN_1;
- COM=LCD_CS1_1;
- COM=LCD_CS2_1;
- LCD_Write(0,0x3f);
- LCD_Write(0,0xc0);
- LCD_Write(0,0xb8);
- LCD_Write(0,0x40);
- }
- void LCD_Clear()
- {
- uchar i,j;
- COM=LCD_CS1_1;
- COM=LCD_CS2_1;
- for(i=0;i<8;i++)
- {
- LCD_Write(0,0xb8+i);
-
- for(j=0;j<64;j++)
- {
- LCD_Write(0,0x40+j);
- LCD_Write(1,0x00);
- }
- }
- }
- void LCD_X_Y(uchar x,uchar y)
- {
- if(x > 7) x = 7;
- if(y > 127) y = 127;
-
- if(y<64)
- {
- COM=LCD_CS1_1;
- COM=LCD_CS2_0;
- LCD_Write(0,0xb8+y);
- }
- else
- {
- COM=LCD_CS1_0;
- COM=LCD_CS2_1;
- y&=0xef;
- LCD_Write(0,0xb8+y);
- }
- LCD_Write(0,0x40+x);
- }
- void LCD_Write_hz(uchar x,uchar y,uchar *hz,uchar dat)
- {
- uchar i;
-
- LCD_X_Y(x,y);
- for(i=0;i<16;i++)
- LCD_Write(1,dat[hz+16+i]);
-
- LCD_X_Y(x+1,y);
- for(i=0;i<16;i++)
- LCD_Write(1,dat[hz+16+8+i]);
- }
-
復制代碼 |
-
-
Keil代碼.7z
2022-7-19 00:25 上傳
點擊文件名下載附件
13.97 KB, 下載次數: 16
|