📄 display.c
字号:
0xAA,0xAA,0xA9,0xF9,0x29,0x0C,0x08,0x00,
0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,
0x4A,0x4A,0x4A,0x4B,0x48,0x60,0x40,0x00 };
/* 苏 */
const prog_char PAGE_Car11[32]={ 0x04,0x04,0x44,0x44,0x5F,0x44,0xF4,0x44, // 苏
0x44,0x44,0x5F,0xE4,0x44,0x06,0x04,0x00,
0x00,0x88,0x46,0x20,0x10,0x0C,0x03,0x00,
0x00,0x40,0x80,0x7F,0x02,0x04,0x0C,0x00 };
/* 沪 */
const prog_char PAGE_Car12[32]={ 0x10,0x22,0x64,0x0C,0x80,0x00,0xF8,0x88, // 沪
0x89,0x8A,0x8E,0x88,0x88,0xFC,0x08,0x00,
0x04,0x04,0xFC,0x03,0x80,0x60,0x1F,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00 };
/* 浙 */
const prog_char PAGE_Car13[32]={ 0x10,0x22,0x64,0x0C,0x90,0x10,0xFF,0x10, // 浙
0x90,0xFC,0x44,0x44,0xC2,0x62,0x40,0x00,
0x04,0x04,0xFE,0x01,0x42,0x82,0x7F,0x41,
0x20,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00 };
/* 皖 */
const prog_char PAGE_Car14[32]={ 0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x10,0x0C, // 皖
0x24,0x25,0x26,0x34,0x24,0x94,0x0C,0x00,
0x00,0x3F,0x10,0x10,0x10,0xBF,0x41,0x31,
0x0F,0x01,0x01,0x3F,0x41,0x41,0x71,0x00 };
/* 京 */
const prog_char PAGE_Car15[32]={ 0x08,0x08,0x08,0xE8,0x28,0x28,0x29,0x2E, // 京
0x28,0x28,0x28,0xF8,0x28,0x0C,0x08,0x00,
0x00,0x00,0x40,0x23,0x1A,0x42,0x82,0x7E,
0x02,0x0A,0x12,0x33,0x60,0x00,0x00,0x00 };
/* 查表 */
const prog_char TABE_CAR[15][3]= { 0xB4,0xF3,0,
0xD0,0xA1,1,
0xD6,0xD0,2,
0xD0,0xCD,3,
0xBF,0xA8,4,
0xB3,0xB5,5,
0xBD,0xCE,6,
0xBB,0xF5,7,
0xC7,0xE1,8,
0xD6,0xD8,9,
0xCB,0xD5,10,
0xBB,0xA6,11,
0xD5,0xE3,12,
0xCD,0xEE,13,
0xBE,0xA9,14 };
//ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
//PGM_P AA = (&PAGE23[0][0]);
PGM_P XX ;
uchar *PP;
//PGM_P AAB = (&PAGE24[0][0]);
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
void Disp_pwm(void)
{
//
MCUCR |=_BV(SRE) |_BV(SRW10); //外部SRAM可用 SRW10高段WAIT
XMCRA |= _BV(SRW11);
// XMCRB |= _BV(XMBK); //外部SRAM的总线保持
DDRD = 0XEF;
DDRB = 0XFF;
PORTD =0X03;
DDRB = 0XFF;
PORTB = 0X00;
//加PWM用在LCD中
TCCR0 |=_BV(CS01);
TCCR3A |= _BV(COM3A1) ;
TCCR3B |= _BV(CS31) |_BV(WGM33);
DDRE |=_BV(PE3)|_BV(PE2);
PORTE|=0X40;
PORTE&=0XFB;
OCR3A = 0X72;
ICR3 = 0X00E5;
}
/*************************************/
/* 初始函数 */
/*************************************/
void LCD_INT(void)
{
com=reset; /* 复位*/
PR1(); /* 写指令函数 */
PR4(); /* 写指令函数 */
com=sleep_off;/* 关闭休闲状态*/
PR1();
PR4();
com=display_off;/* 关闭休闲状态*/
PR1();
PR4();
com=duty32; /* 占空比为32DUTY*/
PR1();
PR4();
com=ADC_P; /* ADC=0正向顺序 */
PR1();
PR4();
com=start_line0; /* 显示起始行为0 */
PR1();
PR4();
com=display_on; /* 开显示 */
PR1();
PR4();
}
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
/*************************************/
/* 直接访问方式的驱动函数 */
/*************************************/
void busy1(void)
{
uchar i;
LED_E1();
do
{
i=LcdStateRead1; /* 读状态字 */
}
while ((i & 0x80)); /* 判“忙”标志 */
}
void busy2(void)
{
uchar i;
LED_E2();
do
{
i=LcdStateRead2; /* 读状态字 */
}
while((i & 0x80)); /* 判“忙”标志 */
}
/*************************************/
/* 写指令函数 */
/*************************************/
void PR1(void)
{
busy1(); /* 判忙 */
LcdCommandWrite1 = com; /* 写指令(E1) */
}
void PR4(void)
{
busy2(); /* 判忙 */
LcdCommandWrite2 = com; /* 写指令(E2) */
}
/*************************************/
/* 写显示数据函数 */
/*************************************/
void PR2(void)
{
busy1();
LcdDataWrite1 = dat1; /* 写显示数据(E1) */
}
void PR5(void)
{
busy2();
LcdDataWrite2 = dat1; /* 写显示数据(E2) */
}
/*************************************/
/* 读显示数据函数 */
/*************************************/
void PR3(void)
{
busy1();
//dat1=dradd1; /* 读显示数据(E1) */
}
void PR6(void)
{
busy2();
//dat1=dradd2; /* 读显示数据(E2) */
}
//
void LED_E1(void)
{
PORTD |= _BV(PD7) | _BV(PD6); // Y3
PORTD &= ~_BV(PD5);
}
void LED_E2(void)
{
PORTD |= _BV(PD5) | _BV(PD7); // Y5
PORTD &= ~_BV(PB6);
}
/*************************************/
/* 清屏函数 */
/*************************************/
void CLEAR(void)
{
unsigned int i;
for(count1=0xb8;count1!=0xbc;count1++) /*以页地址作为循环量*/
{
com=count1; /* 页面地址设置 */
PR1();
PR4();
com=0x00; /* 列地址设置为"0" */
PR1();
PR4();
for(i=0;i<62;i++) /*清除所有SED1520的内部RAM单元*/
{
dat1=0x00; /* 写入数据为"0x00"*/
PR2();
PR5();
}
}
}
/*************************************/
/* 西文写入函数 */
/*************************************/
void CW_PR(PGM_P GG)//(void)
{
unsigned int j;
j=para1;
com=O_Y|0xb8; /* 页地址设置 */
PR1();
PR4();
if(O_X<j) /* 是否小于SED1520控制器宽度 */
{
com=O_X;
PR1(); /* 小于写E1 */
O_Y=1;
}
else
{
com=O_X-j;
PR4(); /* 不小于写E2 */
O_Y=0;
}
for(count1=0;count1<6;count1++)
{
dat1=pgm_read_byte(GG);//(&CHTAB[code_1][count1]); /* 取数据 */
GG++;
if(O_Y==1)
{
PR2(); /* 写E1 */
}
else
{
PR5(); /* 写E2 */
}
com++; /* 计算列 */
if(j==com)
{
if(O_Y==1) /* 判左屏出界还是右屏出界 */
{
com=0;
PR4(); /* 左屏出界写右屏 */
O_Y=0;
}
else
{
return;
}
}
}
}
///*----------- 西文显示----------*/
void English_Dis(uchar *p,uchar y,uchar x,uchar gs)
{
PGM_P TT;
unsigned int a,b,i,j,h;
a=y;
b=x;
code_1=0;
for(i=0;i<gs;i++)
{
O_Y=a;
O_X=b;
h= CtabAdd(*(p+i));
TT = ((&CHTAB[0][0])+h);
CW_PR(TT); /* 调西文写入函数 */
b=b+7; //8;******************************************
code_1++;
if(b==119)//120)
{
a++;
b=0;
if(a==4)
{
return 0;
}
}
}
}
//ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
/*************************************/
/* 16*16点阵中文写入函数:CCW_PR */
/* 函数参数选择:PARA1 */
/* 内部调用函数:PR1,PR2,PR4,PR5 */
/* 连接字库: CCTAB */
/* 函数调用入口: CCW_PR() */
/* 函数输入变量: O_XL,O_YL,CODE_1 */
/*************************************/
void CCW_PR(PGM_P CC)//(void)
{
unsigned int i,j,k;
i=0;
j=para1;
loop: com=O_Y|0xb8; /* 设页地址 */
PR1();
PR4();
if(O_X<j) /* 是否小于SED1520控制器宽度 */
{
com=O_X;
PR1(); /* 小于写E1 */
k=1;
}
else
{
com=O_X-j;
PR4(); /* 不小于写E2 */
k=0;
}
for(count1=i;count1<i+16;count1++)
{
dat1=pgm_read_byte(CC);//(&PAGE23[code_1][count1]); /* 取数据 */
CC++;
if(k==1)
{
PR2(); /* 写E1 */
}
else
{
PR5(); /* 写E2 */
}
com++; /* 计算列 */
if(j==com)
{
if(k==1) /* 判左屏出界还是右屏出界 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -