您的位置 首页 FPGA

12232c液晶显示和8051单片机的接口c言语程序

以下为彭总编写的c语言程序,我用过了!赫赫!!在atmega128中写通讯协议的头四位数字时好像不能分开一位一位的送,而是要把它当作一个16进…

以下为彭总编写的c言语程序,我用过了!赫赫!!在atmega128中写通讯协议的头四位数字时如同不能分隔一位一位的送,而是要把它当作一个16进制的全体移位写入!程序中的comm为写0表明写12232c的指令,dat为1表明写数据。cs,sclk,std分别为片选、时钟、及数据io口,可用sbit指令界说。

/************lcd初始化程序**************/
void init_lcd (void)
{
wr_lcd (comm,0x30); /*30—根本指令集动作,8位操控接口*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
delay (80);
wr_lcd (comm,0x06); /*光标的移动方向,光标右移*/
wr_lcd (comm,0x0c); /*开显现,关光标*/
}

/******************LCD显现恣意量程序********************/
void eng_disp (uchar x,uchar y,uchar code *eng)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80); /*榜首行的开端地址*/
for(j=0;j {
for (i=0;i wr_lcd (dat,eng[j*16+i]);
if((y==2)&&(j==1))
{wr_lcd (comm,0x90);
for (i=0;i<8;i++)
wr_lcd (dat,eng[j*16+i]);
}
}
}

/*********************LCD显现中文(欢迎界面)程序******************/

void chn_disp (uchar code *chn) /*lcd显现中文*/
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80); /*榜首行的开端地址*/
j=0;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
wr_lcd (comm,0x90); //第二行的开端地址
j=1;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}

/***************************LCD清内存程序*******************/
void clrram (void) //lcd清内存
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay (120);
}

/*************LCD写数据或写指令子程序****************/

void wr_lcd (uchar dat_comm,uchar content) /*lcd写数据*/
{
uchar a,i,j;
delay (40);
a=content; //a为指令代码或许数据
cs=1; //置位cs开端传输数据
sclk=0; //拉低sclk预备给上升沿,发送数据
std=1; //置1
for(i=0;i<5;i++) /*先传输开端字节,首要5个1,sclk的上升沿传输发动*/
{
sclk=1;
sclk=0;
}
std=0; //RW=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1; //如果是数据则RS为1
else
std=0; //如果是操控字则RS为0
sclk=1; //给上升沿,发动传输
sclk=0; //拉低sclk
std=0; //第8位为0,开端字节传输结束
sclk=1; //给上升沿,发动传输
sclk=0;
for(j=0;j<2;j++) //一个字节分两次发送,榜首次发送高四位,后边补4个0,第2次发送低4位,后边相同补4个0
{
for(i=0;i<4;i++) //先传输高4位
{
a=a<<1; //数据循环左移一位,低位补0
std=CY; //把进位进行传输
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++) //后4位数据为4个0
{
sclk=1;
sclk=0;
}
}
}

/**********************LCD延时程序************************************/
void delay (uint us) //lcd延时时刻
{
while(us–);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;i for(j=0;j<15;j++)
delay(1);
}
/*********************显现数据位子程序*******************/

void math_disp(uint math)
{ uint k;
uchar i;
uchar j;
k=math;
dispbuf[0]=k/10000; //得到万位数
k=k%10000;
dispbuf[1]=k/1000; //得到千位数
k=k%1000;
dispbuf[2]=k/100; //得到百位数
k=k%100;
dispbuf[3]=k/10; //得到十位数
dispbuf[4]=k%10; //得到个位数
wr_lcd (comm,0x90); //给第二行的开端地址以让数据在第二行显现,
for(i=0;i<5;i++)
{
for(j=0;j<2;j++) //接连显现两个tab2中的字节,LCD主动把这两个字节联系起来显现一个数据
{
wr_lcd(dat,tab2[xs2*dispbuf[i]+j]); //调用显现子函数
}
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/275915.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部