OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5033|回复: 14

求助,怎么用IAP15F2K61S2 与DS18B20通过ILI9325液晶显示屏显示温度

[复制链接]

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-7-15
在线时间
25 小时
发表于 2016-7-17 00:00:53 | 显示全部楼层 |阅读模式
1金钱
百度网盘:https://pan.baidu.com/s/1hsqFDnI
  求助,怎么用IAP15F2K61S2  与DS18B20通过ILI9325液晶显示屏显示温度
网盘里有LCD的操作函数
我就是不明白怎么个过程,
LCD先写命令,写数据是干什么的
如何把DS18B20的数据写到LCD里面,然后怎么让写进去的数据显示出来
1.png

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]//****************************************************************** //函数名: LCD_Init //功能: LCD初始化 //****************************************************************** void LCD_Init(void) { LCD_RST=1; delay_ms(10); LCD_RST=0; delay_ms(50); LCD_RST=1; delay_ms(10); LCD_WriteReg(0xE5,0x78F0); LCD_WriteReg(0x01,0x0100); LCD_WriteReg(0x02,0x ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-7-17 00:00:54 | 显示全部楼层
[mw_shl_code=c,true]//******************************************************************
//函数名:  LCD_Init
//功能:    LCD初始化
//******************************************************************
void LCD_Init(void)
{
        LCD_RST=1;
        delay_ms(10);
        LCD_RST=0;
        delay_ms(50);
        LCD_RST=1;
        delay_ms(10);
       
        LCD_WriteReg(0xE5,0x78F0);
        LCD_WriteReg(0x01,0x0100);
        LCD_WriteReg(0x02,0x0700);
        LCD_WriteReg(0x03,0x1030);
        LCD_WriteReg(0x04,0x0000);
        LCD_WriteReg(0x08,0x0202);  
        LCD_WriteReg(0x09,0x0000);
        LCD_WriteReg(0x0A,0x0000);
        LCD_WriteReg(0x0C,0x0000);
        LCD_WriteReg(0x0D,0x0000);
        LCD_WriteReg(0x0F,0x0000);
        //power on sequence VGHVGL
        LCD_WriteReg(0x10,0x0000);   
        LCD_WriteReg(0x11,0x0007);  
        LCD_WriteReg(0x12,0x0000);  
        LCD_WriteReg(0x13,0x0000);
        LCD_WriteReg(0x07,0x0000);
        //vgh
        LCD_WriteReg(0x10,0x1690);   
        LCD_WriteReg(0x11,0x0227);
        //delay_ms(100);
        //vregiout
        LCD_WriteReg(0x12,0x009D); //0x001b
        //delay_ms(100);
        //vom amplitude
        LCD_WriteReg(0x13,0x1900);
        //delay_ms(100);
        //vom H
        LCD_WriteReg(0x29,0x0025);
        LCD_WriteReg(0x2B,0x000D);
        //gamma
        LCD_WriteReg(0x30,0x0007);
        LCD_WriteReg(0x31,0x0303);
        LCD_WriteReg(0x32,0x0003);// 0006
        LCD_WriteReg(0x35,0x0206);
        LCD_WriteReg(0x36,0x0008);
        LCD_WriteReg(0x37,0x0406);
        LCD_WriteReg(0x38,0x0304);//0200
        LCD_WriteReg(0x39,0x0007);
        LCD_WriteReg(0x3C,0x0602);// 0504
        LCD_WriteReg(0x3D,0x0008);
        //ram
        LCD_WriteReg(0x50,0x0000);
        LCD_WriteReg(0x51,0x00EF);
        LCD_WriteReg(0x52,0x0000);
        LCD_WriteReg(0x53,0x013F);  
        LCD_WriteReg(0x60,0xA700);
        LCD_WriteReg(0x61,0x0001);
        LCD_WriteReg(0x6A,0x0000);
        //
        LCD_WriteReg(0x80,0x0000);
        LCD_WriteReg(0x81,0x0000);
        LCD_WriteReg(0x82,0x0000);
        LCD_WriteReg(0x83,0x0000);
        LCD_WriteReg(0x84,0x0000);
        LCD_WriteReg(0x85,0x0000);
        //
        LCD_WriteReg(0x90,0x0010);
        LCD_WriteReg(0x92,0x0600);
       
        LCD_WriteReg(0x07,0x0133);
        LCD_WriteReg(0x00,0x0022);//

        //设置LCD属性参数
        LCD_WriteReg(0x03,0x1038);
        LCD_WriteReg(0x60,0x2700);
        LCD_Clear(0,0,240,320,0x03e0);
        LCD_BL=1;//点亮背光         
}
//******************************************************************
//函数名:  LCD_WriteReg
//功能:    写寄存器数据
//输入参数:LCD_Reg:寄存器地址
//                        LCD_RegValue:要写入的数据
//******************************************************************
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
  LCD_WR_REG(LCD_Reg);
        LCD_WR_DATA(LCD_RegValue);
}
//******************************************************************
//函数名:  LCD_WR_REG
//功能:    向液晶屏总线写入写16位指令
//输入参数:Reg:待写入的指令值
//******************************************************************
void LCD_WR_REG(u8 Reg)         
{       
        LCD_RS=0;
        LCD_WR=0;       
        LCD_H=0;
        LCD_L=Reg;                       
        LCD_WR=1;
}
//******************************************************************
//函数名:  LCD_WR_DATA
//功能:    向液晶屏总线写入写16位数据
//输入参数:Data:待写入的数据
//******************************************************************
void LCD_WR_DATA(u16 Data)
{
        LCD.dat[0]=Data;
        LCD_RS=1;
        LCD_WR=0;
        LCD_H=LCD.tab[0];
        LCD_L=LCD.tab[1];       
        LCD_WR=1;
}[/mw_shl_code]
回复

使用道具 举报

30

主题

188

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2014-4-3
在线时间
74 小时
发表于 2016-7-17 10:52:50 | 显示全部楼层
要分析细节,需要仔细阅读1602手册
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-7-15
在线时间
25 小时
 楼主| 发表于 2016-7-17 18:38:02 | 显示全部楼层
无量寿经 发表于 2016-7-17 10:52
要分析细节,需要仔细阅读1602手册

这不是1602,是彩屏ILI9325驱动的
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-5-16
在线时间
8 小时
发表于 2016-7-24 20:24:57 | 显示全部楼层
先实现读取DS18B20的温度数据,然后再去想着把读取的数据发送到LCD上显示,分两个步骤来弄。
那个液晶的驱动程序,网上应该能下载的,你修改一下相关的参数就可以实现你需要显示的位置和数字了。
回复

使用道具 举报

5

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
780
金钱
780
注册时间
2016-5-28
在线时间
64 小时
发表于 2016-7-25 20:34:49 | 显示全部楼层
命令一般是对显示屏进行控制的,数据是要显示的内容。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-29 22:51:47 | 显示全部楼层
帮顶
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-7-30 00:15:09 | 显示全部楼层
本帖最后由 HER107 于 2016-7-30 00:49 编辑

[mw_shl_code=c,true]/*************************************************
函数名:LCD_SetWindows
功能:设置lcd显示窗口,在此区域写点数据自动换行
*************************************************/
void LCD_SetWindows(u16 xStar, u8 yStar,u16 xEnd,u8 yEnd)
{        
        LCD_WR_REG(0x52);        
        LCD_WR_DATA(xStar);
        LCD_WR_REG(0x53);               
        LCD_WR_DATA(xEnd);
        LCD_WR_REG(0x50);        
        LCD_WR_DATA(yStar);
        LCD_WR_REG(0x51);               
        LCD_WR_DATA(yEnd);

        LCD_WR_REG(0x21);        
        LCD_WR_DATA(xStar);        
        LCD_WR_REG(0x20);        
        LCD_WR_DATA(yStar);
        LCD_WR_REG(0x22);                        
}   

//显示数字/字母/汉字
//12*24 ZF_12
//24*24 ZF_24
//16*32 ZF_16
//32*32 ZF_32
u16 LCD_ZF(u8 m,u16 x,u8 y,u16 cr,u16 dat)        //显示字符函数
{
        u8 i,j,k; u16 add;
        switch(m)
                {
                case ZF_12 : LCD_SetWindows(x,y,x+11,y+23);add=x+12;
                                         LCD.dat[1]=37444+dat*ZF_12;break;
                case ZF_16 : LCD_SetWindows(x,y,x+15,y+31);add=x+16;
                                         LCD.dat[1]=37912+dat*ZF_16;break;
                case ZF_24 : LCD_SetWindows(x,y,x+23,y+23);add=x+24;
                                         LCD.dat[1]=40280+dat*ZF_24;break;
                case ZF_32 : LCD_SetWindows(x,y,x+31,y+31);add=x+32;
                                         LCD.dat[1]=38616+dat*ZF_32;break;
                default : return 0;
                }
                LCD_RS=1;
                F_CS=0;
                LCD.dat[0]=0x0315;
                FLASH_addr();        //falsh 写入地址
                LCD.dat[0]=cr;
        for(i=0;i<m;i++)
           {              k=FLASH_read();
               
                for(j=0;j<8;j++)
                        {
                        if(k&0x80){LCD_H=0;LCD_L=0;}
                        else {LCD_H=LCD.tab[0];
                                  LCD_L=LCD.tab[1];}
                        LCD_WR=0;
                        k<<=1;
                        LCD_WR=1;
                        }
                }
                SPSTAT=0xFF;
                F_CS=1;
                return add;
}
//===

u16 LCD_WS(u8 m,u16 x,u8 y,u16 cr,u16 dat,bit ch)        //输入一个数字,返回尾部横坐标
{
        u16 i;
        i=x;
        if(dat>5000)return 0;
        if(dat>999)i=LCD_ZF(m,i,y,cr,dat/1000);
        if(dat>99)i=LCD_ZF(m,i,y,cr,(dat%1000)/100);
        i=LCD_ZF(m,i,y,cr,(dat%100)/10);
        if(ch)i=LCD_ZF(m,i,y,cr,mm_dg);
        i=LCD_ZF(m,i,y,cr,dat%10);
        return i;
}
void home_wendu(u8 dat)                        //温度显示
{
        u16 i;
        if(dat>99)return;
        i=LCD_WS(ZF_12,118,28,beijing,dat,0);
        LCD_ZF(ZF_24,i,28,beijing,WZ_T);        
}[/mw_shl_code]

回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-7-30 00:18:40 | 显示全部楼层
横屏9325的代码。。。已经在设备上应用几个月了,没任何问题…… 因为涉及其他关键代码,所以我不能把完整的程序发上来!! 只能把初始化和显示数字的部分发上来!
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-7-30 00:41:26 | 显示全部楼层
[mw_shl_code=c,true]
sbit LCD_RS=P4^1;
sbit LCD_WR=P4^3;
sbit LCD_RST=P4^4;        //0
sbit LCD_BL=P0^3;        //0
sbit F_CS=P1^6;

sbit fan_sw=P6^3;        //散热风扇控制接口
sbit Hg_key=P4^5;        //水银开关
sbit OUT_key=P6^1;        //继电器

//=========================================================
#define NOP() _nop_()

#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long

#define LCD_L P2
#define LCD_H P7

#define PT_X 0x90
#define PT_Y 0xd0

#define beijing                         0xcdfd //背景颜色
#define beijing_2                 0xc618                       
//图片地址
#define PC_home                0x03000000        //主界面
#define PC_menu         0x03025800        //主菜单
#define PC_power        0x0304b000        //电源设置
#define PC_sanre        0x03070800        //散热设置
#define PC_shuchu        0x03096000        //输出设置
#define PC_tiaoshi        0x030bb800        //设备调试
#define PC_anquan        0x030e1000        //安全设置
#define PC_key                0x03106800        //键盘
#define PC_canshu        0x03133a44        //请输入
#define PC_cuowu        0x03140244        //输入错误
#define PC_tishi        0x0314ca44        //输入提示
………………………………………………

[/mw_shl_code]
回复

使用道具 举报

13

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2015-12-3
在线时间
46 小时
发表于 2016-8-5 11:57:46 | 显示全部楼层
直接用封装好的两个独立源代码,然后在主程序调用不行吗?而且LCD只是现使用的吧,问什么要用它来控制呢?
还想请教楼主一个C语言的问题,DS18B20里边如果温度是负的,值要取反加一,那个例程里边只有去反,没有加1,if(TH>7)
    {
        TH=~TH;
        TL=~TL;
        temp=0;//温度为负  
    }else temp=1;//温度为正                    
    tem=TH; //获得高八位
    tem<<=8;   
    tem+=TL;//获得低八位
        tem=(float)tem*0.625;//转换     
        if(temp)return tem; //返回温度值
        else return -tem;
这个怎么理解
学到老,活到老
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-7-15
在线时间
25 小时
 楼主| 发表于 2016-12-17 14:21:04 | 显示全部楼层
无量寿经 发表于 2016-7-17 10:52
要分析细节,需要仔细阅读1602手册

我用的是TFT彩屏,不是以前那种显示屏
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-7-15
在线时间
25 小时
 楼主| 发表于 2016-12-17 14:22:31 | 显示全部楼层
HER107 发表于 2016-7-30 00:12
[mw_shl_code=c,true]//******************************************************************
//函数名: ...

谢谢!!帮了我大忙了!原来这种底层驱动程序,在买TFT液晶屏的时候商家就已经给出了,没搞过底层的,所以对于开发者来说,只要学会调用就行了!已经可以显示温度了,谢谢!
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-7-15
在线时间
25 小时
 楼主| 发表于 2016-12-17 14:23:39 | 显示全部楼层
天际超体 发表于 2016-8-5 11:57
直接用封装好的两个独立源代码,然后在主程序调用不行吗?而且LCD只是现使用的吧,问什么要用它来控制呢?
...

他这里用的是标志位来判断正负
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-7-15
在线时间
25 小时
 楼主| 发表于 2016-12-17 14:25:37 | 显示全部楼层
天际超体 发表于 2016-8-5 11:57
直接用封装好的两个独立源代码,然后在主程序调用不行吗?而且LCD只是现使用的吧,问什么要用它来控制呢?
...

我接触单片机也没多久,以为所有的程序都要自己写,其实现在为了节省开发者的时间,缩短开发周期,已经没必要做一些重复的工作了,很多底层驱动的程序,在买的时候商家就已经给你打包好了,作为开发者只要会调试,会调用函数来实现具体功能就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-27 12:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表