#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^;
uint wendu;
sbit sce = P1^; //片选
sbit res = P1^; //复位,0复位
sbit dc = P1^; //1写数据,0写指令
sbit sdin = P1^; //数据
sbit sclk = P1^; //时钟
/*------------------------------------shuzihanzi-----------------------------------*/
unsigned char code shuzi[]={
//
0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
//
0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
//
0x18,0x84,0x44,0x44,0x38,0x00,0x03,0x02,0x02,0x02,0x02,0x00,
//
0x88,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
//
0xC0,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
//
0x3C,0x14,0x14,0x14,0xE4,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
//
0xF8,0x24,0x24,0x24,0xC8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
//
0x04,0x04,0x04,0xE4,0x1C,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
//
0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
//
0x38,0x44,0x44,0x44,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
//'
0x00,0x00,0x04,0x0A,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//C
0xF8,0x04,0x04,0x04,0x98,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
//.
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
//:
0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
//T
0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00
};
unsigned char code hanzi[]={
0x22,0x44,0x00,0xC0,0x5F,0xD5,0x55,0xD5,0x5F,0xC0,0x00,0x00,0x04,
0x02,0x09,0x0F,0x08,0x0F,0x08,0x0F,0x08,0x0F,0x08,0x00,/*"温",0*/ 0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x8A,0x0A,0x00,0x08,
0x07,0x00,0x08,0x09,0x0A,0x04,0x04,0x0A,0x09,0x08,0x00,/*"度",1*/ 0x11,0x22,0x80,0x3E,0x2A,0xEA,0x2A,0xEA,0x2A,0x3E,0x80,0x00,0x04,
0x02,0x08,0x09,0x08,0x0F,0x08,0x0F,0x08,0x09,0x08,0x00,/*"湿",2*/ 0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x8A,0x0A,0x00,0x08,
0x07,0x00,0x08,0x09,0x0A,0x04,0x04,0x0A,0x09,0x08,0x00,/*"度",3*/ 0x20,0x22,0x24,0xE8,0x20,0x3F,0x20,0xE8,0x24,0x22,0x20,0x00,0x08,
0x04,0x02,0x01,0x00,0x00,0x00,0x07,0x08,0x08,0x0E,0x00,/*"光",4*/ 0xF2,0x92,0x9E,0x00,0xE0,0x2F,0x29,0xF9,0x29,0x2F,0xE0,0x00,0x08,
0x08,0x07,0x00,0x09,0x09,0x09,0x0F,0x09,0x0D,0x09,0x00,/*"强",5*/
};
/*--------------------------5110驱动------------------------------*/
/**********************延时函数************************/
void delayus(uint z) //微妙级延时
{
uint y;
for(y=z;y>;y--);
}
void delayms(uint z) //毫秒级延时
{
uint x,y;
for(y=z;y>;y--)
for(x=;x>;x--);
}
/********************写字节**************************/
void LCD_write_byte(unsigned char dt, unsigned char command) //写字节
{
unsigned char i;
sce=; //5110片选有效,允许输入数据
dc=command; //0写指令,1写数据
for(i=;i<;i++) //传送8bit数据
{
if(dt&0x80)
sdin=;
else
sdin=;
dt=dt<<;
sclk=;
sclk=;
}
dc=;
sce=; //禁止5110
sdin=;
}
/*******************初始化********************************************/
void LCD_init(void) //初始化(command=0,写指令)
{
res=;
delayms();
res=;
LCD_write_byte(0x21,);//初始化Lcd,功能设定使用扩充指令
LCD_write_byte(0xa0,);//设定液晶偏置电压(5v),5110接5V时偏置电压改为(0xa7,0),接3.3V时改为(0xc0,0)
LCD_write_byte(0x20,);//使用基本指令
LCD_write_byte(0x0C,);//设定显示模式,正常显示
}
/*********************设置初始坐标************************************/
void LCD_set_XY(unsigned char X, unsigned char Y) //设置LCD坐标,X:0-83 Y:0-5
{
LCD_write_byte(0x40 | Y, );// column //列
LCD_write_byte(0x80 | X, );// row //行
}
/**********************清屏函数***************************************/
void LCD_clear(void) //LCD清屏函数
{
unsigned char t;
unsigned char k;
LCD_set_XY(,); //设置RAM起始地址
for(t=;t<;t++)
{
for(k=;k<;k++)
{
LCD_write_byte(0x00,); //写数据
}
}
}
/****************************输入数字**************************************/
void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符,page范围为0-5,
{
unsigned char i;
LCD_set_XY(row*, page);// 列,页
for(i=; i<;i++)
{
LCD_write_byte(shuzi[c*+i],);
} LCD_set_XY(row*, page+);// 列,页
for(i=; i<;i++)
{
LCD_write_byte(shuzi[c*+i],);
}
}
/******************************输入汉字*************************************/
void LCD_write_zi(unsigned char row, unsigned char page,unsigned char c)
{
unsigned char i;
LCD_set_XY(row*, page);// 列,页
for(i=; i<;i++)
{
LCD_write_byte(hanzi[c*+i],);
} LCD_set_XY(row*, page+);// 列,页
for(i=; i<;i++)
{
LCD_write_byte(hanzi[c*+i],);
}
} /*-----------------------------------------18b20驱动--------------------------------*/
/*************精确延时函数**************** */
// 数据表如下
/*
********************************************************************************************************************
延时时间 a的值 b的值 c的值 延时误差(us)
10us 1 1 1 -0.5
20us 1 1 8 0
30us 1 1 15 +0.5
40us 2 1 9 0
50us 1 1 28 0
60us 1 1 35 +0.5
70us 1 1 42 +1
80us 1 1 48 0
90us 1 1 55 +0.5
100us 1 1 61 -0.5
200us 1 1 128 0
300us 3 1 63 +1.5
400us 2 1 129 0
500us 5 1 63 +0.5
600us 6 1 63 0
700us 7 1 63 -0.5
800us 1 3 175 +0.5
900us 9 1 63 -1.5
1ms 1 3 219 -1.5
2ms 2 3 220 +3
3ms 3 3 220 +3
Xms X 3 220 +3
(X的范围为2到255)
*/
void Delay(unsigned char a1,b1,c1)
{
unsigned char a,b,c;
for(a=;a<a1;a++)
for(b=;b<b1;b++)
for(c=;c<c1;c++);
}
/*****************DS18B20******************/
void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command
{
DQ = ; //DQ复位,不要也可行。
Delay(,,); //稍做延时 10us
DQ = ; //单片机拉低总线
Delay(,,); //600 us //精确延时,维持至少480us
//Delay(1,1,15); //20us
DQ = ; //释放总线,即拉高了总线
Delay(,,); //500us //此处延时有足够,确保能让DS18B20发出存在脉冲。
}
uchar Read_One_Byte() //读取一个字节的数据read a byte date
//读数据时,数据以字节的最低有效位先从总线移出
{
uchar i = ;
uchar dat = ;
for(i=;i>;i--)
{
DQ = ; //将总线拉低,要在1us之后释放总线
//单片机要在此下降沿后的15us内读数据才会有效。
_nop_(); //至少维持了1us,表示读时序开始
dat >>= ; //让从总线上读到的位数据,依次从高位移动到低位。
DQ = ; //释放总线,此后DS18B20会控制总线,把数据传输到总线上
Delay(,,); //延时10us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分
if(DQ) //控制器进行采样
{
dat |= 0x80; //若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0
}
Delay(,,); //20us //此延时不能少,确保读时序的长度60us。
}
return (dat);
}
void Write_One_Byte(uchar dat)
{
uchar i = ;
for(i=;i>;i--)
{
DQ = ; //拉低总线
_nop_(); //至少维持了1us,表示写时序(包括写0时序或写1时序)开始
DQ = dat&0x01; //从字节的最低位开始传输
//指令dat的最低位赋予给总线,必须在拉低总线后的15us内,
//因为15us后DS18B20会对总线采样。
Delay(,,); //必须让写时序持续至少60us
DQ = ; //写完后,必须释放总线,
dat >>= ;
Delay(,,);
}
} void Get_Tmp_dispaly() //获取温度get the wenduerature
{
uchar A1,A2,A3;
float tt;
uchar a,b;
Init_Ds18b20(); //初始化
Write_One_Byte(0xcc); //忽略ROM指令
Write_One_Byte(0x44); //温度转换指令
Init_Ds18b20(); //初始化
Write_One_Byte(0xcc); //忽略ROM指令
Write_One_Byte(0xbe); //读暂存器指令
a = Read_One_Byte(); //读取到的第一个字节为温度LSB
b = Read_One_Byte(); //读取到的第一个字节为温度MSB
wendu = b; //先把高八位有效数据赋于wendu
wendu <<= ; //把以上8位数据从wendu低八位移到高八位
wendu = wendu|a; //两字节合成一个整型变量
tt = wendu*0.0625; //得到真实十进制温度值
//因为DS18B20可以精确到0.0625度
//所以读回数据的最低位代表的是0.0625度
wendu = tt*+0.5; //放大十倍
//这样做的目的将小数点后第一位也转换为可显示数字
//同时进行一个四舍五入操作。
A1 = wendu/; //百位
A2 = wendu%/; //十位
A3 = wendu%; //个位
LCD_write_shu(,,A1); //得到十位数
LCD_write_shu(,,A2 ); //得到个位数
LCD_write_shu(,,A3); //得到个位数
}
void main()
{
unsigned char k,i;
res=;
for(k=;k<;k++);
res=;
LCD_init(); //初始化LCD模块
LCD_clear(); //清屏幕
LCD_write_shu(,,); //点
LCD_write_shu(,,);//ling
LCD_write_shu(,,); //C
//LCD_write_shu(5,0,13);
// LCD_write_zi(1,0,0); //温
//LCD_write_zi(3,0,1); //度
LCD_write_zi(,,); //wen
LCD_write_zi(,,);//度
//LCD_write_shu(5,2,13);
//LCD_write_zi(1,4,4); //guang
//LCD_write_zi(3,4,5); //qiang
LCD_write_shu(,,); //强冒
while()
{
Get_Tmp_dispaly();
}
}

51+Nokia5110的更多相关文章

  1. Spring Boot文档

    本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...

  2. 51驱动LCD12864

    LCD12864与LCD1602最大的区别在于LCD12864可以显示汉字,同时也可以拿来画图;当然,作为图形显示不推荐lcd12864,推荐NOKIA5110 12864引脚基本和1602的引脚吻合 ...

  3. 记一次jdk升级引起的 Unsupported major.minor version 51.0

    之前jdk 一直是1.6,tomcat 是6.x 版本,, 现在引入的新的jar, 出现 Caused by: java.lang.UnsupportedClassVersionError: org/ ...

  4. 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)

    建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBe ...

  5. 解决Unsupported major.minor version 51.0错误

    解决Unsupported major.minor version 51.0错误使用jdk6运行项目时发生了Unsupported major.minor version 51.0错误.经过网上搜索发 ...

  6. 51. 顺时针打印矩阵[print matrix in clockwise direction]

    [本文链接] http://www.cnblogs.com/hellogiser/p/print-matrix-in-clockwise-direction.html [题目] 输入一个矩阵,按照从外 ...

  7. Unsupported major.minor version 51.0

    org/jboss/as/domain/management/security/adduser/AddUser : Unsupported major.minor version 51. 0 已编译好 ...

  8. 云计算之路-阿里云上:10:28-10:51云盾清洗以及IP切换引发的主站访问故障

    大家好,非常抱歉!今天10:28-10:51期间由于阿里云云盾流量清洗,以及切换IP后负载均衡的带宽跑满,影响了主站的正常访问,给您造成了很大的麻烦,请您谅解! 故障的过程是这样的: 10:28,我们 ...

  9. Windows 通用应用尝试开发 “51单片机汇编”总结

    一.前言 终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=).开发从1月中旬考完试到今天,期间实习了半个月,玩了几 ...

随机推荐

  1. NodeJS什么都能做,为什么还要JAVA?

    这张图看起来简单而且很好理解,但没尝试过,会有很多疑问. SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层? 多加一层,性能怎么样? 多加一层,前端的工 ...

  2. springmvc ajax 简单例子

    1.控制器曾 @Controller public class AjaxController { @RequestMapping("/ajax") public void ajax ...

  3. 高效法则 之 你还在用这么low的方法打开软件吗?

    电脑上的诸多功能被组织成软件的形式提供给用户.聊天的有QQ/Skype,看电影的有腾讯视频/芒果TV,听音乐的有酷狗/LessDJ,做图的有PS/Sketch,写代码搞开发的各种IDE Eclipse ...

  4. C++基本变量类型

    算数类型表 类型 含义 最小存储空间 取值范围 bool 布尔型 –   char 字符型 8位 -2^7 ~ 2^7-1 wchar_t 宽字符型 16位   short 短整型 16位 -2^15 ...

  5. vue框架学习笔记1

    vue1-2:MVVM M:Model 数据模型,负责数据存储 V:View 视图,负责页面的显示 VM:View Model 负责业务处理,对数据进行加工,之后交给视图 下载地址: <!--中 ...

  6. 同源策略与CORS跨域请求

    一.同源策略 1.简介 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源 ...

  7. FileChannel与ByteBuffer的使用示例

    DirectByteBuffer直接内存的使用场景和作用 生命周期长的大对象, 减少java堆GC, 减少内存copy http://www.importnew.com/26334.html publ ...

  8. gogs迁移

    windows->linux 之前gogs放在windows server2016中,需要迁移至linux docker中. 首先拉取gogs镜像 docker pull gogs/gogs 然 ...

  9. string的各种函数(系统学习)

    1.按照面向对象的要求,可以把字符串看作一个对象,设计一个串类加以描述.但是,在一般的情况下不必建立自己的串类,c++标准 在库<string>中给出了类string,提供了丰富的串操作, ...

  10. kolla-ansible-----rally模块

    Rally简介 Rally是OpenStack社区推出开源测试工具,可用于对OpenStack各个组件进行性能测试. 通过使用Rally组件,用户可完成OpenStack云计算平台的安装部署.功能验证 ...