📄 1.c
字号:
//mega8515 lcd of ks108
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <iom16v.h>
#include <macros.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//-----------------------------------------------------------------------------
// DB0-DB7=PA
// CSA = PC7 // Select left or right LCD.
// CSB = PC6 // Select left or right LCD.
// DI = PB2 // Select Rigster LCD.
// RW = PB1 // Read or Write LCD.
// EN = PB0;
//-----------------------------------------------------------------------------
/* 定义12864端口 */
//DATA_PORT=PORTA
#define DATA PORTA
//CSA=PC7
#define CSA_H asm("sbi 0x15,7")
#define CSA_L asm("cbi 0x15,7")
//CSB=PC6
#define CSB_H asm("sbi 0x15,6")
#define CSB_L asm("cbi 0x15,6")
//DI=PB2
#define DI_H asm("sbi 0x18,2")
#define DI_L asm("cbi 0x18,2")
//RW=PB1
#define RW_H asm("sbi 0x18,1")
#define RW_L asm("cbi 0x18,1")
//EN=PB0
#define EN_H asm("sbi 0x18,0")
#define EN_L asm("cbi 0x18,0")
//-----------------------------------------------------------------------------
// Data for display.
//-----------------------------------------------------------------------------
const uchar Dig[] = {
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, // 0
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, // 1
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, // 2
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, // 3
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, // 4
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, // 5
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, // 6
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // 7
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, // 8
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, // 9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00, // .[10]
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00, // %[11]
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // [12]
};
const uchar HZK[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x48,0x56,0xD4,0x54,0xD4,0x54,0x54, // 氧量:[0]
0x54,0xD4,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7C,0x54,0x54,0x54,0x54,0x54,0x54,
0x54,0x7E,0x44,0x40,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x15,0x15,0x15,0x7F,0x15,0x15,0x15,
0x00,0x1F,0x20,0x40,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x50,0x5F,0x55,0x55,0x55,0x7F,0x55,0x55,
0x55,0x5F,0x50,0x40,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xC2,0x0C,0xC0,0x00,0xFC,0x94,0x94,0x94, // 温度:[4]
0x94,0x94,0xFE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x28,0x28,0xF8,0xAA,0xAC,0xA8,
0xF8,0x28,0x2C,0x08,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7C,0x03,0x40,0x7E,0x42,0x42,0x7E,0x42,
0x7E,0x42,0x42,0x7E,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x0F,0x40,0x42,0x42,0x26,0x2A,0x12,0x2A,
0x26,0x42,0x40,0x40,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x90,0xFE,0x50,0x10,0x40,0x90, // 热电势[8]
0x7E,0x10,0x10,0xF8,0x10,0x80,0x00,0x00,0x00,0xF0,0x90,0x90,0x90,0xFE,0x90,0x90,
0x90,0x90,0xF8,0x10,0x00,0x00,0x48,0x48,0x48,0xFE,0x28,0x28,0x80,0x48,0xBE,0x08,
0x08,0xF8,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x34,0x07,0x10,0x64,0x02,0x11,
0x61,0x02,0x00,0x13,0x64,0x07,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x3F,0x44,0x44,
0x44,0x44,0x47,0x40,0x70,0x00,0x40,0x44,0x45,0x25,0x14,0x0F,0x04,0x04,0x24,0x44,
0x3E,0x04,0x01,0x03,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x48,0x56,0xD4,0x54,0xD4,0x54, // 氧电势[12]
0x54,0x54,0xD4,0x04,0x04,0x00,0x00,0x00,0x00,0xF0,0x90,0x90,0x90,0xFE,0x90,0x90,
0x90,0x90,0xF8,0x10,0x00,0x00,0x48,0x48,0x48,0xFE,0x28,0x28,0x80,0x48,0xBE,0x08,
0x08,0xF8,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x15,0x15,0x15,0x7F,0x15,0x15,
0x15,0x00,0x1F,0x20,0x40,0x78,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x3F,0x44,0x44,
0x44,0x44,0x47,0x40,0x70,0x00,0x40,0x44,0x45,0x25,0x14,0x0F,0x04,0x04,0x24,0x44,
0x3E,0x04,0x01,0x03,0x00,0x00,0x00,0x00,0x31,0x31,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x24,0x24,0x18,0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x00,0x00, // C:[16]
0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80, // mv[17]
0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00
};
//-----------------------------------------------------------------------------
// LCD:Write instraction code at left.
//-----------------------------------------------------------------------------
void Wleft_Cmad(unsigned char Lcmd)
{
unsigned char Lstate;
CSA_L; CSB_H;
DI_L; RW_H;
DDRA=0x00;//a口设为输入
PORTA=0x00;
do
{ EN_H;
Lstate = PINA;
EN_L;
}while(Lstate & 0x80) ;
DDRA=0xff;
RW_L;
DATA = Lcmd;
EN_H;
EN_L;
}
//-----------------------------------------------------------------------------
// LCD:Write Data at left.
//-----------------------------------------------------------------------------
void Wleft_Data(unsigned char Ldat)
{
unsigned char Lstate;
CSA_L; CSB_H;
DI_L;
RW_H;
DDRA=0x00;
PORTA=0x00;
do
{ EN_H;
Lstate = PINA;
EN_L;
}while(Lstate & 0x80);
DDRA=0xff;
DI_H;
RW_L;
DATA = Ldat;
EN_H;
EN_L;
}
//-----------------------------------------------------------------------------
// LCD:Write instraction code at Right.
//-----------------------------------------------------------------------------
void Wrigt_Cmad(unsigned char Rcmd)
{
unsigned char Lstate;
CSA_H; CSB_L;
DI_L;
RW_H;
DDRA=0x00;
PORTA=0x00;
do
{ EN_H;
Lstate = PINA;
EN_L;
}while(Lstate & 0x80) ;
DDRA=0xff;
RW_L;
DATA = Rcmd;
EN_H;
EN_L;
}
//-----------------------------------------------------------------------------
// LCD:Write Data at right.
//-----------------------------------------------------------------------------
void Wrigt_Data(unsigned char Rdat)
{
unsigned char Lstate;
CSA_H; CSB_L;
DI_L;
RW_H;
DDRA=0x00;
PORTA=0x00;
do
{ EN_H;
Lstate = PINA;
EN_L;
}while(Lstate & 0x80);
DDRA=0xff;
DI_H;
RW_L;
DATA = Rdat;
EN_H;
EN_L;
}
//-----------------------------------------------------------------------------
// LCD:Iniatlize(DIlcdsplay).
//-----------------------------------------------------------------------------
void LCD_INT(void)
{
Wleft_Cmad(0xc0); // Left display start line;
Wrigt_Cmad(0xc0); // Right display start line;
Wleft_Cmad(0x3f); // Left display On;
Wrigt_Cmad(0x3f); // Right display On;
}
//-----------------------------------------------------------------------------
// LCD:Clear picture.
//-----------------------------------------------------------------------------
void LCD_CLR(void)
{
unsigned char adrPage,adrLaw;
for(adrPage = 0; adrPage < 8; adrPage++)
{ Wleft_Cmad(adrPage | 0xb8);
Wrigt_Cmad(adrPage | 0xb8);
Wleft_Cmad(0x40);
Wrigt_Cmad(0x40);
for(adrLaw = 0; adrLaw < 64; adrLaw++)
{ Wleft_Data(0x00);
Wrigt_Data(0x00);
}
}
}
//-----------------------------------------------------------------------------
// LCD:DIlcdsplay Chinese.
//-----------------------------------------------------------------------------
void WriteHZ(uchar XH_HZ,uchar adrPage,int adrColumn,uchar ColSum)
{
unsigned int dptr; // dptr_adderss for HZ code.
unsigned char left=0, i, j;
dptr = XH_HZ * 32;
if((adrColumn-64) >= 0) left = 0; // left = 0:for right.
else if((adrColumn-64) < 0) left = 1; // left = 1:for left.
for(i=0; i<2; i++)
{
if(left == 0)
{ Wrigt_Cmad(adrPage | 0xb8);
Wrigt_Cmad(adrColumn | 0x40);
for(j=0; j< ColSum; j++)
{
Wrigt_Data(HZK[dptr]);
dptr = dptr + 1;
}
}
if(left == 1)
{ Wleft_Cmad(adrPage | 0xb8);
Wleft_Cmad(adrColumn | 0x40);
for(j=0; j< ColSum; j++) {
Wleft_Data(HZK[dptr]);
dptr = dptr + 1; }
}
adrPage = adrPage + 1;
}
}
//-----------------------------------------------------------------------------
// LCD:DIlcdsplay ASCII.
//-----------------------------------------------------------------------------
void WriteDG(uchar XH_Dig,uchar adrPage,int adrColumn)
{
unsigned int dptr; // dptr_adderss for Dig code.
unsigned char left, i, j;
dptr = XH_Dig * 16;
if(adrColumn-64 >= 0) left = 0; // left = 0:for right.
else left = 1; // left = 1:for left.
for(i=0; i<2; i++)
{
if(left == 0)
{ Wrigt_Cmad(adrPage | 0xb8);
Wrigt_Cmad(adrColumn | 0x40);
for(j=0; j< 8; j++) {
Wrigt_Data(Dig[dptr]);
dptr = dptr + 1; }
}
if(left == 1)
{ Wleft_Cmad(adrPage | 0xb8);
Wleft_Cmad(adrColumn | 0x40);
for(j=0; j< 8; j++) {
Wleft_Data(Dig[dptr]);
dptr = dptr + 1; }
}
adrPage = adrPage + 1;
}
}
#define xtal 4
void delay_1ms(void)
{ unsigned int i;
for(i=1;i<(unsigned int)(xtal*143-2);i++)
;
}
void delay_ms(unsigned int n)
{
unsigned int i=0;
while(i<n)
{delay_1ms();
i++;
}
}
void main()
{
PORTA = 0x00;
DDRA = 0xFF;
DDRB = 0xff ;
PORTB=0xff;
PORTC = 0xff;
DDRC = 0xFF;
PORTC = 0xff;
PORTD = 0xFF;
LCD_INT();
LCD_CLR();
WriteHZ(12, 0, 5, 64); // 氧电势
WriteHZ(17, 0, 108, 16); // mv
WriteHZ(0, 2, 0, 64); // 氧量
WriteDG(11, 2, 108); // %
WriteHZ(8, 4, 0, 64); // 热电势
WriteHZ(17, 4, 108, 16); // mv
WriteHZ(4, 6, 0, 64); // 温度
WriteHZ(16, 6,108, 16); // C
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -