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

📄 lcd1.c

📁 使用c51单片机制作的气象五要素采集程序 包括DS1302温度以及TLC2543、24c04
💻 C
📖 第 1 页 / 共 4 页
字号:
#include <reg52.h>
#include <math.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

void I2C_Init(void);
void  AT24C64_R(void *mcu_address,uint AT24C64_address,uint count);
void  AT24C64_W(void *mcu_address,uint AT24C64_address,uint count);
void FeedDog(void);
uchar Scan_Key(void);
void v_Set1302(uchar *pSecDa);
void v_Get1302(void);

extern uchar code wordlattic[];//16*16
extern uchar code wordlattic1[]; //24*24
extern uchar code wordlattic11[]; //48*48
extern uchar code wordlattic111[];//12*12

extern uchar curtime1[7]; //秒 分 时 日 月 星期 年
uchar rbuf[32];
uchar receive[8];
uchar start=0;//接收开始标志
uchar re_num=0,keyTemp=100;
uchar receiveFinish=0;//接收结束,在main调用

uchar code systab[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};//系统初始化参数
uchar code scrtab[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};//设置显示区域参数
uchar code abc[8]={0x01,0x07,0x07,0x07,0x07,0x01,0x01,0x01};
//uchar wd[32];


sbit CS = P1^2;//液晶
sbit A0 = P1^3;
sbit WR1 = P3^6;
sbit RD1 = P3^7;
sbit RES = P1^4;
sbit P10 = P1^0;//与2051相连的两个引脚,用来检测电磁电量的
sbit P11 = P1^1;
sbit Fmq = P3^5;//蜂鸣器

void wr_or(uchar x)
{
	uchar idata i;
	CS = 0;
	A0 = 1;
	for(i=0;i<2;i++)
	{  ;  ;   }
	WR1 = 0;
	for(i=0;i<2;i++)
	{  ;  ;   }
 	P0 = x;
 	for(i=0;i<4;i++)
 	{  ;   ;  }
 	WR1 = 1;
	for(i= 0;i<2;i++)
	{  ;   ;  }
	CS = 1;
}

//写入数据参数
void wr_data (uchar x)
{
	uchar idata i;
	CS = 0;
	A0 = 0;
	for(i=0;i<2;i++)
	{  ;  ;   }
	WR1 = 0;
	for(i=0;i<2;i++)
	{  ;  ;   }
	P0 = x;
	for(i=0;i<4;i++)
	{  ;  ;   }
	WR1 = 1;
	for(i=0;i<2;i++)
	{  ;  ;   }
	CS = 1;
}
void Ram_Init1(void)//清屏
{
	uint idata j;
	wr_or(0x4c);    /*光标右移*/
	wr_or(0x46);    /*设置光标地址*/
	wr_data(0x00);
	wr_data(0x00);
	wr_or(0x42);
	for(j=0;j<9600;j++)
	{wr_data(0x00);}
}
void LCD_Init(void)//初始化寄存器设置
{
	uchar idata i,x,y;
	wr_or(0x40);   /*系统初始化命令*/
	for(i=0;i<8;i++)     /*写入10个参数*/
	{
		x = systab[i];
		//for(j=0;j<2;j++){;;}
		wr_data(x);
	}
	wr_or(0x44);   /*设置显示区域,卷动*/
	for(i=0;i<10;i++)
	{
		y = scrtab[i];
		//for(j=0;j<2;j++){;;}
		 wr_data(y);
	}
	wr_or(0x5a);   //显示画面水平移动
	wr_data(0x00);
	wr_or(0x5b);   //设置显示方式为图形
	wr_data(0x0c);
        Ram_Init1();
        wr_or(0x59);   //打开显示
	wr_data(0x04);
}

void Displayz(uchar x,uchar y,uchar wordcode)
{
	uchar idata i,j;
	uint idata high,low;
	uchar idata x1,y1;
        high=((x-1)*40+y-1)/256;//计算要发送的高低位地址
	low=((x-1)*40+y-1)%256;
	x1=(uchar)low;
	y1=(uchar)high;
        for(j=0;j<2;j++)
	{
                wr_or(0x4f);
	        wr_or(0x46);
                wr_data(x1+j);
	        wr_data(y1);
	        wr_or(0x42);
	        for(i=0;i<16;i++)
	        {wr_data(wordlattic[wordcode*32+i*2+j]);}
        }
}

void Display(uchar x,uchar y)
{
	uchar idata ii,jj;
	uint idata high,low;
	uchar idata x1,y1;
        high=((x-1)*40+y-1)/256;//计算要发送的高低位地址
	low=((x-1)*40+y-1)%256;
	x1=(uchar)low;
	y1=(uchar)high;
        for(jj=0;jj<2;jj++)
	{
                wr_or(0x4f);
	        wr_or(0x46);
                wr_data(x1+jj);
	        wr_data(y1);
	        wr_or(0x42);
	        for(ii=0;ii<16;ii++)
	        {wr_data(rbuf[ii*2+jj]);}
        }
}


//=============================反面显示汉字函数=====================
//功能:在指定的位置写入反面相应的汉字
//入口:要显示数据的地址和汉字代码
//x为显示的行数。从1开始到30,y为显示的列数,从1到40
//出口:NONE
//=================================================================
void Displayf(uchar x,uchar y,uchar wordcode)
{
	uchar idata i,j;
	uint idata high,low;
	uchar idata x1,y1;
	high=((x-1)*40+y-1)/256;//计算要发送的高低位地址
	low=((x-1)*40+y-1)%256;
	x1=(uchar)low;
	y1=(uchar)high;
        for(j=0;j<2;j++)
	{
                wr_or(0x4f);
	        wr_or(0x46);
                wr_data(x1+j);
	        wr_data(y1);
	        wr_or(0x42);
	        for(i=0;i<16;i++)
	        {wr_data(~wordlattic[wordcode*32+i*2+j]);}
        }
}

//=============================正常显示汉字函数=====================
//功能:在指定的位置写入正常相应的汉字   24*24点阵
//入口:要显示数据的地址和汉字代码
//x为显示的行数。从1开始到30,y为显示的列数,从1到40
//出口:NONE
//=================================================================
void Displayz1(uchar x,uchar y,uchar wordcode)
{
	uchar idata i,j;
	uint idata high,low;
	uchar idata x1,y1;
	high=((x-1)*40+y-1)/256;//计算要发送的高低位地址
        low=((x-1)*40+y-1)%256;
	x1=(uchar)low;
	y1=(uchar)high;
        for(j=0;j<3;j++)
        {
	       wr_or(0x4f);
               wr_or(0x46);
               wr_data(x1+j);
	       wr_data(y1);
	       wr_or(0x42);
	       for(i=0;i<24;i++)
	      {wr_data(wordlattic1[wordcode*72+i*3+j]);}
        }
}

//=============================正常显示汉字函数=====================
//功能:在指定的位置写入正常相应的汉字   48*48点阵
//入口:要显示数据的地址和汉字代码
//x为显示的行数。从1开始到30,y为显示的列数,从1到40
//出口:NONE
//=================================================================
void Displayz11(uchar x,uchar y,uchar wordcode)
{
	uchar idata i,j;
	uint idata high,low;
	uchar idata x1,y1;
	high=((x-1)*40+y-1)/256;//计算要发送的高低位地址
	low=((x-1)*40+y-1)%256;
	x1=(uchar)low;
	y1=(uchar)high;
        for(j=0;j<6;j++)
        {
	       wr_or(0x4f);
	       wr_or(0x46);
	       wr_data(x1+j);
	       wr_data(y1);
	       wr_or(0x42);
	       for(i=0;i<48;i++)
	       {wr_data(wordlattic11[wordcode*288+i*6+j]);}
        }
}

//=============================正常显示汉字函数=====================
//功能:在指定的位置写入正常相应的汉字  12*16
//入口:要显示数据的地址和汉字代码
//x为显示的行数。从1开始到30,y为显示的列数,从1到40
//出口:NONE
//=================================================================
void Displayz111(uchar x,uchar y,uchar wordcode)
{
	uchar idata i,j;
	uint idata high,low;
	uchar idata x1,y1;
	high=((x-1)*40+y-1)/256;//计算要发送的高低位地址
	low=((x-1)*40+y-1)%256;
	x1=(uchar)low;
	y1=(uchar)high;
        for(j=0;j<2;j++)
        {
	       wr_or(0x4f);
	       wr_or(0x46);
	       wr_data(x1+j);
	       wr_data(y1);
	       wr_or(0x42);
	       for(i=0;i<12;i++)
	       {wr_data(wordlattic111[wordcode*24+i*2+j]);}
        }
}

//battery
void Display_Battery(uchar x,uchar y,uchar n)
{
//uchar code batteryBlock1[8]={0x00,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e};
//uchar code batteryBlock2[8]={0x00,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c};
//uchar code batteryBlock3[8]={0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9};
	uchar   i,j;
	uint   high,low;
	uchar  x1,y1,temp=y;
        //电池头(30,34)
	high=((x-1)*40+y-1)/256;
        low=((x-1)*40+y-1)%256;
	x1=(uchar)low;
	y1=(uchar)high;
        wr_or(0x4f);
        wr_or(0x46);
        wr_data(x1+j);
	wr_data(y1);
	wr_or(0x42);
        for(i=0;i<8;i++)
        {wr_data(abc[i]);}
        //电池块1   (30,35)
        if(n>0)
        {
             //  x=18;
               //y=temp+3;
               y+=3;
       	       high=((x-1)*40+y-1)/256;
               low=((x-1)*40+y-1)%256;
	       x1=(uchar)low;
	       y1=(uchar)high;
               wr_or(0x4f);
               wr_or(0x46);
               wr_data(x1+j);
	       wr_data(y1);
	       wr_or(0x42);
               for(i=0;i<7;i++)
	       {wr_data(0xf9);}
               {wr_data(0x01);}
        }
        //电池块2   (30,36)
        if(n>1)
        {
           //    x=18;
                y-=1;
               high=((x-1)*40+y-1)/256;
               low=((x-1)*40+y-1)%256;
	       x1=(uchar)low;
	       y1=(uchar)high;
               wr_or(0x4f);
               wr_or(0x46);
               wr_data(x1+j);
	       wr_data(y1);
	       wr_or(0x42);
              // {wr_data(0);}
	       for(i=0;i<7;i++)
	       {wr_data(0x7c);}
               {wr_data(0);}
        }
        //电池块3     (30,37)
        if(n>2)
        {
            //   x=18;
               // y=temp+1;
               y -= 1;
               high=((x-1)*40+y-1)/256;
               low=((x-1)*40+y-1)%256;
	       x1=(uchar)low;
	       y1=(uchar)high;
               wr_or(0x4f);
               wr_or(0x46);
               wr_data(x1+j);
	       wr_data(y1);
	       wr_or(0x42);
              // {wr_data(0);}
	       for(i=0;i<7;i++)
	       {wr_data(0x3e);}
               {wr_data(0);}
        }
}

void xian(uint x1,uint y1,uint x2,uint y2)
{
	uint idata high,low,j;
	uchar idata x,y;
        high=((y1-1)*40+x1-1)/256;//计算要发送的高低位地址
	low=((y1-1)*40+x1-1)%256;
	x=low;
	y=high;
	if(y1==y2)
	{
		wr_or(0x4c);//第1横
		wr_or(0x46);
		wr_data(x);
		wr_data(y);
		wr_or(0x42);
		for(j=0;j<x2-x1;j++)
		wr_data(0xff);
	}
	if(x1==x2)
	{
		wr_or(0x4f);//第1竖
		wr_or(0x46);
		wr_data(x);
		wr_data(y);
		wr_or(0x42);
		for(j=0;j<y2-y1;j++)
		wr_data(0x01);
	}
}

void biankuang(void)
{
        xian(1,10,1,34);
        xian(39,10,39,34);
        xian(2,10,40,10);
        xian(2,34,40,34);
        xian(1,42,1,230);
        xian(39,42,39,230);
        xian(2,42,40,42);
        xian(2,230,40,230);
        xian(2,74,40,74);
}

void Battery(uchar n)
{
        xian(35,16,35,28);
        xian(38,16,38,28);

⌨️ 快捷键说明

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