📄 1621_driver.c
字号:
/*HT1621 for KM3009/KM3005/KM3004 */
#include <reg2051.h> /* 8051 寄存器定义 */
#define null 0
typedef unsigned char uchar;
typedef unsigned int uint;
sfr PIM0 = 0X91;
sfr PIM1 = 0X92;
sfr P3M0 = 0XB1;
sfr P3M1 = 0XB2;
uchar d[16];
extern void intinit (void);
void ShowLCD(uchar signal,uchar battery,bit clr,bit in,bit out,bit lose,bit sign,uchar addr,uchar *str,uchar unit);
//extern void ShowLCD(uchar *str);
// sbit _CS =P3^1;
// sbit _WR =P3^0;
// sbit _DAT=P1^1;
sbit _CS = P3^7;
sbit _WR = P1^0;
sbit _DAT= P3^2;
/*the codes for 0~9 AbcdEF */
uchar code
TAB1[]={0xd7,0x50,0xe3,0xf1,0x74,0xb5,0xb7,0xd0,0xf7,0xf5,0xf6,0x37,0x23,0x73,0xa7,0xa6};
DELAY(int t) /**/
{
int i,j;
for (i=0;i<t;i++)
for (j=0;j<t;j++);
}
WRITE_COM(uchar com) /*Write a command to LCD*/
{
uchar i;
bit Cy;
_CS = 0;
/*Write CMD code:100*/
_WR=0;
DELAY(10);
_DAT=1;
DELAY(10);
_WR=1;
DELAY(10);
_WR=0;
DELAY(10);
_DAT=0;
DELAY(10);
_WR=1;
DELAY(10);
_WR=0;
DELAY(10);
_DAT=0;
DELAY(10);
_WR=1;
DELAY(10);
for(i=0;i<8;i++) /*Write CMD */
{
Cy=com&0x80;
_WR=0;
DELAY(10);
_DAT=Cy;
DELAY(10);
_WR=1;
DELAY(10);
com=com<<1;
}
_WR=0;
_DAT=1;
_WR=1;
_CS=1;
}
/*------------------*/
WRITE_DAT(uchar addr,uchar dat) /*Write display data to LCD*/
{
uchar i;
bit Cy;
_CS = 0;
/*Write CMD code:101*/
_WR=0;
DELAY(10);
_DAT=1;
DELAY(10);
_WR=1;
DELAY(10);
_WR=0;
DELAY(10);
_DAT=0;
DELAY(10);
_WR=1;
DELAY(10);
_WR=0;
DELAY(10);
_DAT=1;
DELAY(10);
_WR=1;
DELAY(10);
addr=addr<<2;
for(i=0;i<6;i++) /*Write RAM address: xxA5~A0*/
{
Cy=addr&0x80;
_WR=0;
DELAY(10);
_DAT=Cy;
DELAY(10);
_WR=1;
DELAY(10);
addr=addr<<1;
}
for(i=0;i<4;i++) /*Write Display data :xxxxC0~C3*/
{
Cy=dat&0x80;
_WR=0;
DELAY(10);
_DAT=Cy;
DELAY(10);
_WR=1;
DELAY(10);
dat=dat<<1;
}
_CS=1;
}
DIS(uchar dat){
uchar i;
for(i=0;i<32;i++)
WRITE_DAT(i,dat);
}
SETUP_LCD(void)
{
DELAY(1000);
WRITE_COM(0x01); /*Enable system*/
WRITE_COM(0x18); /*CLOCK SOURCE IS 256kRC ON CHIP*/
WRITE_COM(0x29); /*BIAS=1/3 DUTY=1/4*/
WRITE_COM(0x03); /*Display on*/
DIS(0x00); /*Clear LCD*/
DELAY(200);
}
main()
{
// PIM0 = 0;
// PIM1 = 0X02;
// P3M0 = 0;
// P3M1 = 0X84;
while(1)
{
uchar i,j;
// DELAY(100);
SETUP_LCD();
DIS(0xf0); //full lcd
DELAY(200); //
DIS(0x00); //clean lcd
DELAY(10);
for(i=1;i<33;i=i+2){
WRITE_DAT(i,0x80);
DELAY(100);
}
for (i = 11;i < 15;i+=2){
WRITE_DAT(9,0x80);
DELAY(200);
}
DELAY(200);
DIS(0x00);
j=0;
for (i=0;i<16;i++){
WRITE_DAT(j,TAB1[i]);
WRITE_DAT(j+1,TAB1[i]<<4);
j=j+2;
DELAY(100);
}
DELAY(200);DELAY(200);
// DIS(0x00);DELAY(200);
// DIS(0x10);DELAY(200);
// DIS(0x20);DELAY(200);
// DIS(0x40);DELAY(200);
/*
d[0] = 0;
d[1] = 1;
d[2] = 2;
d[3] = 3;
d[4] = 4;
d[5] = 5;
d[6] = 6;
d[7] = 7;
d[8] = 8;
ShowLCD(3,2,1,1,1,null,1,5,&d[5],1);
while(1);
*/ }
}
/*
addr 1,3,5,7 is battery 1,2,3,外壳
addr 9 is 未接
addr 17 is 呼入
addr 11 is 呼出
addr 19 is :
addr 23,25,27,29,31 is signal 4 3 2 1 天线
*/
void ShowLCD(uchar signal,uchar battery,bit clr,bit in,bit out,bit lose,bit sign,uchar addr,uchar *str,uchar unit){
uchar i;
if (clr)
DIS(0x00); //clean lcd
if (in)
WRITE_DAT(17,0x80); //show 呼入
if (out)
WRITE_DAT(11,0x80); //show 呼出
if (lose)
WRITE_DAT( 9,0x80); //show 未接
if (sign)
WRITE_DAT(19,0x80); //show :
if (signal > 4){
signal = 0;
}
i = 29;
WRITE_DAT(31,0x80); //clean l
while (signal){
WRITE_DAT(i,0x80); //clean l
i -= 2;
signal--;
}
if (battery > 3)
battery = 0;
i = 1;
WRITE_DAT(7,0x80);
while (battery){
WRITE_DAT(i,0x80); //clean l
i += 2;
battery--;
}
addr *= 2; //Show the nuber at the 0-0x0f
while (unit){
WRITE_DAT(addr, TAB1[*str]);
WRITE_DAT(addr+1, TAB1[*str] << 4);
addr += 2;
str++;
unit--;
// DELAY(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -