📄 display.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 + -