📄 main.c
字号:
/************************************************************************
[文件名] HT1621lcd
[功能] 通过单片机测试显示芯片HT1621与LCD屏
//本例采用89S52, 晶振为11.0592MHZ
/**********************************************************************/
#include <reg52.h>
//#include "all.h"
//#include "all.c"
//#include <intrins.h>
sbit HT1621_data=P1^0;
sbit HT1621_WR =P1^1;
sbit HT1621_CS =P1^2;
sbit _ring=P3^5;
sbit _led =P2^6;
sbit _vcc =P2^7;
void main(void)
{
unsigned char i,j,_row=0,_line=1;
_ring=0;
_vcc=1;
_led=1;
//test();
disp_int();
while(1);
{
for(i=0;i<5;i++)
{
for(j=0;j<16;j++)
{
disp_clr();
disp_number(i,j);
disp_table();
ding(1);
}
}
while(1);
}
}
/************************************************************************
[涵数] void disp_write(unsigned char _line,unsigned char _row);
[功能] 写LCD屏中的一段
[入参] _line:行数据 _row:列数据
[回参] 无
[影响] 无
/**********************************************************************/
void disp_write(unsigned char _line,unsigned char _row)
{
unsigned char i;
bit cy;
_row=_row<<2;
HT1621_CS=0;
HT1621_WR=0;
HT1621_data=1;
HT1621_WR=1;
HT1621_WR=0;
HT1621_data=0;
HT1621_WR=1;
HT1621_WR=0;
HT1621_data=1;
HT1621_WR=1;
for(i=0;i<6;i++) //发送命令与列数据
{
HT1621_WR=0;
cy=_row&0x80;
HT1621_data=cy;
HT1621_WR=1;
_row=_row<<1;
}
for(i=0;i<4;i++) //发送命令与行数据
{
HT1621_WR=0;
cy=_line&0x80;
HT1621_data=cy;
HT1621_WR=1;
_line=_line<<1;
}
HT1621_CS=1;
HT1621_data=1;
HT1621_WR=1;
}
/************************************************************************
[涵数] void disp_mode(unsigned char _mode,unsigned char _data);
[功能] HT1621工作模式设置
[入参] _mode:命令代码 _data:命令内容
[回参] 无
[影响] 无
/**********************************************************************/
void disp_mode(unsigned char _mode,unsigned char _data)
{
unsigned char i;
bit cy;
HT1621_CS=0;
HT1621_WR=1;
HT1621_data=1;
for(i=0;i<8;i++) //发送命令与列数据
{
HT1621_WR=0;
cy=_mode&0x80;
HT1621_data=cy;
HT1621_WR=1;
_mode=_mode<<1;
}
for(i=0;i<4;i++) //发送行数据
{
HT1621_WR=0;
cy=_data&0x80;
HT1621_data=cy;
HT1621_WR=1;
_data=_data<<1;
}
HT1621_CS=1;
HT1621_data=1;
HT1621_WR=1;
}
void disp_on(void) //开显示
{disp_mode(0x80,0x60);}
void disp_off(void) //关显示
{disp_mode(0x80,0x40);}
void disp_enable(void) //显示使能
{disp_mode(0x80,0x20);}
void disp_disable(void) //显示禁止
{disp_mode(0x80,0x00);}
void disp_normal(void) //显示工作于常规
{disp_mode(0x9c,0x60);}
void disp_bias(void) //显示BIAS设置
{disp_mode(0x85,0x20);}//BIAS=1/3:4
void disp_RC(void) //显示时钟设置
{disp_mode(0x93,0x00);}//256K
/************************************************************************
[涵数] void disp_clr(void);
[功能] 控制HT1621清显示屏
[入参] 无
[回参] 无
[影响] 无
/**********************************************************************/
void disp_clr(void)
{
unsigned char i,j;
for(i=0;i<4;i++)
{
for(j=0;j<13;j++)
{disp_write(0x0,j);}
}
}
/************************************************************************
[涵数] void disp_number(unsigned char _bit,unsigned char _number);
[功能] 显示字符转换成代码
[入参] _bit:字符显示位 _number:相应位显示的字符值
[回参] 无
[影响] table[0-6];
/**********************************************************************/
void disp_number(unsigned char _bit,unsigned char _number)
{
unsigned char i;
i=4-_bit;
switch(_number)
{
case 0:table[i]=table[i]&0x01;
table[i]=table[i]|0x0BE; //0b1011,1110; abcdef段
break;
case 1:table[i]=table[i]&0x01;
table[i]=table[i]|0x06; //0b0000,0110; bc段
break;
case 2:table[i]=table[i]&0x01;
table[i]=table[i]|0x7C; //0b0111,1100; abdeg段
break;
case 3:table[i]=table[i]&0x01;
table[i]=table[i]|0x5E; //0b0101,1110; abcdg段
break;
case 4:table[i]=table[i]&0x01;
table[i]=table[i]|0x0C6; //0b1100,0110; abcefg段
break;
case 5:table[i]=table[i]&0x01;
table[i]=table[i]|0x0DA; //0b1101,1010; acdfg段
break;
case 6:table[i]=table[i]&0x01;
table[i]=table[i]|0x0FA; //0b1111,1010; acdefg段
break;
case 7:table[i]=table[i]&0x01;
table[i]=table[i]|0x0E; //0b0000,1110; abc段
break;
case 8:table[i]=table[i]&0x01;
table[i]=table[i]|0x0FE; //0b1111,1110; abcdefg段
break;
case 9:table[i]=table[i]&0x01;
table[i]=table[i]|0x0DE; //0b1101,1110; bcdfg段
break;
case 0x0A:table[i]=table[i]&0x01;
table[i]=table[i]|0x0EE; //0b1110,1110; bcddfg段
break;
case 0x0b:table[i]=table[i]&0x01;
table[i]=table[i]|0x0F2; //0b1111,0010; cdefg段
break;
case 0x0C:table[i]=table[i]&0x01;
table[i]=table[i]|0x0B8; //0b1011,1000; adef段
break;
case 0x0d:table[i]=table[i]&0x01;
table[i]=table[i]|0x76; //0b0111,0110; bcdeg段
break;
case 0x0E:table[i]=table[i]&0x01;
table[i]=table[i]|0x0F8; //0b1111,1000; adefg段
break;
case 0x0F:table[i]=table[i]&0x01;
table[i]=table[i]|0x0E8; //0b1110,1000; bcde段
break;
default:break;
}
}
/************************************************************************
[涵数] void disp_table(void);
[功能] 显示整屏的内容
[入参] 无
[回参] 无
[影响] 无
/**********************************************************************/
void disp_table(void)
{
unsigned char i,j,_line;
_line=table[6];
disp_write(_line,0);
for(i=0,j=1;i<6;i++,j++)
{
_line=table[i];
disp_write(_line,j);
j++;
_line=table[i]<<4;
disp_write(_line,j);
}
}
/************************************************************************
[涵数] void delay_ms(unsigned char _ms);
[功能] 豪秒延时子程序
[入参] _ms: 延时_ms(ms)的时间
[回参] 无
[影响] 无
/**********************************************************************/
void delay_ms(unsigned char _ms)
{
unsigned char i;
while(_ms--)
{
for(i=0;i<125;i++)
{;}
}
}
/************************************************************************
[涵数] void ding(unsigned char _time);
[功能] 蜂鸣器控制
[入参] _time: 蜂鸣器响的次数
[回参] 无
[影响] 无
/**********************************************************************/
void ding(unsigned char _time)
{
time++;
for(;_time>0;_time--)
{
_ring=1;
_led=1;
delay_ms(10);
_led=0;
_ring=0;
delay_ms(100);
}
delay_ms(250);
//delay_ms(250);
}
/************************************************************************
[涵数] void disp_int(void)
[功能] 显示初始化,并显示0-F
[入参] 无
[回参] 无
[影响] 无
/**********************************************************************/
void disp_int(void)
{
unsigned char i,j;
disp_normal();
disp_RC();
disp_enable();
disp_bias();
disp_on();
disp_clr();
disp_table();
for(i=0;i<=0xF;i++)
{
for(j=0;j<5;j++)
{
disp_number(j,i);
}
disp_table();
ding(1);
}
for(i=0;i<7;i++)
{table[i]=0;}
disp_clr();
disp_number(0,0);
disp_number(1,0);
disp_number(2,0);
dp4_on;
g_on;
disp_table();
}
/*
void test(void)
{
power_on;
ding(1);
minus_on;
ding(1);
pc_on;
ding(1);
one_on;
ding(1);
oz_on;
ding(1);
t_on;
ding(1);
percent_on;
ding(1);
ct_on;
ding(1);
dwt_on;
ding(1);
g_on;
ding(1);
n_on;
ding(1);
lb_on;
ding(1);
dp1_on;
ding(1);
dp2_on;
ding(1);
dp3_on;
ding(1);
dp4_on;
ding(1);
dp5_on;
ding(1);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -