📄 displaylcd.c
字号:
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint int
/***************************HT1621常数定义*****************************/
#define RAMSIZE 16 //RAM区16字节
#define BIAS 0x52 //1/3偏压,4个公共口
#define RC256K 0x30 //片内RC振荡器
#define SYSEN 0x02 //打开系统振荡器
#define SYSDIS 0x00 //关闭系统振荡器河LCD偏压发生器
#define LCDON 0x06 //打开LCD偏压发生器
#define SYSDIS 0X00 /*关闭振荡发生器*/
#define LCDOFF 0X04 /*显示关闭*/
#define TONE4 0X80 /*设置BZ 输出频率为4K*/
#define TONEON 0X12 /*打开BZ 音频输出*/
#define TONEOFF 0X10 /*关闭BZ 音频输出*/
#define CLRWDT 0X1c /*清零WDT*/
#define F1 0X40 /*WDT设置为4 秒溢出*/
#define IRQEN 0X10 /*IRQ 输出禁止*/
#define IRQDIS 0X00 /*IRQ 输出允许*/
#define WDTEN 0X0e /*打开WDT*/
#define WDTDIS 0X0a /*关闭WDT*/
#define TIMERDIS 0X08 /*关闭时基输出*/
/***************************HT1621常数定义***************************
#define RAMSIZE 16 //RAM区16字节
#define BIAS 0x29 //1/3偏压,4个公共口
#define RC256K 0x18 //片内RC振荡器
#define SYSEN 0x01 //打开系统振荡器
#define SYSDIS 0x00 //关闭系统振荡器河LCD偏压发生器
#define LCDON 0x03 //打开LCD偏压发生器
#define lcd_osci 0x14 // XTAL 32
#define wtd_dis 0x05
#define wtd_en 0x07
#define irq_dis 0x80
#define irq_en 0x88
#define f1 0xa0
#define f8 0xa3
#define clr_wtd 0x0e
********************************************************/
//#define sbit HT_WR P1^2 //读写线
//#define sbit HT_CS P1^1 //片选线
//#define sbit HT_DATA P1^3 //数据线
sbit HT_WR = P1^3;
sbit HT_CS = P1^2;
sbit HT_DATA = P1^1;
void EnableHt1621(void);
void SendBitToHt1621(uchar nbit,uchar n);
void SendCommandToHt1621(uchar command);
void ResetHt1621(void);
void SetupHt1621(void);
void SendByteToHt1621(uchar addr,uchar byte);
void SendStringToHt1621(uchar addr,uchar *ptr,uchar len);
void Ht1621DisplayAll(void);
void Delay(void);
void Delay1s(void);
/**********************************************************************
延时函数 用于调整CLK 脉冲宽度
***********************************************************************/
void Delay(void)
{
uchar i;
for(i=0;i<10;i++){};
}
/**********************************************************************
长延时函数
***********************************************************************/
void Delay1s(void)
{
uchar i;
uint j;
for(i=0;i<100;i++)
for(j=0;j<1300;j++);
}
/*********************************************************************************
函数名称:void EnableHt1621(void)
函数功能:使能HT1621
函数输入:无
函数输出:无
**********************************************************************************/
void EnableHt1621(void)
{
HT_CS=0;
HT_WR=1;
Delay();
HT_WR=0;
Delay();
}
/*********************************************************************************
函数名称:SendBitToHt1621(uchar nbit,uchar n)
函数功能:向HT1621发送数据
函数输入:nbit:发送的位串 n:发送的位数
函数输出:无
*********************************************************************************/
void SendBitToHt1621(uchar nbit,uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
if(nbit>=0x80)
HT_DATA=1;
else
HT_DATA=0;
HT_WR=0;
Delay();
HT_WR=1;
Delay();
nbit<<=1;
}
}
/************************************************/
void SenddataBitToHt1621(uchar nbit,uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
if(nbit>=0x80)
HT_DATA=1;
else
HT_DATA=0;
HT_WR=0;
Delay();
HT_WR=1;
Delay();
nbit>>=1;
}
}
/***********************************************************************************
函数名称:void sendcommandtoht1621(uchar command)
函数功能:发送命令到HT1621
函数输入:command:命令参数
函数输出:无
***********************************************************************************/
void SendCommandToHt1621(uchar command)
{
EnableHt1621();
SendBitToHt1621(0x80,4);
SendBitToHt1621(command,8);
HT_WR=1;
Delay();
HT_CS=1;
Delay();
HT_DATA=1;
}
/***********************************************************************************
函数名称:void ResetHt1621(void)
函数功能:复位HT1621
函数输入:无
函数输出:无
***********************************************************************************/
void ResetHt1621(void)
{
HT_WR=1;
Delay();
HT_CS=1;
Delay();
HT_DATA=1;
}
/***********************************************************************************
函数名称:void SetupHt1621(void)
函数功能:初始化HT1621
函数输入:无
函数输出:无
***********************************************************************************/
void SetupHt1621(void)
{
SendCommandToHt1621(SYSEN);
// SendCommandToHt1621(lcd_osci);
SendCommandToHt1621(BIAS);
SendCommandToHt1621(RC256K);
// SendCommandToHt1621(F1);
SendCommandToHt1621(WDTDIS);
// SendCommandToHt1621(IRQDIS);
SendCommandToHt1621(LCDON);
}
/***********************************************************************************
函数名称:void SendByteToHt1621(uchar addr,uchar byte)
函数功能:初始化HT1621
函数输入:addr:地址 byte:发送的字节
函数输出:无
***********************************************************************************/
void SendByteToHt1621(uchar addr,uchar byte)
{
addr<<=3;
EnableHt1621();
SendBitToHt1621(0xA0,3);
SendBitToHt1621(addr,6);
SendBitToHt1621(byte,8);
HT_WR=1;
//NOP();
Delay();
HT_CS=1;
}
/**************************************************************************************************************************
//函数名称:void SendStringToHt1621(uchar addr,uchar *ptr,uchar len)
//函数功能:发送字符串给HT1621
//函数输入:addr:起始地址 ptr:发送的字符串 len:发送的字符串长度
//函数输出:无
***************************************************************************************************************************/
void SendStringToHt1621(uchar addr,uchar *ptr,uchar len)
{
uchar i;
addr<<=2;
EnableHt1621();
SendBitToHt1621(0xa0,3);
SendBitToHt1621(addr,6);
if((len+addr)>RAMSIZE)len=RAMSIZE-addr;
for(i=0;i<len;i++)
{
SendBitToHt1621(ptr[i],8);
}
HT_CS=1;
}
/******test*******/
void main(void)
{
uchar a,temp,add;
uchar addr;
temp=0xad;
//a=0x5f;
addr=0x02;
// add=0x01;
ResetHt1621();
SetupHt1621();
while(1)
{
SendByteToHt1621(addr,temp);
Delay1s();
Delay1s();
Delay1s();
temp++;
if(temp== 0xff) temp = 0;
}
//SendByteToHt1621(add<<=2,a);
//SendStringToHt1621(0,a,5);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -