⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wnl.c

📁 12864 LCD万年历芯片 驱动芯片KS0108
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
Copyright 2007 
All rights reserved.

文件名	:wnl.c
模块名称:
功能概要:KS0108驱动的12864

取代版本:0.0.1
修改人	:
完成日期:2007.07.08
升级说明:create
cpu: stc89c58  主频:11.0592Mhz
液晶型号:       生产厂家:        驱动芯片:
硬件连接:

---------------------------------------------------------------
|DB0-----P0.0 | DB4-----P0.4 | CS1-------P2.5 | DI--------P2.1 |
|DB1-----P0.1 | DB5-----P0.5 | CS2-------P2.4 | E---------P2.0 |
|DB2-----P0.2 | DB6-----P0.6 | RW--------P2.2 | Vo接10k电阻到地
|DB3-----P0.3 | DB7-----P0.7 | RST-------P2.3|			
---------------------------------------------------------------

DS18B20  DQ-----P1.4
DS1302

******************************************************************************/
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>

#define uchar unsigned char
#define uint  unsigned int
//定义通信端口
sbit DQ = P1^4;      //ds1820
sbit clock_clk = P3^5;//ds1302_clk
sbit clock_dat = P3^6;//ds1302_dat
sbit clock_rst = P3^7;//ds1302_rst
//lcd控制口
sbit cs1 = P2^5;
sbit cs2 = P2^4;
sbit rst = P2^3;
sbit rw  = P2^2;
sbit di  = P2^1;
sbit e   = P2^0;
//为了编程方便定义的位变量
sbit a0 = ACC^0;
sbit a1 = ACC^1;
sbit a2 = ACC^2;
sbit a3 = ACC^3;
sbit a4 = ACC^4;
sbit a5 = ACC^5;
sbit a6 = ACC^6;
sbit a7 = ACC^7;

unsigned char x,y;
unsigned char *p[];
bit m=1;//闪烁指示位

unsigned char rec[7];//接收控制字缓冲
unsigned char num=0;//控制字序号
//汉字库及数字符号库
unsigned char code dang[32]={0x00,0x00,0x40,0x42,0x5C,0x48,0x40,0x40,0x7F,0x40,0x50,0x4E,0x44,0xC0,0x00,0x00,
0x00,0x00,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00};//当
unsigned char code qian[32]={0x08,0x08,0xE8,0xA8,0xA9,0xAE,0xEA,0x08,0x08,0xC8,0x0C,0x0B,0xEA,0x08,0x08,0x00,
0x00,0x00,0x7F,0x04,0x24,0x44,0x3F,0x00,0x00,0x1F,0x40,0x80,0x7F,0x00,0x00,0x00};//前
unsigned char code shi[32]={0x00,0x10,0x2C,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x34,0x2C,0x04,0x00,
0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00};//室
unsigned char code wen[32]={0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00};//温
unsigned char code zero[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};//0
unsigned char code one[16]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};//1
unsigned char code two[16]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};//2
unsigned char code three[16]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};//3
unsigned char code four[16]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};//4
unsigned char code five[16]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};//5
unsigned char code six[16]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};//6
unsigned char code seven[16]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};//7
unsigned char code eight[16]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};//8
unsigned char code nine[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};//9
unsigned char code point[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};//小数点
unsigned char code maohao[16]={0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};//冒号
unsigned char code jian[32]={0x40,0x20,0x30,0xAC,0x23,0x24,0x28,0xB0,0x20,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,
0x00,0x21,0x22,0x2C,0x21,0x16,0x18,0x17,0x11,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00};//剑
unsigned char code zhi[32]={0x00,0x08,0x08,0x08,0x08,0x08,0x09,0x0A,0x0C,0x88,0x48,0x28,0x1C,0x08,0x00,0x00,
0x20,0x60,0x30,0x08,0x18,0x24,0x24,0x22,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x00};//之
unsigned char code wu[32]={0x10,0x48,0x54,0xD3,0x7E,0x52,0x7E,0x52,0x52,0x7E,0x52,0xFE,0x52,0x52,0x50,0x00,
0x00,0x88,0x46,0x2B,0x12,0x0A,0x06,0x00,0x1A,0x16,0x12,0xFF,0x12,0x12,0x12,0x00};//舞
unsigned char code nian[32]={0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00};//年
unsigned char code yue[32]={0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00};//月
unsigned char code xing[32]={0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,
0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00};//星
unsigned char code qi[32]={0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00};//期
unsigned char code cone[32]={0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//一
unsigned char code ctwo[32]={0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00};//二
unsigned char code cthree[32]={0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00};//三
unsigned char code cfour[32]={0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00};//四
unsigned char code cfive[32]={0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00};//五
unsigned char code csix[32]={0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00};//六
unsigned char code ri[32]={0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00};//日
unsigned char code sheshidu[32]={0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00};//摄氏度的符号
/******************************************************************************************
* 函数名称    :delay
* 功能描述    :延时函数
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void delay(int num)
{
		while(num--);
}
/******************************************************************************************
* 函数名称    :lw
* 功能描述    :液晶显示器驱动函数 
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void lw(unsigned char x,unsigned char y,unsigned char dd)//液晶显示器驱动函数 
{
		if (x<64) 
		{
			cs1=cs2=0;
			di=rw=0;cs1=1;cs2=0;P0=0xb8|y;e=1;delay(2);e=0;delay(2);
			di=rw=0;cs1=1;cs2=0;P0=0x40|x;e=1;delay(2);e=0;delay(2);
			di=1;rw=0;cs1=1;cs2=0;P0=dd;e=1;delay(2);e=0;delay(2);	
		}
		else 
		{
			cs1=cs2=0;x=x-64;
			di=rw=0;cs1=0;cs2=1;P0=0xb8|y;e=1;delay(2);e=0;delay(2);			
			di=rw=0;cs1=0;cs2=1;P0=0x40|x;e=1;delay(2);e=0;delay(2);
			di=1;rw=0;cs1=0;cs2=1;
      P0=dd;e=1;delay(2);e=0;delay(2);
			cs1=cs2=1;
		}
		P0=0xff;
}
/******************************************************************************************
* 函数名称    :lcd_init
* 功能描述    :lcd初始化
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void lcd_init(void)
{
		unsigned char x,y;
		rst=0;
		rst=1;	
		e=di=rw=0;
		cs1=cs2=1;
		cs1=0;cs2=1;
		di=rw=0;P0=0x3f;e=1;delay(2);e=0;delay(2);
		cs1=0;cs2=1;
		di=rw=0;P0=0xc0;e=1;delay(2);e=0;delay(2);
		cs1=cs2=0;
		cs1=1;cs2=0;
		di=rw=0;P0=0x3f;e=1;delay(2);e=0;delay(2);
		cs1=1;cs2=0;
		di=rw=0;P0=0xc0;e=1;delay(2);e=0;delay(2);
		cs1=cs2=0;
    for (y=0;y<8;y++)
    {
		for (x=0;x<128;x++) 
		lw(x,y,0); 
		}
}
/******************************************************************************************
* 函数名称    :write_chinese
* 功能描述    :向x,y处写入一个汉字
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void write_chinese(unsigned char x,unsigned char y,unsigned char array[])
{
		unsigned char j,dd;			
		for(j=0;j<32;j++)
		{
			dd=array[j];
			if(j<16) 
				lw(x+j,y,dd);
		 	else  
		 		lw(x+j-16,y+1,dd);
		}	
}
/******************************************************************************************
* 函数名称    :write_flashcn
* 功能描述    :向x,y处写入一个汉字,再次写入时取反,需要与变量m配合,构成闪烁效果
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void write_flashcn(unsigned char x,unsigned char y,unsigned char array[])
{
		unsigned char j,dd;			
		for(j=0;j<32;j++)
		{
			if(m==1)
				dd=array[j];
			else
				dd=~array[j];
			if(j<16) 
				lw(x+j,y,dd);
			else
				lw(x+j-16,y+1,dd);
		}	
}
/******************************************************************************************
* 函数名称    :write_digit
* 功能描述    :向x,y处写入一个阿拉伯数字
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void write_digit(unsigned char x,unsigned char y,unsigned char array[])
{
		unsigned char j,dd;			
		for(j=0;j<16;j++)
		{
			dd=array[j];
			if(j<8)
				lw(x+j,y,dd);
			else
				lw(x+j-8,y+1,dd);
		}	
}

/******************************************************************************************
* 函数名称    :Init_DS18B20
* 功能描述    :初始化ds1820
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
Init_DS18B20(void)
{
		unsigned char x=0;
		DQ = 1;    //DQ复位
		delay(8);  //稍做延时
		DQ = 0;    //单片机将DQ拉低
		delay(80); //精确延时 大于 480us
		DQ = 1;    //拉高总线
		delay(14);
		x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
		delay(20);
}

/******************************************************************************************
* 函数名称    :ReadOneChar
* 功能描述    :读一个字节
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
ReadOneChar(void)
{
		unsigned char i=0;
		unsigned char dat = 0;
		for (i=8;i>0;i--)
		{
			DQ = 0; // 给脉冲信号
			dat>>=1;
			DQ = 1; // 给脉冲信号
			if(DQ)
			dat|=0x80;
			delay(4);
		}
		return(dat);
}

/******************************************************************************************
* 函数名称    :WriteOneChar
* 功能描述    :写一个字节
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -