#include <reg52.h>
#include "LCD12864.h"
#include "ZK.h"
//#include "DS1302.h"
#include "Time.h"
#include "DS18B20.h"
#include "Button.h"
#define uchar unsigned char
#define uint unsigned int
#define DataBus P0 //8位数据传输口
sbit RS=P2^2; //数据/命令选择端
sbit RW=P2^1; //读写命令选择端
sbit EN=P2^0; //使能端
sbit CS1=P2^4; //片选端 控制左半屏
sbit CS2=P2^3; //片选端 控制右半屏
void delay1ms(uint t);
void Select_Scr(uchar tt);
void Write_cmd(uchar tmp);
void Write_data(uchar tmp);
void Set_Page(uchar p);
void Set_Column(uchar c);
void Set_Line(uchar l);
void Clear_Scr(uchar t);
void Init_Lcd();
void DisplayHZ(uchar scr, uchar page, uchar column, uchar * p);
void DisplayZF(uchar screen, uchar page, uchar column, uchar *p);
void DisYear(uint y);
void Print(uchar s, uchar l, uchar c, uint tmp);
/*1ms延时*/
void delay1ms(uint t)
{
uchar i;
while (t--)
for (i=0; i<115; i++);
}
/*写命令*/
void Write_cmd(uchar tmp)
{
RS = 0; //选择命令
RW = 0; //读操作
DataBus = tmp; //放数据到数据传输口
EN = 1; //开始读取
delay1ms(1);
EN = 0;
}
/*写数据*/
void Write_data(uchar tmp)
{
RS = 1; //选择数据
RW = 0;
DataBus = tmp;
EN = 1;
delay1ms(1);
EN = 0;
}
/*设置 "页"*/
void Set_Page(uchar p) //设置“页”LCD12864共8页,一页是8行点阵点
{
p = 0xb8 | p; //页的首地址为0xB8
Write_cmd(p);
}
/*设置 "行"*/
void Set_Line(uchar l)
{
l = 0xC0 | l; //起始行地址为0xC0
Write_cmd(l); //设置从哪行开始:共0--63;一般从0 行开始显示
}
/*设置 "列"*/
void Set_Column(uchar c)
{
c = c & 0x3f; //列的最大值为64
c = 0x40 | c; //列的首地址为0x40
Write_cmd(c); //设置列的位置
}
/*选择显示屏幕*/
void Select_Scr(uchar tt) //选择屏幕
{
switch(tt) {
case 0: CS1 = 0; CS2 = 0; break; //全屏
case 1: CS1 = 0; CS2 = 1; break; //左半屏
case 2: CS1 = 1; CS2 = 0; break; //右半屏
default : break;
}
}
/*清屏函数*/
void Clear_Scr(uchar t)
{
uchar i,j;
Select_Scr(t); //0--全屏;1---左半屏;2---右半屏
for(i=0; i<8; i++) { //控制页数0-7,共8页
Set_Page(i);
Set_Column(0);
for(j=0; j<64; j++) //控制列数0-63,共64列
Write_data(0x00); //写入0,地址指针自加1
}
}
/*初始化设置*/
void Init_Lcd() //LCD的初始化
{
Write_cmd(0x3f);
Select_Scr(0);
Clear_Scr(0); //清屏
Set_Line(0); //开始行:0
}
/*输出字符函数*/ /*scr:开始显示 page: 页数 column:列数 p: 需要输出的字符*/
void DisplayZF(uchar screen, uchar page, uchar column, uchar *p)
{
uchar i;
Select_Scr(screen);
Set_Page(page); //写上半页:8*8
Set_Column(column); //控制列
for(i=0; i<8; i++) { //
Write_data(p[i]); //显示字符的上半部分8x8
}
Set_Page(page+1); //写下半页:16*8
Set_Column(column); //控制列
for(i=0; i<8; i++) { //
Write_data(p[i+8]); //显示字符的下半部分8x8
}
}
/*输出汉字函数*/ /*scr:开始显示 page: 页数 column:列数 p: 需要输出的汉字*/
void DisplayHZ(uchar screen, uchar page, uchar column, uchar *p)
{
uchar i;
Select_Scr(screen);
Set_Page(page); //写上半页:16*8
Set_Column(column*16); //控制列
for(i=0; i<16; i++) { //控制16列的数据输出
Write_data(p[i]); //汉字的上半部分
//delay1ms(30);
}
Set_Page(page+1); //写下半页:16*8
Set_Column(column*16); //控制列
for(i=0; i<16; i++) { //控制16列的数据输出
Write_data(p[i+16]); //汉字的下半部分
//delay1ms(30);
}
}
/*初始化屏幕界面*/
void Display_Lcd()
{
Init_Lcd();
Clear_Scr(0); //清屏
Set_Line(0); //显示开始行
/*年月日*/
DisplayHZ(1, 0, 0, Sanjiao);
/*年份*/
// DisplayZF(1, 0, 16, S2);
// DisplayZF(1, 0, 24, S0);
// DisplayZF(1, 0, 32, S1);
// DisplayZF(1, 0, 40, S2);
DisplayHZ(1, 0, 3, Year);
/*月份*/
// DisplayZF(2, 0, 0, S0);
// DisplayZF(2, 0, 8, S6);
DisplayHZ(2, 0, 1, Month);
/*日*/
// DisplayZF(2, 0, 32, S0);
// DisplayZF(2, 0, 40, S8);
DisplayHZ(2, 0, 3, Day);
/*星期*/
DisplayHZ(1, 2, 0, Jiantou1);
DisplayHZ(1, 2, 2, Xin);
DisplayHZ(1, 2, 3, Qi);
// DisplayHZ(2, 2, 0, Fir);
DisplayHZ(2, 2, 2, Jiantou2);
DisplayHZ(2, 2, 3, XinHao);
/*时间*/
DisplayHZ(1, 4, 0, Zuokuo);
//小时
// DisplayZF(1, 4, 16, S1);
// DisplayZF(1, 4, 24, S6);
DisplayZF(1, 4, 40, Maoh);
//分钟
// DisplayZF(1, 4, 56, S2);
// DisplayZF(2, 4, 0, S5);
DisplayZF(2, 4, 16, Maoh);
//秒
// DisplayZF(2, 4, 32, S2);
// DisplayZF(2, 4, 40, S8);
DisplayHZ(2, 4, 3, Youkuo);
/*温度*/
DisplayHZ(1, 6, 0, Dang);
DisplayHZ(1, 6, 1, Qian);
DisplayHZ(1, 6, 2, Wen);
DisplayHZ(1, 6, 3, Du);
DisplayZF(2, 6, 0, Maoh);
DisplayZF(2, 6, 8, Jia); // +/- 号
DisplayZF(2, 6, 16, S0); //十位
DisplayZF(2, 6, 24, S0); //个位
DisplayZF(2, 6, 32, Dian); // .
DisplayZF(2, 6, 40, S0); //小数位
DisplayZF(2, 6, 48, Ju);
DisplayZF(2, 6, 56, C);
}
/*反白显示字符*/ /*scr:开始显示 page: 页数 column:列数 p: 需要输出的字符*/
void DisFanbai_ZF(uchar screen, uchar page, uchar column, uchar *p)
{
uchar i;
Select_Scr(screen);
Set_Page(page); //写上半页:8*8
Set_Column(column); //控制列
for(i=0; i<8; i++) { //
Write_data(~p[i]); //显示字符的上半部分8x8
}
Set_Page(page+1); //写下半页:16*8
Set_Column(column); //控制列
for(i=0; i<8; i++) { //
Write_data(~p[i+8]); //显示字符的下半部分8x8
}
}
/*反白显示汉字*/ /*scr:开始显示 page: 页数 column:列数 p: 需要输出的字符*/
void DisFanbai_HZ(uchar screen, uchar page, uchar column, uchar *p)
{
uchar i;
Select_Scr(screen);
Set_Page(page); //写上半页:16*8
Set_Column(column*16); //控制列
for(i=0; i<16; i++) { //控制16列的数据输出
Write_data(~p[i]); //汉字的上半部分
//delay1ms(30);
}
Set_Page(page+1); //写下半页:16*8
Set_Column(column*16); //控制列
for(i=0; i<16; i++) { //控制16列的数据输出
Write_data(~p[i+16]); //汉字的下半部分
//delay1ms(30);
}
}
/*********************以下为日期的输出**********************/
/*输出年份*/ /*DS1302年份输出接口*/
/*DS1302传递过来的是有2位*/
//void DisYear(uint y)
//{
// Print(1, 0, 32, y);
//}
/*年份为4位的输出函数*/
void DisYear(uint y)
{
uint i, j;
i = y / 100; //20
Print(1, 0, 16, i);
j = y % 100; //12
Print(1, 0, 32, j);
}
/*输出月份*/
void DisMonth(uchar m)
{
Print(2, 0, 0, m);
}
/*输出日数*/
void DisDay(uchar d)
{
Print(2, 0, 32, d);
}
/*输出小时*/
void DisHour(uchar h)
{
Print(1, 4, 16, h);
}
/*输出分钟*/
void DisMin(uchar min)
{
Print(1, 4, 56, min);
}
/*输出秒*/
void Di
基于51单片机-温度监控系统
4星 · 超过85%的资源 需积分: 50 35 浏览量
2013-09-17
10:33:47
上传
评论 9
收藏 67KB RAR 举报
Emdfans
- 粉丝: 80
- 资源: 11
最新资源
- 安卓11.0以上版本支持 手指单个手指双手指操作
- 电子密码锁使用说明(1).doc
- 上位机开发罗克韦尔abcip通信协议详解
- 基于去中心化联邦学习的货运速度预测时空模型-A decentralized federated learning-based s
- 适合新手的 OpenAI Sora 详细使用教程
- 驱动总裁离线安装包01
- NT98336 SDK 114版本
- torch-1.8.1+cu111-cp38-cp38-linux-x86-64.whl +torchvision
- 智能提取字幕-intel
- 计算机设计 - VB+ACCESS网络计时管理系统设计(源代码+系统),保证可靠运行,毕业生可参考,免费资源下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈