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

📄 display.c

📁 用CS5532做的无线吊钩称的接收称重显示器程序
💻 C
字号:
//#include  "R_io.h"

#include <reg52.h>
#include <intrins.h>

sbit LCDDATA = P0^2;
sbit LCDWR   = P0^1;
sbit LCDCS   = P0^0;

/////////////////////////////////////////////  

//最右边一个米字 
#define r1sa       0x80  // 
#define r1sb       0x08  //
#define r1sc       0x04  //
#define r1sd       0x10  //
#define r1se       0x10
#define r1sf       0x40   
#define r1sg       0x04  
#define r1sh       0x20

#define r1si       0x80
#define r1sj       0x40   
#define r1sk       0x20  
#define r1sl       0x02
#define r1sm       0x01   
#define r1sn       0x20 
//中间一个米字 
#define r2sa       0x80  // 
#define r2sb       0x80  //
#define r2sc       0x20  //
#define r2sd       0x10  //
#define r2se       0x01
#define r2sf       0x02   
#define r2sg       0x40  
#define r2sh       0x08

#define r2si       0x04
#define r2sj       0x40   
#define r2sk       0x01  
#define r2sl       0x02
#define r2sm       0x10   
#define r2sn       0x20
//最左边一个米字 
#define r3sa       0x80  // 
#define r3sb       0x08  //
#define r3sc       0x04  //
#define r3sd       0x10  //
#define r3se       0x10
#define r3sf       0x40   
#define r3sg       0x04  
#define r3sh       0x08

#define r3si       0x80
#define r3sj       0x40   
#define r3sk       0x20  
#define r3sl       0x02
#define r3sm       0x01   
#define r3sn       0x20 
///
unsigned	char	code	unit_k1 = r3si + r3sk; 
unsigned	char	code	unit_k2 = r3sn+ r3se+r3sf;
unsigned	char	code	unit_g1 = r2sb + r2sc + r2sd +r2sj; 
unsigned	char	code	unit_g2 = r2sa +  r2sn;
 
unsigned	char	code	unit_l1 = r3sd;
unsigned	char	code	unit_l2 = r3se + r3sf ; 
unsigned	char	code	unit_b1 = r2sj + r2sc + r2sd ;
unsigned	char	code	unit_b2 =    r2sn;//+r2sf +   r2se;

unsigned	char	code	unit_01 = r3sd + r3sc + r3sb ;
unsigned	char	code	unit_02 = r3sf + r3se + r3sa; 
unsigned	char	code	unit_z1 = r2sb + r2sj + r2sd ;
unsigned	char	code	unit_z2 = r2sa  + r2sn;// 	 + r2se

unsigned	char	code	unit_p1 = r3sb + r3sj;
unsigned	char	code	unit_p2 = r3sa + r3se + r3sf + r3sn; 
unsigned	char	code	unit_c1 = r2sn ;
unsigned	char	code	unit_c2 = r2sd +r2sj;//+ r2se; 
unsigned	char	code	unit_s1 = r1sj + r1sc + r1sd;
unsigned	char	code	unit_s2 = r1sa + r3sf + r3sn;
 
unsigned	char	code	unit_t1 = r3sj + r3sd;
unsigned	char	code	unit_t2 = r3sf + r3se + r3sn ; 
unsigned	char	code	unit_j2 = 0; 
unsigned	char	code	unit_j1 = r2sb + r2sc + r2sd ; 
unsigned	char	code	unit_h1 = r3sj + r3sb + r3sc;
unsigned	char	code	unit_h2 = r3sf + r3se + r3sn; 
unsigned	char	code	unit_sp1 = 0;
unsigned	char	code	unit_sp2 = 0;
 

//普通段码   
#define sa       0x08  
#define sb       0x80  // 
#define sc       0x20  //
#define sdp      0x10  //
#define sf       0x04     
#define sg       0x40  //  
#define se       0x02  
#define sd       0x01

extern bdata unsigned char cont_1;
extern bdata unsigned char cont_2;
extern bdata unsigned char cont_3;
/*extern xdata unsigned char rice1_1;
extern xdata unsigned char rice1_2;
extern xdata unsigned char rice2_1;
extern xdata unsigned char rice2_2;
extern xdata unsigned char rice3_1;
extern xdata unsigned char rice3_2;*/
//////
unsigned char  data bankbuff[16];
unsigned char xdata dispbuff[6];

unsigned char xdata rice1_1;
unsigned char xdata rice1_2;
unsigned char xdata rice2_1;
unsigned char xdata rice2_2;
unsigned char xdata rice3_1;
unsigned char xdata rice3_2;

extern	bit		pcs_lcd;
extern	bit		kg_lcd;
extern	bit		oz_lcd;
extern	bit		g_lcd;
extern	bit		lb_lcd;
extern	bit		batt_lcd;
extern	bdata	unsigned	char	cont_3;

extern  bit		in_ch;
extern	bit		flash_b;
extern xdata unsigned char flash;
extern unsigned char xdata unit;

extern bit BHold;

code unsigned char seg0[]=                ///显示符号表格
{
	sa+sb+sc+sd+se+sf,		//0
	sb+sc,               		//1
	sa+sb+sg+se+sd,      		//2
	sa+sb+sc+sd+sg,      		//3
	sb+sc+sf+sg,         		//4
	sa+sf+sg+sc+sd,      		//5
	sa+sc+sd+se+sf+sg,   		//6
	sa+sb+sc,            		//7
	sa+sb+sc+sd+se+sf+sg,		//8
	sa+sb+sc+sd+sf+sg,   		//9
	sa+sb+sc+se+sf+sg,   		//a
	se+sf+sg+sd+sc,      		//b
	sa+se+sf+sd,         		//c
	sb+sc+sg+sd+se,      		//d
	sa+se+sf+sg+sd,      		//e
	sa+se+sf+sg,         		//f
	sa+se+sf+sd+sc,      		//g	//0x10
	sb+sc+sg+se+sf,      		//h	//0x11
	sc,                  		//i	//0x12
	sb+sc+sd+se,         		//j	//0x13
	se+sg+sf,            		//k	//0x14
	se+sf+sd,            		//l	//0x15
	se+sg+sc,            		//n	//0x16
	se+sd+sg+sc,         		//o	//0x17
	sa+sb+se+sf+sg,      		//p	//0x18
	sa+sb+sc+sf+sg,      		//q	//0x19
	se+sg,               		//r	//0x1a
	sa+sf+sg+sc+sd,      		//s	//0x1b
	se+sf+sd+sg,         		//t	//0x1c
	sb+sc+sd+se+sf,      		//u	//0x1d
	sf+sg+sb+sc+sd,      		//y	//0x1e
	sg,                  		//-	//0x1f
	0 ,                  		//space	//0x20
	sa+sb+sg+se+sdp,     		//?	//0x21
	sa+sb+sc+sd+se+sf+sdp,		//0.	//0x22
	sb+sc+sdp,            		//1.	//0x23
	sa+sb+sg+se+sd+sdp,   		//2.	//0x24
	sa+sb+sc+sd+sg+sdp,   		//3.	//0x25
	sb+sc+sf+sg+sdp,      		//4.	//0x26
	sa+sf+sg+sc+sd+sdp,   		//5.	//0x27
	sa+sc+sd+se+sf+sg+sdp,		//6.	//0x28
	sa+sb+sc+sdp,         		//7.	//0x29
	sa+sb+sc+sd+se+sf+sg+sdp,	//8.	//0x2a
	sa+sb+sc+sd+sf+sg+sdp,  	//9.	//0x2b
	231,						//0x2c
	sa+sg+sd,				//X	//0x2d
	se+sf+sg,				//K	//0x2e
	sc+sd+se,				//v	//0x2f
	sa+sc+se+sg,				//0x30
	sb+sc+sd+se+sf+sdp,     	//u.	//0x31	
	sb+sf+sd+sg,			//w	//0x32
	sa+sc+sd+se+sdp,     		//w.	//0x33

};

//向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 dat)
{
	ACC = dat;
	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 ClearFlag(void)
{
	bankbuff[1] = bankbuff[2]=bankbuff[3]=bankbuff[4]=bankbuff[5]=bankbuff[6]=0;
	cont_1 = cont_2 = cont_3 = 0;
}

void DispUnit(unsigned char LcdUnit)
{
	if (LcdUnit == 0xff) return;		
	rice1_1 = 0;
	rice1_2 = 0;
	rice2_1 = 0;
	rice2_2 = 0;
	rice3_1 = 0;
	rice3_2 = 0;
	switch (LcdUnit)
	{
		case 0:	
			rice1_1 = unit_k2;
			rice1_2 = unit_k1;
			rice2_1 = unit_g2;
			rice2_2 = unit_g1;
			rice3_1 = 0;
			rice3_2 = 0;
//			kg_lcd = 1;
			break;
		case 4:	
			rice1_1 = 0;
			rice1_2 = 0;
			rice2_1 = unit_g2;
			rice2_2 = unit_g1;
			rice3_1 = 0;
			rice3_2 = 0;
//			g_lcd = 1;
			break;
		case 1:	
			rice1_1 = unit_l2;
			rice1_2 = unit_l1;
			rice2_1 = unit_b2;
			rice2_2 = unit_b1;
			rice3_1 = 0;
			rice3_2 = 0;
//			lb_lcd = 1;
			break;
		case 5:	
			rice1_1 = unit_02;
			rice1_2 = unit_01;
			rice2_1 = unit_z2;
			rice2_2 = unit_z1;
			rice3_1 = 0;
			rice3_2 = 0;
//			oz_lcd = 1;
			break;
		case 6:	
			rice1_1 = unit_l2;
			rice1_2 = unit_l1;
			rice2_1 = unit_z2;
			rice2_2 = unit_z1;
			rice3_1 = 0;
			rice3_2 = 0;
//			lb_lcd = 1;
//			oz_lcd = 1;
			break;		
		case 2:	
			rice1_1 = unit_t2;
			rice1_2 = unit_t1;
			rice2_1 = unit_j2;
			rice2_2 = unit_j1;
			rice3_1 = 0;
			rice3_2 = 0;
//			tl_lcd = 1;
//			jin_lcd = 1;
			break;
		case 3:	
			rice1_1 = unit_h2;
			rice1_2 = unit_h1;
			rice2_1 = unit_j2;
			rice2_2 = unit_j1;
			rice3_1 = 0;
			rice3_2 = 0;
//			hl_lcd = 1;
//			jin_lcd = 1;
			break;
		
		case 7:
			break;
		default:
			break;
				
	}
	bankbuff[1] = rice1_1;
	switch (LcdUnit)
	{
		case 0:							//kg
		case 4:							// g
			bankbuff[2] = rice1_2 + r2sf;
			break;
		case 1:							//lb
			bankbuff[2] = rice1_2 + r2sf + r2se;
			break;
		case 5:							//oz
		case 6:                                         //lz
			bankbuff[2] = rice1_2 + r2se;
			break;
		case 2:							//台斤
		case 3:							//港斤
			bankbuff[2] = rice1_2;
			break;
		default:
			bankbuff[2] = 0;
			break;
	}

	bankbuff[3] = rice2_1;
	bankbuff[4] = rice2_2 + cont_3;
//	bankbuff[4] = rice2_2;
	bankbuff[5] = rice3_1;
	bankbuff[6] = rice3_2;
	if (BHold) bankbuff[6] |= 0x02;
	else bankbuff[6] &= ~0x02;
}

void tran(void)
{	
	unsigned char loop;

      bankbuff[0] = cont_1;

	bankbuff[7] = cont_2;

	for(loop=8;loop<14;loop++)	//8~13
	{
		bankbuff[loop]=( seg0[dispbuff[13-loop]]);
	}

	if(batt_lcd)
	{
		bankbuff[8] +=  0x10;
	}

	bankbuff[14] = cont_3 ;
}



///////显示液晶1
/*void DispLcd(void)
{
	tran();
	wrlcd();
}*/

//显示一串字符串
void DispStr(unsigned char code  *ptr_code)
{
	unsigned char loop;
	for (loop=0;loop<6;loop++)
	{
		dispbuff[loop]=*(ptr_code + loop);
	}
	DispUnit(unit);
	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] = li % 10;
		li /=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;
	DispUnit(unit);
	tran();		//在LCD上显示数字
	wrlcd();
}


⌨️ 快捷键说明

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