资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

1602显示函数C语言 c++显示函数

LCD1602用C语言编程如何显示字符?

void delay(uint z);//延时,1微妙时间有点短

十载的高邑网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整高邑建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“高邑网站设计”,“高邑网站推广”以来,每个客户项目都认真落实执行。

你看看下面我做的程序,在2051+12M晶振通过你可以套用这个程序,不行的话就改长延时

/******************AT89S51使用12M晶振*******************/

//LCD脚接法,根据实际接法定义

#define LCM_D4_RS P3_2//第4脚数据/命令

#define LCM_D5_RW P3_5//第5脚读/写

#define LCM_D6_E P3_7//第6脚使能

#define LCM_D16_BLK P3_0//背光负极

#define LCM_D7_Data P1//第7-14脚数据

//LCD脚接法,根据实际接法定义

#define Busy 0x80 //用于检测LCM状态字中的Busy标识

#define _LCD_BIT_IS 4 //CPU与LCD1602间使用DB7-DB4这4根数据线进行传输

#include at89x51.h //头文件

#include string.h //strlen()函数头文件

void LCMInit(void); //LCM初始化化

void WriteDataLCM(unsigned char WDLCM); //写数据

void WriteCommandLCM(unsigned char WCLCM,int BuysC); //写指令

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //按指定位置显示一个字符

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//按指定位置显示一串字符

void Delay5Ms(void); //5ms延时

unsigned char ReadStatusLCM(void); //读状态

unsigned char code Greetings_Line1[] = {"Welcome Control"};

unsigned char code Greetings_Line2[] = {" ChuLong Make "};

data unsigned char cou = 0; // 定义软计数器,放在程序最前面的寄存器定义部分

void main(void)

{

LCMInit(); //LCM初始化

LCM_D16_BLK = 0; //开背光灯

TMOD = 0x11; // 定时/计数器0,1工作于方式1 16位定时

TH0 = 0x3c; // 预置产生50ms时基信号

TL0 = 0xb0;

EA = 1; // 开总中断

ET0 = 1; // 定时/计数器0允许中断

TR0 = 1; // 开定时/计数器0

DisplayListChar(0, 0, Greetings_Line1);

DisplayListChar(0, 1, Greetings_Line2);

// while(1);

}

//

void LCMInit(void) //LCM初始化

{

WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号

Delay5Ms();

WriteCommandLCM(0x38,0);

Delay5Ms();

WriteCommandLCM(0x38,0);

#if(_LCD_BIT_IS == 8) //CPU与LCD1602间使用DB0-DB8这8根数据线进行传输

WriteCommandLCM(0x38,1); //显示8位模式设置,开始要求每次检测忙信号

#else //CPU与LCD1602间使用DB0-DB4这4根数据线进行传输

WriteCommandLCM(0x28,1); //显示4位模式设置,开始要求每次检测忙信号

#endif

WriteCommandLCM(0x08,1); //关闭显示

WriteCommandLCM(0x01,1); //显示清屏

WriteCommandLCM(0x06,1); // 显示光标移动设置

WriteCommandLCM(0x0C,1); // 显示开及光标设置

}

//写数据

void WriteDataLCM(unsigned char WDLCM)

{

ReadStatusLCM(); //检测忙

LCM_D4_RS = 1;

LCM_D5_RW = 0;

#if(_LCD_BIT_IS == 8) //CPU与LCD1602间使用DB0-DB8这8根数据线进行传输

{

LCM_D7_Data = WDLCM;

}

#else //CPU与LCD1602间使用DB0-DB4这4根数据线进行传输

{

LCM_D7_Data = 0x0f; //清高四位

LCM_D7_Data |= WDLCM 0xf0; //写高四位

LCM_D6_E = 0;

LCM_D6_E = 1;

WDLCM = WDLCM 4; //低四位移到高四位

LCM_D7_Data = 0x0f; //清高四位

LCM_D7_Data |= WDLCM 0xf0; //写低四位

}

#endif

LCM_D6_E = 0;

LCM_D6_E = 1;

}

//写指令

void WriteCommandLCM(unsigned char WCLCM,int BuysC) //BuysC为0时忽略忙检测

{

if(BuysC)

ReadStatusLCM(); //根据需要检测忙

LCM_D4_RS = 0;

LCM_D5_RW = 0;

#if(_LCD_BIT_IS == 8) //CPU与LCD1602间使用DB7-DB4这4根数据线进行传输

{

LCM_D7_Data = WCLCM;

}

#else

{

LCM_D7_Data = 0x0f; //清高四位

LCM_D7_Data |= WCLCM 0xf0; //写高四位

LCM_D6_E = 0;

LCM_D6_E = 1;

WCLCM = WCLCM 4; //低四位移到高四位

LCM_D7_Data = 0x0f; //清高四位

LCM_D7_Data |= WCLCM 0xf0; //写低四位

}

#endif

LCM_D6_E = 0;

LCM_D6_E = 1;

}

//读状态

unsigned char ReadStatusLCM(void)

{

LCM_D7_Data = 0xff;

LCM_D4_RS = 0;

LCM_D5_RW = 1;

LCM_D6_E = 1;

while (LCM_D7_Data Busy); //检测忙信号

return(LCM_D7_Data);

}

//按指定位置显示一个字符

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)

{

Y = 0x1;

X = 0xF; //限制X不能大于15,Y不能大于1

if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;

X |= 0x80; //算出指令码

WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码

WriteDataLCM(DData);

}

//按指定位置显示一串字符

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)

{

int ListLength;

Y = 0x1;

X = 0xF; //限制X不能大于15,Y不能大于1

for(ListLength = 0;ListLength strlen(DData);ListLength++) //若到达字串尾则退出

{

if (X = 0xF) //X坐标应小于0xF

{

DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符

X++;

}

}

}

//5ms延时

void Delay5Ms(void)

{

unsigned int TempCyc = 5552;

while(TempCyc--);

}

//10s延时

void tiem0(void) interrupt 1

{ // T/C0中断服务程序(产生50ms时基信号)

if(cou 60)

{ // 计数值到1000(1s) (****时间为倒计时****)

cou = 0; // 软计数器清零

}

cou++; // 软计数器加1

TH0 = 0x3c; // 重置定时常数

TL0 = 0xb0;

}

用C语言来编写用1602来显示的计数器

我才学C。你说的我就能帮你搞个加减乘除运算了。以下是代码。#includestdio.h

main()

{

int i=1,flag=0; float a,b,c; char v;

printf("输入数字完成运算");

scanf("%f%c%f",a,v,b);

while(v!='#')

{ switch(v)

{ case '+':c=a+b;break;

case '-':c=a-b;break;

case '*':c=a*b;break;

case '/':

if(b==0) flag=1;

else c=a/b; break;

default: flag=2;

}

if(flag==0)

{

printf("%f%c%f=%f\n",a,v,b,c);

i++;

}

if(flag==1) printf("shucuole");

if(flag==2) printf("zifucuole");

printf("jixushuchu");

scanf("%f%c%f",a,v,b);

}

}我是个新手。但可以保证代码的正确

51单片机1602怎么显示一行字符,c语言的

#define LCD1602_FLAG

#define LCD1602_PORT P0

#includereg51.h

#includestddef.h

#define uchar unsigned char

sbit lcd1602_rs=P2^0;

sbit lcd1602_e=P2^2;

sbit lcd1602_rw=P2^1;

sbit lcd1602_busy=P0^7;

uchar str[]="This is Key Test";

uchar keyval,keystr[16];

void delay(uchar a)

{

uchar i;

while(a--)for(i=0;i120;i++);

}

/*

************************************

* 函数名称:lcd1602_CheckBusy()

* 函数功能:状态查询

************************************

*/

void lcd1602_CheckBusy()

{

do

{

lcd1602_busy=1;

lcd1602_rs=0;

lcd1602_rw=1;

lcd1602_e=0;

lcd1602_e=1;

}

while(lcd1602_busy);

}

/*

***************************************

* 函数名称: lcd1602_WriteCmd()

* 函数功能:写命令

* 入口参数:命令字

* 出口参数:无

***************************************

*/

void lcd1602_WriteCmd(const uchar cmd)

{

lcd1602_CheckBusy();

lcd1602_rs=0;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=cmd;

lcd1602_e=0;

}

/*

*******************************************

* 函数名称:lcd1602_WriteData()

* 函数功能:写数据

* 入口参数:c--待写数据

* 出口参数:无

*********************************************

*/

void lcd1602_WriteData(const uchar c)

{

lcd1602_CheckBusy();

lcd1602_rs=1;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=c;

lcd1602_e=0;

}

/*

***********************************************

* 函数名称:lcd1602_Init()

* 函数功能:初始化LCD

* 入口参数:无

* 出口参数:无

***********************************************

*/

void lcd1602_Init()

{

lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵

lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,

lcd1602_WriteCmd(0x06); //flag move to right,screen don't move

lcd1602_WriteCmd(0x01); //clear screen

}

/*

************************************************

* 函数名称:lcd1602_Display()

* 函数功能: 字符显示

* 入口参数:ptr--字符或字符串指针

* 出口参数:无

* 说    明:用户可通过以下方式来调用:

*           1)lcd1602_Display("Hello,world!");

*           2) INT8U 存储类型 txt[]="要显示的字符串";

*              或者 INT8U 存储类型 txt[]={'t','x','t',..,'\0'};

*              INT8U *ptr;

*              ptr=txt;

*              lcd1602_Display(ptr);

*              或 lcd1602_Display(txt);

*              或 lcd1602_Display(txt);

************************************************

*/

void lcd1602_Display(const uchar *ptr,uchar line)

{

uchar data i=0;

uchar *data q;

q=ptr;

switch(line)

{

case 0:

lcd1602_WriteCmd(0x80);

while(q!=NULL  (*q!='\0')  i16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

case 1:

lcd1602_WriteCmd(0xc0);

while(q!=NULL  (*q!='\0')  i16)

{

lcd1602_WriteData(*q);

q++;

i++;

}

break;

}

}

uchar kbscan(void)

{

unsigned char sccode,recode;

P3=0x0f;  //发0扫描,列线输入

if ((P3  0x0f) != 0x0f)  //有键按下

{

delay(20);   //延时去抖动

if ((P30x0f)!= 0x0f)

{

sccode = 0xef;    //逐行扫描初值

while((sccode0x01)!=0)

{

P3=sccode;

if((P30x0f)!=0x0f)

{

recode=(P30x0f)|0xf0;

while((P30x0f)!=0x0f);//等待键抬起

return((~sccode)+(~recode));

 }

else

sccode=(sccode1)|0x01;

}

}

}

return 0;  //无键按下,返回0

}

uchar getkey(void)

{

uchar key;

key=kbscan();

if(key==0){keyval=0xff;return(0);}

switch(key)

{

case 0x11:keyval=7;break;

case 0x12:keyval=4;break;

case 0x14:keyval=1;break;

case 0x18:keyval=10;break;

case 0x21:keyval=8;break;

case 0x22:keyval=5;break;

case 0x24:keyval=2;break;

case 0x28:keyval=0;break;

case 0x41:keyval=9;break;

case 0x42:keyval=6;break;

case 0x44:keyval=3;break;

case 0x48:keyval=11;break;

case 0x81:keyval=12;break;

case 0x82:keyval=13;break;

case 0x84:keyval=14;break;

case 0x88:keyval=15;break;

default:keyval=0xff;break;

}

if(keyval!=0xff)return(1);

else return(0);

}

main()

{

uchar num;

lcd1602_Init();

lcd1602_Display(str,0);

while(1)

{

if(getkey())

{

keystr[num]=keyval+0x30;

lcd1602_Display(keystr,1);

num++;

num%=16;

}

}

}

51单片机c语言 液晶显示1602怎么显示一个动态的数据?

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。

写一个函数把整型数据每位提取出来,就可以显示每位数据了。

void display_tem(x,y,int getdata) //getdata就是你采集来的数据吧~~ 

{

display_char(x,y,getdata/10);//我不知道你的温度是几位的整数~ 这里我

                        //假设是两位

                       //display_char用你自己的字符显示函数替代  

display_char(x+1,y,getdata%10);

}


分享题目:1602显示函数C语言 c++显示函数
网页路径:http://cdkjz.cn/article/ddieocc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220