单片机c语言1602怎么接线,LCD1602显示温度接线图的单片机程序

/*******************************************************************************

*

*                                        普中科技

--------------------------------------------------------------------------------

* 实 验 名                 : 18B20温度显示试验

* 实验说明       : LCD1602显示温度值。

* 连接方式       : 见连接图

* 注    意                 :

*******************************************************************************/

#include

#include"lcd.h"

#include"temp.h"

#include"XPT2046.h"

void LcdDisplay(int);

typedef unsigned int u16;

typedef unsigned char u8;

sbit MOTOA = P1^0;

sbit MOTOB = P1^1;

sbit MOTOC = P1^2;

sbit MOTOD = P1^3;

#define SPEED1 200

#define SPEED2 250

#define SPEED3 400

#define GPIO_KEY P3

u8 KeyValue;

void delay(u16 i)

{

while(i--);

}

void KeyDown(void)

{

char a=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!=0x0f)//读取按键是否按下

{

delay(1000);//延时10ms进行消抖

if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

{

//测试列

GPIO_KEY=0X0F;

switch(GPIO_KEY)

{

case(0X07):        KeyValue=0;break;

case(0X0b):        KeyValue=1;break;

case(0X0d): KeyValue=2;break;

case(0X0e):        KeyValue=3;break;

}

//测试行

GPIO_KEY=0XF0;

switch(GPIO_KEY)

{

case(0X70):        KeyValue=KeyValue;break;

case(0Xb0):        KeyValue=KeyValue+4;break;

case(0Xd0): KeyValue=KeyValue+8;break;

case(0Xe0):        KeyValue=KeyValue+12;break;

}

while((a<50)&&(GPIO_KEY!=0xf0))         //检测按键松手检测

{

delay(1000);

a++;

}

}

}

}

/*******************************************************************************

* 函数名         :datapros()

* 函数功能                 :数据处理函数

* 输入           : 无

* 输出                  : 无

*******************************************************************************/

void datapros(int mmm)

{

unsigned char disp[] = {0, 0, 0, 0 }; //定义数组

static u8 i;

/*        if(i==50)

{

i=0;

mmm = Read_AD_Data(0x94);                //   AIN0 电位器

}

i++;  */

disp[0]=mmm/1000;//千位

disp[1]=mmm%1000/100;//百位

disp[2]=mmm%1000%100/10;//个位

disp[3]=mmm%1000%100%10;

LcdWriteCom(0x82);        //

LcdWriteData('0'+disp[0]);

LcdWriteCom(0x83);        //

LcdWriteData('0'+disp[1]);

LcdWriteCom(0x84);        //

LcdWriteData('0'+disp[2]);

LcdWriteCom(0x85);        //

LcdWriteData('0'+disp[3]);

}

/*******************************************************************************

* 函数名         : main

* 函数功能                   : 主函数

* 输入           : 无

* 输出                  : 无

*******************************************************************************/

void main()

{

LcdInit();        //初始化LCD1602

P1=0X00;

while(1)

{

KeyDown();                   //按键判断函数

while( KeyValue==0 )

{

MOTOA = 1;

MOTOB = 0;

MOTOC = 1;

MOTOD = 1;

delay(SPEED1);

MOTOA = 1;

MOTOB = 1;

MOTOC = 1;

MOTOD = 0;

delay(SPEED1);

MOTOA = 0;

MOTOB = 1;

MOTOC = 1;

MOTOD = 1;

delay(SPEED1);

MOTOA = 1;

MOTOB = 1;

MOTOC = 0;

MOTOD = 1;

delay(SPEED1);

break;

}

while( KeyValue==1 )

{

MOTOA = 1;

MOTOB = 0;

MOTOC = 1;

MOTOD = 1;

delay(SPEED2);

MOTOA = 1;

MOTOB = 1;

MOTOC = 1;

MOTOD = 0;

delay(SPEED2);

MOTOA = 0;

MOTOB = 1;

MOTOC = 1;

MOTOD = 1;

delay(SPEED2);

MOTOA = 1;

MOTOB = 1;

MOTOC = 0;

MOTOD = 1;

delay(SPEED2);

break;

}

while( KeyValue==2 )

{

MOTOA = 1;

MOTOB = 0;

MOTOC = 1;

MOTOD = 1;

delay(SPEED3);

MOTOA = 1;

MOTOB = 1;

MOTOC = 1;

MOTOD = 0;

delay(SPEED3);

MOTOA = 0;

MOTOB = 1;

MOTOC = 1;

MOTOD = 1;

delay(SPEED3);

MOTOA = 1;

MOTOB = 1;

MOTOC = 0;

MOTOD = 1;

delay(SPEED3);

break;

}

while(KeyValue==3)

{

P1=0X00;

break;

}

while(KeyValue==4)

{

LcdWriteCom(0x88);        //写地址 80表示初始地址

LcdWriteData('C');

LcdDisplay(Ds18b20ReadTemp());

break;

}

while(KeyValue==5)

{

LcdWriteCom(0x01);

break;

}

while(KeyValue==6)

{

LcdWriteCom(0x01);

datapros(Read_AD_Data(0x94));

break;

}

}

}

/*******************************************************************************

* 函数名         : LcdDisplay()

* 函数功能                   : LCD显示读取到的温度

* 输入           : v

* 输出                  : 无

*******************************************************************************/

void LcdDisplay(int temp)          //lcd显示

{

unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组

float tp;

if(temp< 0)                                //当温度值为负数

{

LcdWriteCom(0x80);                //写地址 80表示初始地址

LcdWriteData('-');                  //显示负

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码

temp=temp-1;

temp=~temp;

tp=temp;

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算由?.5,还是在小数点后面。

}

else

{

LcdWriteCom(0x80);                //写地址 80表示初始地址

LcdWriteData('+');                 //显示正

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量

//如果温度是正的那么,那么正数的原码就是补码它本身

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算加上0.5,还是在小数点后面。

}

datas[0] = temp / 10000;

datas[1] = temp % 10000 / 1000;

datas[2] = temp % 1000 / 100;

datas[3] = temp % 100 / 10;

datas[4] = temp % 10;

LcdWriteCom(0x82);                  //写地址 80表示初始地址

LcdWriteData('0'+datas[0]); //百位

LcdWriteCom(0x83);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[1]); //十位

LcdWriteCom(0x84);                //写地址 80表示初始地址

LcdWriteData('0'+datas[2]); //个位

LcdWriteCom(0x85);                //写地址 80表示初始地址

LcdWriteData('.');                 //显示 ‘.’

LcdWriteCom(0x86);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[3]); //显示小数点

LcdWriteCom(0x87);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[4]); //显示小数点

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值