📄 lcd.c
字号:
#include "hardware.h"
#include "beep.h"
uchar Lcdbit=0x0c;
uchar idata display_buffer[8]={0,0,0,0,0,0,0,0};
//液晶段码
#define a 0x08
#define b 0x04
#define c 0x02
#define d 0x01
#define e 0x20
#define f 0x80
#define g 0x40
#define h 0x10
unsigned code seg[]=
{
a+b+c+d+e+f,//0 0
b+c,//1 1
a+b+g+e+d,//2 2
a+b+g+c+d,//3 3
f+g+b+c,//4 4
a+f+g+c+d,//5 5
a+f+g+e+d+c,//6 6
a+b+c,//7 7
a+b+c+d+e+f+g,//8 8
a+b+c+d+g+f,//9 9
0,//a
0,//b
0,//c
0,//d
0,//e
0,//0x0f
0,//10
0,//11
0,//12
0,//13
0,//14
0,//15
0,//16
0,//17
0,//18
0,//19
0,//1a
0,//1b
0,//1c
0,//1d
0,//1e
0,//1f
0,//20 ' '空格
0,//21
0,//22
0,//23
0,//24
0,//25
0,//26
0,//27 `
0,//28 (
0,//29 )
0,//2a *
0,//2b +
0,//2c ,
g,//2d -
h,//2e .
0,//2f /
a+b+c+d+e+f+h,//30 0.
b+c+h,//31 1.
a+b+g+e+d+h,//32 2.
a+b+g+c+d+h,//33 3.
f+g+b+c+h,//34 4.
a+f+g+c+d+h,//35 5.
a+f+g+e+d+c+h,//36 6.
a+b+c+h,//37 7.
a+b+c+d+e+f+g+h,//38 8.
a+b+c+d+g+f+h,//39 9.
0,//3a
0,//3b
0,//3c
0,//3d
0,//3e
0,//3f
0,//40
a+b+c+e+f+g,//41 A
0,//42 B
a+d+e+f,//43 C
0,//44 D
a+d+e+f+g,//45 E
a+e+f+g,//46 F
a+b+c+d+f+g,//47 G
b+c+e+f+g,//48 H
0,//49 I
0,//4a J
0,//4b K
d+e+f,//4c L
a+c+e,//4d M
0,//4e N
a+b+c+d+e+f,//4f O
a+b+e+f+g,//50 P
0,//51 Q
0,//52 R
a+c+d+f+g,//53 S
0,//54 T
b+c+d+e+f,//55 U
0,//56 V
0,//57 W
0,//58 X
0,//59 Y
a+b+g+e+d,//5a Z
0,//5b
0,//5c
0,//5d
0,//5e
0,//5f
0,//60
0,//61 a
c+d+e+f+g,//62 b
0,//63 c
b+c+d+e+g,//64 d
0,//65 e
0,//66 f
0,//67 g
e+c+f+g,//68 h
c,//69 i
0,//6a j
0,//6b k
0,//6c l
0,//6d m
c+e+g,//6e n
c+d+e+g,//6f o
0,//70 p
0,//71 q
e+g,//72 r
0,//73 s
d+e+f+g,//74 t
c+d+e,//75 u
b+c+d+e,//76 v
0,//77 w
0,//78 x
0,//79 y
0,//7a z
d+e+f+g+h,//t.
0,//7c
0,//7d
0,//7e
0,//7f----十进制127
};
//定义液晶数码管地址
#define ADDR_SMG1 0x00
#define ADDR_SMG2 0x02
#define ADDR_SMG3 0x04
#define ADDR_SMG4 0x06
#define ADDR_SMG5 0x08
#define ADDR_SMG6 0x0a
//定义HT1621的命令
#define ComMode 0x29 //4COM,1/3bias 1000 010 1001 0
#define LCD_on 0x03 //打开LCD 偏压发生器1000 0000 0 11 0
#define LCD_off 0x02 //关闭LCD显示
#define Sys_en 0x01 //系统振荡器开 1000 0000 0010
#define RC 0x18 //片上晶振
#define Ctrl_cmd 0x80 //写控制命令
#define Data_cmd 0xa0 //写数据命令
void nop(void)//延时1us
{}
void delayus(uchar i) //延时i us
{while(i--);}
void delayms(uint m) //延时m ms
{
uint i,j;
for(i=0;i<m;i++)
for(j=0;j<65;j++)
delayus(1);
}
//写命令
void LcdWriteCommand(char dat_)
{
unsigned char temp;
delayms(200); //ID=100
Lcs=0;
Ldata=1;
Lwr=0;
nop();
Lwr=1;
nop();
Ldata=0;
Lwr=0;
nop();
Lwr=1;
nop();
Ldata=0;
nop();
Lwr=0;
nop();
Lwr=1;
for (temp=0;temp<9;temp++)
{
dat_= dat_<< 1;
Ldata= CY;
Lwr=0;
nop();
Lwr=1;
nop();
}
Lcs=1;
}
//写数据
void LcdWriteData(unsigned char add_, unsigned char da_)
{
unsigned char temp,num;
Lcs=0;
Ldata=1; //ID=101
Lwr=0;
nop();
Lwr=1;
nop();
Ldata=0;
Lwr=0;
nop();
Lwr=1;
nop();
Ldata=1;
Lwr=0;
nop();
Lwr=1;
nop();
add_=add_<<2;//取8位的后6位
for (temp=0;temp<6;temp++)
{
add_=add_<<1;
Ldata=CY;
Lwr=0;
nop();
Lwr=1;
nop();
}
for (num=0;num<8;num++)
{
da_ = da_<< 1;
Ldata= CY;
Lwr=0;
nop();
Lwr=1;
nop();
}
Lcs=1;
}
//清屏消隐
void LcdClr(void)
{
unsigned char temp;
Lcs=0;
Ldata=1; //ID=101
Lwr=0;
nop();
Lwr=1;
nop();
Ldata=0;
Lwr=0;
nop();
Lwr=1;
nop();
Ldata=1;
Lwr=0;
nop();
Lwr=1;
nop();
for (temp=0;temp<200;temp++)
{
Ldata=0;
Lwr=0;
nop();
Lwr=1;
nop();
}
Lcs=1;
}
//LCD初始化
void InitLcd(void)
{
delayms(20);
LcdWriteCommand(ComMode); //开系统晶振
LcdWriteCommand(Sys_en); //开LCD
LcdWriteCommand(LCD_on); //...1/3 BIAS
LcdWriteCommand(RC);
LcdClr(); //清屏消隐
delayms(20);
}
//================================LCD显示重量结果=============================
void DispResult(unsigned long data1)
{
unsigned char i;
// bit ZeroFlag;
display_buffer[0] = data1 / 100000;
display_buffer[1] = data1 % 100000 / 10000;
display_buffer[2] = data1 % 10000 / 1000;
display_buffer[3] = data1 % 1000 / 100;
display_buffer[4] = data1 % 100 / 10;
display_buffer[5] = data1 % 10;
for(i=0;i<6;i++)
{
LcdWriteData(i*2,seg[display_buffer[i]]);
}
}
//=================================全显示===================================
void LcdAllOn(void)
{
uchar data z;
uchar addr=0;
for(z=0;z<17;z++)
{
LcdWriteData(addr,0xFF);
addr++;
}
delayms(1000);
}
//==============================开机自检程序================================
void OnCheck(void)
{
uchar i;
uchar j;
for(i=9;i!=-1;i--)
{
for(j=0;j<12;j+=2)
{
LcdWriteData(j,seg[i]);
}
// Beep(2);
delayms(130);
}
}
//===============================符号单位===============================
void ShowBattery()
{LcdWriteData(11,8);}
void ShowHi()
{LcdWriteData(11,4);}
void ShowOk()
{LcdWriteData(11,2);}
void ShowLo()
{LcdWriteData(11,1);}
//=================================
void ShowStab()
{LcdWriteData(12,8);}
void ShowM()
{LcdWriteData(16,8);}
void ShowFS()
{LcdWriteData(12,4);}
void ShowNet()
{LcdWriteData(12,2);}
void ShowZero()
{LcdWriteData(12,1);}
//=================================
void ShowGross()
{LcdWriteData(13,8);}
void ShowOz()
{LcdWriteData(13,4);}
void ShowTAI()
{LcdWriteData(13,2);}
void ShowT()
{LcdWriteData(13,1);}
//==================================
void ShowPcs()
{LcdWriteData(14,8);}
void ShowJING()
{LcdWriteData(14,4);}
void ShowGANG()
{LcdWriteData(14,2);}
void ShowK()
{LcdWriteData(14,1);}
//==================================
void ShowBFH()
{LcdWriteData(15,4);}
void ShowLb()
{LcdWriteData(15,2);}
void ShowG()
{LcdWriteData(15,1);}
//==========================显示字符串函数==================================
void Disp_str(unsigned char *str)
{
unsigned char i;
for(i=0;i<6;i++)
{
if(str[i]==0)break;
LcdWriteData(i*2,seg[str[i]]);
}
}
//===============================菜单=============================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -