⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ht1621.c

📁 用ATmega88的一款温湿度仪的原程序
💻 C
字号:
#include <avr/io.h>
#include <util/delay.h>
typedef unsigned char uchar;
#define BIAS 0x52	
#define SYSEN 0x02
#define LCDON 0x06
#define LCDOFF 0x04
#define RC    0x30

#define WR(x)	if(x==0) PORTD&=0xFD;else PORTD|=0x02
#define DATA(y) if(y==0) PORTB&=0xFD;else PORTB|=0x02
#define CS(z)   if(z==0) PORTD&=0xFE;else PORTD|=0x01

void SendBit_1621(uchar data,uchar cnt)		//data的高cnt位写入HT1621,高位在前
{
	uchar i;
	for(i =0; i <cnt; i ++)
	{
		if((data&0x80)==0) DATA(0);
		else DATA(1);
		WR(0);
		asm("nop");
		asm("nop");
		asm("nop");
		WR(1);
		data<<=1;
	}
}

void SendDataBit_1621(uchar data,uchar cnt)	//data的低cnt位写入HT1621,低位在前
{
	uchar i;
	for(i =0; i <cnt; i ++)
	{
		if((data&0x01)==0) DATA(0);
		else DATA(1);
		WR(0);
		asm("nop");
		asm("nop");
		asm("nop");
		WR(1);
		data>>=1;
	}
}
void SendCmd(uchar command)
{
	CS(0);
	SendBit_1621(0x80,4);			//写入标志码"100"和9位command命令,由于
	SendBit_1621(command,8); 		//没有使有到更改时钟输出等命令,为了编程方便
	CS(1);						//直接将command的最高位写"0"
}

void Write_1621(uchar addr,uchar data)
{
	addr<<=2;
	CS(0);
	SendBit_1621(0xa0,3);			//写入标志码"101"
	SendBit_1621(addr,6);			//写入addr的高6位
	SendDataBit_1621(data,4);		//写入data的低4位
	CS(1);
}
/*
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
	uchar i;
	addr<<=2;
    CS(0);
	SendBit_1621(0xa0,3);			//写入标志码"101"
	SendBit_1621(addr,6);			//写入addr的高6位
	for(i =0; i <cnt; i ++,p++)		//连续写入数据
	{
		SendDataBit_1621(*p,8);
	}
	CS(1);
}
*/
void init_ht1621()
{
	unsigned char i;
    SendCmd(RC);
	SendCmd(BIAS);	//设置偏压和占空比
	SendCmd(SYSEN);	//打开系统振荡器	
	SendCmd(LCDON);	//打开LCD偏压发生器
    for(i=0;i<18;i++)
  		Write_1621(i,0);
//	SendCmd(LCDOFF);	//关闭LCD显示
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -