📄 yejing12864.txt
字号:
#include <absacc.h>
#include <reg51.h>
#include <math.h>
#include "display_drv.h"
#include "font.h"
#include "font2.h"
#include <absacc.h>
#define DWPort0 XBYTE[0x8002]
#define DRPort0 XBYTE[0x8003]
#define IWPort0 XBYTE[0x8000]
#define IRPort0 XBYTE[0x8001]
#define DWPort1 XBYTE[0x9002]
#define DRPort1 XBYTE[0x9003]
#define IWPort1 XBYTE[0x9000]
#define IRPort1 XBYTE[0x9001]
unsigned int data Dispointer;
sbit lcd_cs0=P2^2;
sbit lcd_cs1=P2^1;
//sbit lcd_res=P1^5;
sbit lcd_rw=P3^6;
sbit lcd_EN=P2^3;
sbit lcd_DC=P2^0;
//void main(void){
// unsigned char k;
// display_on();
// cls();
// display_top(0);
//Set_Display_Add(0);
//for(k=128;k<255;k++)
//{
//putchar(k);
//}
//putchar(255);
// display_on();
// cls();
// display_top(0);
// Set_Display_Add(0);
//while(1){
//}
//}
void display_init(void)
{
display_on();
display_top(0);
cls();
//lcd_res=1;
}
void lcddelay()
{
unsigned char k;
for(k=0;k<10;k++);;
}
void printf(unsigned char code *screen)
{
while (*screen != '\0')
{
putchar(*screen++);
}
}
bit naga=0;
#if font_select
void putchar(unsigned char a){
unsigned char *p;
if(a=='\n'){
Set_Display_Add((Dispointer&0x380)+0x80);
}
else
{
p=font5x7+(a*5);
if(!naga){
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
}
else
{
Display(~(*p));
p++;
Display(~(*p));
p++;
Display(~(*p));
p++;
Display(~(*p));
p++;
Display(~(*p));
}
}
}
#else
void putchar(unsigned char a){
unsigned char *p;
if(a=='\n'){
Set_Display_Add((Dispointer&0x380)+0x80);
}
else
{
p=Character8x8+(a*8);
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
p++;
Display(*p);
}
}
#endif
void putchinese(unsigned char a[],unsigned int ad)
{
char i;
unsigned char *p;
p=a;
Set_Display_Add(ad);
for(i=0;i<16;i++)
{Display(*p);
p++;}
Set_Display_Add(ad+128);
for(i=0;i<16;i++)
{Display(*p);
p++;}
}
/*
void DisplayArray(Uchar s[]){
unsigned char *p;
unsigned int add;
p=s;
Set_Display_Add(0);
for(add=0;add<1024;add++){
Display(*p);
p++;
}
}*/
#if array_display
void DisplayArray(unsigned char s[]){
unsigned char *p;
unsigned char k,j;
p=s;
for(k=0;k<8;k++){
SetCommand(0xb8+k,0);
SetCommand(0x40,0);
for(j=0;j<64;j++)
{SetCommand(0x40+j,0);
WriteData(*p,0);
p++;
}
SetCommand(0xb8+k,1);
SetCommand(0x40,1);
for(j=0;j<64;j++)
{SetCommand(0x40+j,1);
WriteData(*p,1);
p++;
}
}
}
#endif
void YXAxle(unsigned char y,unsigned char x)
{
int i;
for(i=0;i<128;i++)
{
Set_Display_Add(128*y+i);
Display(0x80);
}
for(i=0;i<8;i++)
{
Set_Display_Add(x+128*i);
Display(0xff);}
}
static bit bdata flag;
void Display(unsigned char dat){
if((Dispointer&0x3f)==0){
flag=((Dispointer&0x40)==0x40);
SetCommand(0xb8+((Dispointer&0x380)>>7),flag);
SetCommand(0x40+(Dispointer&0x3f),flag);
}
WriteData(dat,flag);
Dispointer++; //此处Dispointer有可能越界,但只是用了低10位,正好利用越界让低10位以模1024循环,Dispointer只要取低10位即可,不用写限制语句
}
unsigned char GetDisplay(){
if((Dispointer&0x3f)==0){
flag=((Dispointer&0x40)==0x40);
SetCommand(0xb8+((Dispointer&0x380)>>7),flag);
SetCommand(0x40+(Dispointer&0x3f),flag);
}
Dispointer++; //此处Dispointer有可能越界,但只是用了低10位,正好利用越界让低10位以模1024循环,Dispointer只要取低10位即可,不用写限制语句
return ReadData(flag);
}
void Set_Display_Add(unsigned int add){
flag=((add&0x40)==0x40);
SetCommand(0xb8+((add&0x380)>>7),flag);
SetCommand(0x40+(add&0x3f),flag);
Dispointer=add;
}
void SetCommand(unsigned char Command,bit CS)
{
EA=0;
if(CS==0)
{
lcd_cs1=1;
lcd_cs0=0;
}
else
{
lcd_cs1=0;
lcd_cs0=1;
}
lcd_DC=0;
P0=Command;
lcd_rw=0;
lcd_EN=0;
lcd_EN=1;
lcd_EN=0;
lcd_cs1=1;
lcd_cs0=1;
lcddelay();
EA=1;
}
void WriteData(unsigned char Data,bit CS){
EA=0;
if(CS==0)
{
lcd_cs1=1;
lcd_cs0=0;
}
else
{
lcd_cs1=0;
lcd_cs0=1;
}
lcd_DC=1;
P0=Data;
lcd_rw=0;
lcd_EN=0;
lcd_EN=1;
lcd_EN=0;
lcd_cs1=1;
lcd_cs0=1;
lcddelay();
EA=1;
}
void cls(void){
unsigned char data k,j;
for(k=0;k<8;k++){
SetCommand(0xb8+k,1);
SetCommand(0x40,1);
for(j=0;j<64;j++){
WriteData(0x0,1);
}
SetCommand(0xb8+k,0);
SetCommand(0x40,0);
for(j=0;j<64;j++){
WriteData(0x0,0);
}
}
Set_Display_Add(0);
}
#if char_send
void SendChar(unsigned char m)
{
switch (m>>4)
{
case 0x00: putchar('0');
break;
case 0x01: putchar('1');
break;
case 0x02: putchar('2');
break;
case 0x03: putchar('3');
break;
case 0x04: putchar('4');
break;
case 0x05: putchar('5');
break;
case 0x06: putchar('6');
break;
case 0x07: putchar('7');
break;
case 0x08: putchar('8');
break;
case 0x09: putchar('9');
break;
case 0x0a: putchar('A');
break;
case 0x0b: putchar('B');
break;
case 0x0c: putchar('C');
break;
case 0x0d: putchar('D');
break;
case 0x0e: putchar('E');
break;
case 0x0f: putchar('F');
break;
default:break;
}
switch (m&0x0f)
{
case 0x00: putchar('0');
break;
case 0x01: putchar('1');
break;
case 0x02: putchar('2');
break;
case 0x03: putchar('3');
break;
case 0x04: putchar('4');
break;
case 0x05: putchar('5');
break;
case 0x06: putchar('6');
break;
case 0x07: putchar('7');
break;
case 0x08: putchar('8');
break;
case 0x09: putchar('9');
break;
case 0x0a: putchar('A');
break;
case 0x0b: putchar('B');
break;
case 0x0c: putchar('C');
break;
case 0x0d: putchar('D');
break;
case 0x0e: putchar('E');
break;
case 0x0f: putchar('F');
break;
default:break;
}
}
#endif
#if int_send
void SendInt(unsigned int m){
SendChar(((unsigned char *)&m)[0]);
SendChar(((unsigned char *)&m)[1]);
}
#endif
#if long_send
void SendLong(unsigned long m){
SendChar(((unsigned char *)&m)[0]);
SendChar(((unsigned char *)&m)[1]);
SendChar(((unsigned char *)&m)[2]);
SendChar(((unsigned char *)&m)[3]);
}
#endif
unsigned char ReadData(bit CS){
if (CS==0){
while((IRPort1&0x80)==0x80);
return DRPort1;
}
else{
while((IRPort0&0x80)==0x80);
return DRPort0;
}
}
unsigned char HEX2BCD(unsigned char k)
{
return ((k/10)<<4)+B;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -