📄 lcd3310.c
字号:
//定义液晶数据信号
sbit SCLK = P1^4; //时钟
sbit SDIN = P1^3; //数据
sbit D_C = P1^2; //1写数据,0写指令
sbit SCE = P1^1; //片选
sbit RES = P1^0; //0复位
void Init_Lcm(void); //LCM初始化
void yuyin(uchar); //语音
void Lcm_Writebyte(uchar,uchar); //写一字节
void WriterDOT_M_N(uchar,uint,uchar,uchar,uchar,uchar); //写骰子数据
void DeleteDOT_M_N(uchar,uchar,uchar,uchar); //清除骰子显示数据
void shz_xzh(uchar,uchar); //两骰子全屏旋转
void Lcm_Clr(void); //清全屏
//LCM初始化
void Init_Lcm(void)
{
RES=0; //0复位
_delay_ms(50);
RES=1;
SCE=0; //使能LCD
Lcm_Writebyte(0x21,0); //初始化Lcd,功能设定使用扩充指令
Lcm_Writebyte(0xC8,0); //设定液晶偏置电压(高--低)
Lcm_Writebyte(0x06,0); //设定温度系数
Lcm_Writebyte(0x15,0); //1:24,设置屏幕亮度
Lcm_Writebyte(0xD0,0); //设定Vop,设置屏幕亮度
Lcm_Writebyte(0x20,0); //使用基本指令
Lcm_Writebyte(0x0C,0); //设定显示模式,正常显示
}
//写一字节 mod=0,命令模式
void Lcm_Writebyte(uchar datatemp,uchar mod)
{
uchar i=8;
D_C=mod;
while(i--)
{
SDIN=datatemp&0x80;
SCLK=0;
SCLK=1;
datatemp<<=1;
}
}
/************************************************
写数据
n=数据偏移量,dot_y=行地址,dot_x=列地址,fan=0时取反
*************************************************/
void WriterDOT_M_N(uchar fan,uint n,uchar dot_y,uchar dot_x,uchar M,uchar N)
{
uchar i,j,k=0,ramtemp;
for(i=0;i<M;i++) //输出M行
{
Lcm_Writebyte(((i+dot_y)|0x40),0);
Lcm_Writebyte((dot_x|0x80),0);
for(j=0;j<N;j++) //输出N列
{
ramtemp=BMP_Bytes[j+k*N+n];
if(fan)
ramtemp=~ramtemp;
Lcm_Writebyte(ramtemp,1);
}
k++;
}
}
/**********************************************
清除显示数据
n=数据偏移量,dot_y=页地址,dot_x=列地址
***********************************************/
void DeleteDOT_M_N(uchar dot_y,uchar dot_x,uchar M,uchar N)
{
uchar i,j;
for(i=0;i<M;i++) //输出M页
{
Lcm_Writebyte(((i+dot_y)|0x40),0);
Lcm_Writebyte((dot_x|0x80),0);
for(j=0;j<N;j++) //输出N个字节
{
Lcm_Writebyte(0,1);
}
}
}
/*********************************************
两骰子全屏旋转
i,j分别为两骰子显示点数
**********************************************/
void shz_xzh(uchar h,uchar g)
{
uchar i;
for(i=8;i<46;i+=37)
{
WriterDOT_M_N(0,h*90,0,i,3,30); //1:第0行右移,2:第3行左移
WriterDOT_M_N(0,g*90,3,(53-i),3,30);
_delay_ms(650);
DeleteDOT_M_N(0,i,3,30);
DeleteDOT_M_N(3,(53-i),3,30);
}
WriterDOT_M_N(0,h*90,2,53,3,30); //1:第53列下移,2:第0列上移
WriterDOT_M_N(0,g*90,2,0,3,30);
_delay_ms(650);
DeleteDOT_M_N(2,53,3,30);
DeleteDOT_M_N(2,0,3,30);
for(i=8;i<46;i+=37)
{
WriterDOT_M_N(0,h*90,3,(53-i),3,30); //1:第3行左移,2:第0行右移
WriterDOT_M_N(0,g*90,0,i,3,30);
_delay_ms(650);
DeleteDOT_M_N(3,(53-i),3,30);
DeleteDOT_M_N(0,i,3,30);
}
WriterDOT_M_N(0,h*90,2,0,3,30); //1:第0列上移,2:第53列下移
WriterDOT_M_N(0,g*90,2,53,3,30);
_delay_ms(650);
DeleteDOT_M_N(2,0,3,30);
DeleteDOT_M_N(2,53,3,30);
}
//清全屏
void Lcm_Clr(void)
{
uchar m,n;
Lcm_Writebyte(0x40,0);
Lcm_Writebyte(0x80,0);
for(m=0;m<6;m++)
{
for(n=0;n<84;n++)
{
Lcm_Writebyte(0,1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -