📄 ht1621.c
字号:
/****************************************************
技 术 部:HT1621驱动的6907a液晶的串口驱动模式
创建日期:2009年1月8日
引脚定义:CS1========P1^0
CS2========P1^3
CLK========P1^1
SID========P1^2
***************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
unsigned char flag;
unsigned int a;
void clearlcd();
sbit CS1 = P1^0; //显示数据或控制指令
sbit CS2 = P1^3; //显示数据或控制指令
sbit CLK = P1^1; //同步时钟
sbit SID = P1^2; //数据输入端
sbit P3_2= P3^2; //int0
void delay1(uint ms) //1ms
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<125;j++);
}
void delay2(uint ms) //1ms带中断
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<125;j++);
while(flag==0);
}
void int0() interrupt 0 using 0
{
for(a=0;a<2000;a++); //15ms
if(P3_2==0)
{
for(a=0;a<2000;a++);//15ms
flag=1-flag;
while(P3_2==0);
for(a=0;a<2000;a++);
while(P3_2==0);
for(a=0;a<2000;a++);
}
return;
}
void send(bit i) //发送数据
{
SID=i;
_nop_();
CLK=1;
_nop_();
CLK=0;
_nop_();
CLK=1;
_nop_();
}
void sendcom(uchar cmdcode) //送控制字
{
uchar j;
CS1=1;
CS2=1;
_nop_();
_nop_();
CS1=0;
CS2=0;
send(1);
send(0);
send(0);
for (j=0;j<8;j++)
{ if((cmdcode&0x80)==0x80)
send(1);
else
send(0);
cmdcode<<=1;
}
send(0);
SID=1;
CS1=1;
CS2=1;
}
void transend(unsigned char address,unsigned char data1) //送6位地址+8位数据
{ unsigned char j;
CS1=1;
CS2=1;
_nop_();
_nop_();
CS1=0;
CS2=0;
send(1);
send(0);
send(1);
address<<=2;
for (j=0;j<6;j++)
{ if((address&0x80)==0x80)
send(1);
else
send(0);
address<<=1;
}
for (j=0;j<8;j++)
{ if((data1&0x80)==0x80)
send(1);
else
send(0);
data1=data1<<1;
}
SID=1;
CS1=1;
CS2=1;
}
void transendsz(unsigned char address,unsigned char data1) //送6位地址+8位数据
{ unsigned char j;
send(1);
send(0);
send(1);
address<<=2;
for (j=0;j<6;j++)
{ if((address&0x80)==0x80)
send(1);
else
send(0);
address<<=1;
}
for (j=0;j<8;j++)
{ if((data1&0x80)==0x80)
send(1);
else
send(0);
data1=data1<<1;
}
SID=1;
CS1=1;
CS2=1;
}
void transend1(unsigned char address,unsigned char data1)
{
CS1=1;
_nop_();
_nop_();
CS1=0;
transendsz(address, data1);
}
void transend2(unsigned char address,unsigned char data1)
{
CS2=1;
_nop_();
_nop_();
CS2=0;
transendsz(address, data1);
}
void display2()//2
{
unsigned char i;
unsigned char data data_1[16]={0x70,0xa2,0x70,0xa5,0xa0,0xd7,0x0a,0x5a,
0x0d,0x70,0xa5,0xa0,0xd7,0x0a,0x5a,0x0d};
unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0x61,0xa2,0x61,0xa2,
0x61,0xa2,0x61,0xa2,0x61,0xa2,0x61,0xa4};
for(i=0;i<16;i++)
transend1(i+i,data_1[i]);
for(i=0;i<16;i++)
transend2(i+i,data_2[i]);
}
void display5()//5
{
unsigned char i;
unsigned char data data_1[16]={0xd0,0xa1,0xd0,0xaa,0xa0,0x7d,0x0a,0xaa,
0x07,0xd0,0xaa,0xa0,0x7d,0x0a,0xaa,0x07};
unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0xc1,0xa1,0xc1,0xa1,
0xc1,0xa1,0xc1,0xa1,0xc1,0xa1,0xc1,0xa1};
for(i=0;i<16;i++)
transend1(i+i,data_1[i]);
for(i=0;i<16;i++)
transend2(i+i,data_2[i]);
}
void display8()//8
{
unsigned char i;
unsigned char data data_1[16]={0xf0,0xa3,0xf0,0xaf,0xa0,0xff,0x0a,0xfa,
0x0f,0xf0,0xaf,0xa0,0xff,0x0a,0xfa,0x0f};
unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0xe1,0xa3,0xe1,0xa3,
0xe1,0xa3,0xe1,0xa3,0xe1,0xa3,0xe1,0xa5};
for(i=0;i<16;i++)
transend1(i+i,data_1[i]);
for(i=0;i<16;i++)
transend2(i+i,data_2[i]);
}
void dspimg1()//※
{
unsigned char i;
unsigned char data data_1[16]={0x0f,0x50,0x0f,0x50,0x5f,0x00,0xf5,0x05,
0xf0,0x0f,0x50,0x5f,0x00,0xf5,0x05,0xf0};
unsigned char data data_2[16]={0x00,0x00,0x00,0x00,0x16,0x54,0x16,0x54,
0x16,0x54,0x16,0x54,0x16,0x54,0x16,0x58};
for(i=0;i<16;i++)
transend1(i+i,data_1[i]);
for(i=0;i<16;i++)
transend2(i+i,data_2[i]);
}
void dspimg2()//字符
{
transend2(0,0xf0);transend2(2,0xf0);transend2(4,0x08);transend2(12,0x08);transend2(16,0x08);
delay2(800);clearlcd();
transend2(2,0x0f);transend2(8,0x08);transend2(0,0x0f);transend2(20,0x08);
delay2(800);clearlcd();
transend1(2,0x0c);transend2(10,0x08);transend2(14,0x08);transend2(18,0x08);transend2(22,0x08);
transend2(26,0x08);transend2(30,0x02);transend2(24,0x08);transend2(28,0x08);
delay2(800);clearlcd();
}
void displayall()
{ unsigned char i;
unsigned char data_1[32];
for(i=0;i<32;i++)
{data_1[i]=0xff;
transend(i+i,data_1[i]);
}
}
void clearlcd()
{ unsigned char i;
unsigned char data_1[32];
for(i=0;i<32;i++)
{data_1[i]=0x00;
transend(i+i,data_1[i]);
}
delay1(50);
}
void initlcd() //初始化IC
{
sendcom(0x00);//关闭LCD系统振荡
sendcom(0x01);//Enable system
sendcom(0x02);//LCD 打开系统振荡
sendcom(0x03);//Display on
sendcom(0x29);//BIAS=1/3 DUTY=1/4
}
main()
{
CS1=1;
CS2=1;
IE=0;
P3_2=1;
EA=1;
EX0=1;
IT0=1; //下降沿触发
flag=1;
initlcd(); //初始化
delay1(50);
while(1)
{
displayall();
delay2(800);
display2();
delay2(800);
display5();
delay2(800);
display8();
delay2(800);
dspimg1();
delay2(800);
clearlcd();
delay2(800);
dspimg2();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -