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

📄 lcd.c

📁 用CS5532做的无线吊钩称的接收称重显示器程序
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#include <math.h>


#define LCDLENGTH 18		//定义LCD液晶显示的数字长度

//定义LCD引脚
sbit    LCDDATA = P0^7;
sbit    LCDWR   = P0^6;
sbit    LCDCS   = P0^4;


//定义字段的引脚
#define za       0x10  
#define zb       0x01  
#define zc       0x04
#define zdp      0x08  
#define zf       0x20    
#define zg       0x02 
#define ze       0x40  
#define zd       0x80  

//定义字段
unsigned char code seg0[] = { 
                             za+zb+zc+zd+ze+zf,		//0
				     zb+zc,				//1
				     za+zb+zg+ze+zd,		//2
				     za+zb+zc+zd+zg,		//3
				     zb+zc+zf+zg,			//4
				     za+zf+zg+zc+zd,		//5
				     za+zc+zd+ze+zf+zg,		//6
				     za+zb+zc,			//7
				     za+zb+zc+zd+ze+zf+zg,	//8
				     za+zb+zc+zd+zf+zg,		//9
				     za+zb+zc+ze+zf+zg,		//a
				     ze+zf+zg+zd+zc,		//b
				     za+ze+zf+zd,			//c
				     zb+zc+zg+zd+ze,		//d
				     za+ze+zf+zg+zd,		//e
				     za+ze+zf+zg,			//f
				     za+ze+zf+zd+zc,		//g  10
				     zb+zc+zg+ze+zf,		//h  11
				     zc,				//i  12
				     zb+zc+zd+ze,			//j  13
				     ze+zg+zf,			//k  14
				     ze+zf+zd,			//l  15
				     ze+zg+zc,			//n  16
				     ze+zd+zg+zc,			//o  17
				     za+zb+ze+zf+zg,		//p  18
				     za+zb+zc+zf+zg,		//q  19
				     ze+zg,				//r  1a
				     za+zf+zg+zc+zd,		//s  1b
				     ze+zf+zd+zg,			//t  1c
				     zb+zc+zd+ze+zf,		//U  1d
				     zf+zg+zb+zc+zd,		//y  1e
				     zg,				//-  1f
				     0,				//space  20
				     za+zb+zg+ze+zdp,		//?  21
				     za+zb+zc+zd+ze+zf+zdp,	//0. 22
				     zb+zc+zdp,			//1. 23
				     za+zb+zg+ze+zd+zdp,	//2. 24
				     za+zb+zc+zd+zg+zdp,	//3. 25
				     zb+zc+zf+zg+zdp,		//4. 26
				     za+zf+zg+zc+zd+zdp,	//5. 27
				     za+zc+zd+ze+zf+zg+zdp,	//6. 28
				     za+zb+zc+zdp,		//7. 29
				     za+zb+zc+zd+ze+zf+zg+zdp,//8. 2a
				     za+zb+zc+zd+zf+zg+zdp,	//9. 2b
				     231,				//   2c
				     za+zg+zd,			//   2d
				     ze+zd+zc,			//u  2e
				     ze+zd+zc+za,			//v  2f
				     ze+zg+zc+za,			//m  30
				     za+zc+zd+ze,			//w  31
				     zb+zc+zg+zd+ze+zdp,	//d. 32
				     ze+zg+zc+za+zdp,		//m. 33
				     zf+zg+zb+zc+zd+zdp		//y. 34
				     }; 



//data unsigned char  data bankbuff[6]  _at_ 0x4c;	//显示六位数字的缓冲区

unsigned char xdata bankbuff[LCDLENGTH];// _at_ 0x4c	//显示六位数字的缓冲区
//data unsigned int   data bankbuff1[3];// _at_ 0x4c;

unsigned char  data dispbuff[7];//  _at_ 0x55;   


extern bdata unsigned char cont_1;		//显示标志位,包括电池,稳定等
extern bdata unsigned char cont_2;
extern bdata unsigned char cont_3;
extern bdata unsigned char cont_4;
//extern unsigned char data flash;


void DispDigital(signed long int li,unsigned char pos);
void delay(signed long int li)
{
	for ( ; li>0; li--) ;
}

//向1621写入8BIT
void outbt_8(unsigned char dat)
{
	ACC = dat;
	B = 8;
	for ( ; ; )
	{
		CY = ACC & 0x80;		//带进位左移
		LCDDATA = CY;
		_nop_();
		LCDWR = 0;
		_nop_();
		LCDWR = 1;
		B--;
		if (B==0) break;
	}
}

//向1621写入4BIT
void outbt_4(unsigned char da)
{

	ACC = da;
	B = 4;
	for ( ; ; )
	{
		CY = ACC & 0x80;		//带进位左移
		LCDDATA = CY;
		_nop_();
		LCDWR = 0;
		_nop_();
		LCDWR = 1;
		B--;
		if (B==0) break;
	}

}  

//向1621写入13个BIT
void wr1621 (unsigned char da_1,unsigned char da_2)
{
	LCDWR = 1;
	_nop_();
	LCDCS = 0;
	_nop_();
	outbt_8(da_1);
	outbt_4(da_2);
	_nop_();
	LCDCS = 1;
}

//向LCD写入一串数据,在LCD上显示
void wrlcd(void)
{
	unsigned char loop;
	LCDWR = 1;
	LCDCS = 0;
	_nop_();
	LCDDATA = 1;
	_nop_();
	LCDWR = 0;
	_nop_();
	LCDWR = 1;
	
	outbt_8(0x40);
	
	for (loop=0;loop<16;loop++)
	{
		outbt_8(bankbuff[loop]);
	}
	LCDCS = 1;
}

//初始化1621
void InitLcd(void)
{
	wr1621(0x85,0x20);
	wr1621(0x80,0x20);
	wr1621(0x80,0x60);
}

void tran (void)
{
	bankbuff[11]  = cont_1;
	bankbuff[1] = cont_2;
	bankbuff[0] = cont_3;
	bankbuff[10] = cont_4;

	bankbuff[12]  = (seg0[dispbuff[0]]&0xf0) | ((seg0[dispbuff[1]]>>4) & 0x0f);
	bankbuff[13] = (seg0[dispbuff[1]]&0x0f) | ((seg0[dispbuff[0]]<<4) & 0xf0);
	bankbuff[2]  = (seg0[dispbuff[2]]&0xf0) | ((seg0[dispbuff[3]]>>4) & 0x0f);
	bankbuff[14] = (seg0[dispbuff[3]]&0x0f) | ((seg0[dispbuff[2]]<<4) & 0xf0);
	bankbuff[3]  = (seg0[dispbuff[4]]&0xf0) | ((seg0[dispbuff[5]]>>4) & 0x0f);
	bankbuff[15] = (seg0[dispbuff[5]]&0x0f) | ((seg0[dispbuff[4]]<<4) & 0xf0);
}

//显示一串字符串
void DispStr(unsigned char code  *ptr_code)
{
	unsigned char loop;
	for (loop=0;loop<6;loop++)
	{
		dispbuff[loop]=*(ptr_code + loop);
	}
	tran();
	wrlcd();
}

//在LCD上显示整数
//输入:待显示的长整数,小数的位数,长整数
void DispDigital(signed long li,signed char pos)
{     
	  signed char loop;
	unsigned char ch;

	ch = 0;
	if (li < 0 ) {li = -li;ch = 1;}

	for ( loop = 5; loop>= 0; loop--)
	{
		dispbuff[loop] = integer % 10;
		integer /=10;
	}
//	conv_int_to_str(li);

//	ptr_target=dispbuff;
//	dsc(pos);		//确定小数点的位置


//确定小数点的位置,首位的零变为空格
	if ( (pos > 0) && (pos < 6) )
	{
		//*(ptr_target+(5-pos)) +=0x22;
		dispbuff[5-pos] += 0x22;
	}
	loop=0;
	while (loop<5)
	{
/*		if (*ptr_target==0)
		{
			*ptr_target=0x20;
			ptr_target++;
			loop++;
		} else break;*/
		if (dispbuff[loop] == 0)
		{
			dispbuff[loop] = 0x20;
			loop++;
		}
		else break;
	}

	if (ch==1) dispbuff[0] = 0x1f;
	tran();		//在LCD上显示数字
	wrlcd();
}


⌨️ 快捷键说明

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