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++显示函数
转载注明:https://www.cdcxhl.com/article22/ddieocc.html

成都网站建设公司_创新互联,为您提供移动网站建设动态网站品牌网站设计电子商务网站策划用户体验

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设