📄 jhdavrok.c
字号:
#include <avr/io.h>
//#include <intrins.h>
#include <string.h>
/*
//本程序为ST7920驱动
sbit RST = P2^0;//RESET
sbit EN = P2^1;//E
sbit RW = P2^2;//R/W
sbit RS = P2^3;//RS
#define DATA P0
*/
#define JHD_IO PORTA
#define JHD_PIN PINA
#define JHD_IODDR DDRA
#define JHD_Ctrl PORTC
#define JHD_RST PC0
#define JHD_EN PC1
#define JHD_RW PC2
#define JHD_RS PC3
/*
#define clr_LCD12864_RST LCD12864_Ctrl &= ~_BV(LCD12864_RST);
#define set_LCD12864_RST LCD12864_Ctrl |= _BV(LCD12864_RST);
#define clr_LCD12864_EN LCD12864_Ctrl &= ~_BV(LCD12864_EN);
#define set_LCD12864_EN LCD12864_Ctrl |= _BV(LCD12864_EN);
#define clr_LCD12864_RW LCD12864_Ctrl &= ~_BV(LCD12864_RW);
#define set_LCD12864_RW LCD12864_Ctrl |= _BV(LCD12864_RW);
#define clr_LCD12864_DIN LCD12864_Ctrl &= ~_BV(LCD12864_DIN);
#define set_LCD12864_DIN LCD12864_Ctrl |= _BV(LCD12864_DIN);
*/
#define clr_RST JHD_Ctrl &= ~_BV(JHD_RST);
#define set_RST JHD_Ctrl |= _BV(JHD_RST);
#define clr_EN JHD_Ctrl &= ~_BV(JHD_EN);
#define set_EN JHD_Ctrl |= _BV(JHD_EN);
#define clr_RW JHD_Ctrl &= ~_BV(JHD_RW);
#define set_RW JHD_Ctrl |= _BV(JHD_RW);
#define clr_RS JHD_Ctrl &= ~_BV(JHD_RS);
#define set_RS JHD_Ctrl |= _BV(JHD_RS);
unsigned char LCD_addr[4][8]=
{
{0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87},
{0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97},
{0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f},
{0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f}
};
void InitLcd(void);
void WriteData(unsigned char ch);
void WriteCmd(unsigned char ch);
void ShowASC(unsigned char x,unsigned char *p);
void ShowChinese(unsigned char x,unsigned char *p);
void ShowStr(unsigned char x,unsigned char y,unsigned char *p);
void ShowChar(unsigned char x,unsigned char y,unsigned char ch);
unsigned char ReadRAM(unsigned char x,unsigned char y);
void ClrDGRAM(void);
void PaintPoint(unsigned char x,unsigned char y);
int main()
{
unsigned int i;
DDRA=0xff;
PORTA=0xff;
DDRC=0xff;
PORTC=0xff;
InitLcd();
// ClrDGRAM();
while(1)
{
//PaintPoint(1,1);
ShowStr(0,2,"江西师范大学物理与通信电子学院");
for(i=0;i<60000;i++);
}
}
void InitLcd(void)
{
clr_RST;
// wait_5ms();
set_RST;
//wait_5ms();
//wait_5ms();
WriteCmd(0x30); //功能设定,8位接口,基本指令集
//WriteCmd(0x34); //功能设定,8位接口,基本指令集
WriteCmd(0x0c); //开显示
WriteCmd(0x01); //清屏
WriteCmd(0x02); //进入设定点
// WriteCmd(0x80);
}
void LCDBusy(void)
{
JHD_IODDR=0x00;//输入法
while(1)
{
clr_RS;
set_RW;
set_EN;
if(!(JHD_PIN & 0x80))break;
clr_EN;
}
JHD_IODDR=0xff;
}
void WriteData(unsigned char ch)
{
LCDBusy();
//EN = 0;
set_RS; //写数据
clr_RW;
// _nop_();
set_EN;
JHD_IO = ch;
//_nop_();
clr_EN;
clr_RS;
}
/*
unsigned char Readdata(unsigned char ch)
{
} */
void WriteCmd(unsigned char ch)
{
LCDBusy();
//EN = 0;
clr_RS;
clr_RW;
// _nop_();
set_EN;
JHD_IO = ch;
// _nop_();
clr_EN;
}
/*
void ShowChar(unsigned char x,unsigned char y,unsigned char ch)
{
if((x%2)==0)
{
WriteCmd(LCD_addr[y][x/2]);
} else
{
ReadRAM((x+1)/2,y);
// WriteCmd(LCD_addr[y][x/2]);
}
WriteData(ch);
}
*/
/*
void ShowASC(unsigned char x,unsigned char *p)
{
unsigned char i;
i=strlen(p);
while(i--)
{
WriteCmd(0x90+x);
WriteData(*p);
p++;
// x++;
//WriteCmd(0x90+x);
WriteData(*p);
p++;
x++;
}
}
void ShowChinese(unsigned char x,unsigned char *p)
{
unsigned char i;
i=strlen(p);
i/=2;
while(i--)
{
WriteCmd(0x80+x);
WriteData(*p);
p++;
WriteData(*p);
p++;
x++;
}
} */
void ShowStr(unsigned char x,unsigned char y,unsigned char *p)
{
unsigned char i;
i=strlen(p);
i/=2;
while(i--)
{
if(x>=8)
{
y++;
x=0;
}
if(y>=4)break;
WriteCmd(LCD_addr[y][x]);
WriteData(*p);
p++;
WriteData(*p);
p++;
x++;
}
}
void ClrDGRAM(void)
{
unsigned char i,j;
for(i=0;i<64;i++)
{ WriteCmd(0x34);
WriteCmd(0x80|i);
WriteCmd(0x80);
for(j=0;j<16;j++)
{
//WriteCmd(0x34);
WriteData(0);
WriteData(0);
WriteCmd(0x36);
}
}
WriteCmd(0x36);
WriteCmd(0x30);
}
void PaintPoint(unsigned char x,unsigned char y)
{
//WriteCmd(0x01);
WriteCmd(0x34);
//WriteCmd(0x36);
WriteCmd(0x80+x);
WriteCmd(0x80+y);
WriteData(1);
WriteData(0);
WriteCmd(0x36);
WriteCmd(0x30);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -