📄 lcd_12232.c
字号:
#include <iom16v.h>
//#include <macros.h>
//E--CLK
#define CLK PB3
//RS--CS
#define CS PB1
//RW--SID
#define SID PB2
//#define isda_y (DDRD&=~(1<<SDA),PORTD|=(1<<SDA))
//#define iscl_y (DDRD&=~(1<<SCL),PORTD|=(1<<SCL))
//#define isda_n (DDRD|=(1<<SDA),PORTD&=~(1<<SDA))
//#define iscl_n (DDRD|=(1<<SCL),PORTD&=~(1<<SCL))
/*#define CLK_SET (DDRB&=~(1<<CLK),PORTB|=(1<<CLK))
#define CLK_CLR (DDRB|=(1<<CLK),PORTB&=~(1<<CLK))
#define CS_SET (DDRB&=~(1<<CS),PORTB|=(1<<CS))
#define CS_CLR (DDRB|=(1<<CS),PORTB&=~(1<<CS))
#define SID_SET (DDRB&=~(1<<SID),PORTB|=(1<<SID))
#define SID_CLR (DDRB|=(1<<SID),PORTB&=~(1<<SID))
*/
#define CLK_SET PORTB |= 0x08 //PB3--e
#define CLK_CLR PORTB &= ~0x08
#define CS_SET PORTB |= 0x02 //PB1--rs
#define CS_CLR PORTB &= ~0x02
#define SID_SET PORTB |= 0x04 //PB2---rw
#define SID_CLR PORTB &= ~0x04
#define uchar unsigned char
////////////////////////////////////////////////////////////////////////
//LCD显示用到的三个变量:
////////////////////////////////////////////////////////////////////////
//uchar lcdrefresh; //是否需要刷新
//uchar lcdcodedsp[4]; //显示存储数组
uchar lcdsplycnt; //指示显示存储数组循环指
uchar stu;
//#define stu7 stu[7]
//#define stu0 stu[0];
void delay5ms()
{
register int i;
for (i=0;i<40000;i++)
;
}
void delay50us()
{
register int i;
for (i=0;i<1000;i++)
;
}
/*
void init()
{
unsigned char in,i;
DDRB |= 0xFF; // Set SCK, MOSI & SS PB1,2,3 as outputs
//PORTB &= 0x5F; // clear bits MOSI, & SCK
}
*/
//----------------忙检测----------------------
void check()
{
uchar i;
do
{
CS_SET;
SID_SET;
for(i=0;i<8;i++)
{
CLK_CLR;
if(i<6)SID_SET;
else SID_CLR;
CLK_SET;
}
for(i=0;i<16;i++)
{
CLK_CLR;
CLK_SET;
if(i<=3||(i>=8&&i<=11))
{
//sprintf("%S",stu);
stu<<=1;
if((PINB & 0x80)==0x80)
stu|=0x01;
else
stu&=~0x01;
}
}
CS_CLR;
}while(stu & 0x80==0x80);
}
//-----Z--------------------------------------
void wcom(uchar x)
{
//*****************************************
//RS,RW :L L写指令 L H read busy, acc *
// H L MUP to DR H H DR to MUP *
//E H->L IO->DR *
// H DR->IO *
//*****************************************
uchar i=0;
check();
CS_SET; //RS_SET
for(i=0;i<8;i++)
{
if(i<5)SID_SET;//RW_SET
else SID_CLR;//RW_CLR
CLK_CLR;//E_CLR
CLK_SET; //E_SET
}
for(i=0;i<16;i++)
{
if(i<4||(i>=8&&i<=11))
{
if((x & 0x80)==0x80)
SID_SET;//RW
else
SID_CLR;//RW
x<<=1;
} else SID_CLR;//RW
CLK_CLR; //E
CLK_SET;//E
}
CS_CLR;//RS
}
//****************************************
void wdat(uchar x)
{
uchar i=0;
stu=x;
check();
CS_SET;
for(i=0;i<8;i++)
{
if(i<5||i==6)SID_SET;
else SID_CLR;
CLK_CLR;
CLK_SET;
}
for(i=0;i<16;i++)
{
if(i<4||(i>=8&&i<=11))
{
if((x & 0x80)==0x80)
SID_SET;
else
SID_CLR;
x<<=1;
}
else SID_CLR;
CLK_CLR; CLK_SET;
}
CS_CLR;
}
void ShowMessage(uchar addr,uchar num,uchar *ptr)
{
uchar i;
wcom(addr);
for (i=0;i<num;i++) wdat(ptr[i]);
}
/*-----------------------------------------------------------------------------
----------------------------------------------------------------------初始化*/
void InitLcd()
{
wcom(0X30);
wcom(0X3C);
wcom(0X38);
wcom(0X01);
wcom(0X80);
check();
lcdsplycnt=0;
//ShowMessage(0x95,13,"你好,小笨笨:");
ShowMessage(0x90,13,"WWW.szvcn.com");
}
/*-----------------------------------------------------------------------------
----------------------------------------------------------------------初始化*/
void main()
{
//unsigned char in,i,da;
DDRB |= 0xFF;
DDRA = 0x0F; /* output */
PORTA &= 0xF0; /* all off */
InitLcd();
while(1)
{
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -