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

📄 arry_key.c

📁 单片机控制的图文屏
💻 C
字号:
#include <reg51.h>
#include <intrins.h> 

#define	uchar unsigned char   
#define	uint unsigned int   

sbit RS	=	P2^5	  ;       
sbit RW	=	P2^6	  ;
sbit E 	=	P2^7 	  ;
sbit PSB	=	P2^4  ;
sbit RST	=	P2^3  ;

sbit     T_CLK      = P1^1;   /*实时时钟时钟线引脚 */
sbit     T_IO       = P1^2;   /*实时时钟数据线引脚 */
sbit     T_RST      = P1^3;   /*实时时钟复位线引脚 */

sbit  ACC0 = ACC^0;
sbit  ACC7 = ACC^7;

sbit DQ=P1^0;


float tem;
int temp_lo,temp_hi;


void delayms(unsigned char ms)	       ;
void lcdinitial()					   ;
void lcdwritecom(unsigned char comm)   ;
void lcdwritedata(unsigned char dat)   ;
void photodis(unsigned char *s) 		;
void chardis(char *ddata);
void Gunp();

void   RTInputByte(uchar);       /* 输入 1Byte */
uchar  RTOutputByte(void);       /* 输出 1Byte */
void   W1302(uchar, uchar);
uchar  R1302(uchar);
void   Set1302(uchar *);         /* 设置时间 */
void   Bcd2asc(uchar,uchar *);
void   Get1302(uchar curtime[]); /* 读取1302当前时间 */


unsigned char settime[]={0x00,0x19,0x22,0x12,0x05,0x01,0x08};  //秒,分,时,日,月,星期,年
unsigned char Week[]="一二参四五六日" ;
unsigned char dis1[]={"桂林电子科技大学"};
unsigned char dis2[]={"电子工程系"};
unsigned char dis3[]={"045024班"};
unsigned char dis4[]={"黎斯铭"};
unsigned char lcdy,lcdx,count1,count2,count3,flag=0;
unsigned char ucCurtime[7]={0} ;
unsigned char code tutab[]={
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x06,0x00,0x00,0x30,0x00,0x00,0x37,0xF8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x06,0x00,0x01,0x20,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x06,0x00,0x02,0x60,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x38,0x06,0x00,0x16,0x40,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x06,0x00,0x24,0x00,0x3F,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0F,0x00,0x64,0x01,0xFF,0xF0,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0x1F,0x00,0x60,0x0F,0xFF,0xFC,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x17,0xBF,0xE0,0x60,0x3F,0xFF,0xFE,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0x80,0x80,0xFF,0x00,0x3F,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x00,
0x00,0x7E,0x01,0x81,0xF8,0x00,0x0F,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE6,0x00,
0x00,0x0E,0x03,0x43,0xEF,0xFC,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x03,0x7F,0x00,
0x00,0x0E,0x03,0x07,0xCF,0xFE,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x06,0x19,0x80,
0x00,0x0E,0x06,0x0F,0xBF,0xFE,0x0F,0x80,0xC0,0x00,0x3F,0x80,0x00,0x06,0x00,0xC0,
0x60,0x0E,0x06,0x1F,0x3F,0xBE,0x0F,0x00,0xC0,0x00,0xFF,0xC0,0x00,0x04,0x00,0xC0,
0x60,0x0E,0x0E,0x3C,0x7F,0x9E,0x0F,0x10,0xC0,0x81,0x80,0x60,0x01,0x84,0x00,0xC0,
0x60,0x0E,0x0C,0x38,0xFF,0xFE,0x1E,0x10,0xC1,0x83,0x00,0x21,0xC6,0x8C,0x00,0x60,
0x38,0x1E,0x18,0x70,0xFF,0xFE,0x3C,0x30,0xC3,0x0E,0x00,0x63,0x2C,0x8C,0xE0,0x30,
0x7F,0x9E,0x18,0x71,0xFF,0xFC,0x78,0x70,0xC3,0x18,0x00,0x62,0x29,0x8D,0xF8,0x18,
0x3E,0xBF,0x18,0xE1,0xFF,0xFC,0xF0,0x7C,0xC2,0x10,0x01,0xC2,0x25,0xF9,0x1E,0x08,
0x30,0x76,0x18,0xC1,0xFF,0xF1,0xE0,0xEC,0xC0,0x30,0x03,0x02,0x24,0xF9,0x03,0x8C,
0x20,0x66,0x11,0xC0,0xFF,0xE7,0x80,0x82,0x60,0x10,0x02,0x06,0x64,0x19,0x00,0x84,
0x20,0xC6,0x11,0x80,0xFF,0x9F,0x00,0x00,0xF0,0x19,0xC2,0x06,0x64,0x1F,0x10,0xCC,
0x01,0xC4,0x09,0x80,0x7F,0x7C,0x00,0x00,0xF8,0x0F,0x63,0x06,0x2C,0x1E,0x38,0xC8,
0x01,0x84,0x01,0x80,0x00,0xF8,0x0C,0x00,0xD8,0x00,0x23,0x06,0x38,0x12,0x01,0x98,
0x01,0x04,0x01,0x80,0x07,0xE0,0x18,0x00,0xCC,0x00,0x31,0x03,0x19,0xF6,0x01,0xF0,
0x00,0x04,0x01,0x98,0x7F,0x00,0x30,0x00,0x86,0x00,0x11,0x01,0x18,0x37,0x81,0x80,
0x00,0x04,0x01,0xC7,0xFC,0x00,0xE0,0x00,0x87,0x00,0x19,0x81,0x98,0x1D,0x9F,0x00,
0x00,0x04,0x01,0xC0,0x00,0x01,0x80,0x01,0x83,0x80,0x18,0xF0,0x98,0x18,0x03,0x00,
0x03,0x04,0x00,0xE0,0x00,0x07,0x00,0x01,0x01,0xC0,0xF8,0xD8,0x98,0xA8,0x03,0x00,
0x07,0x04,0x00,0xF0,0x00,0x1E,0x00,0x03,0x00,0xE0,0xC0,0x08,0x99,0xEF,0x3E,0x00,
0x0E,0x04,0x00,0x7C,0x00,0x7C,0x00,0x06,0x00,0x60,0xC0,0x08,0x99,0x12,0x36,0x00,
0x1C,0x04,0x00,0x3F,0xCF,0xF0,0x00,0x0C,0x00,0x30,0x40,0x0C,0x99,0x10,0x02,0x00,
0x3C,0x04,0x00,0x0F,0xFF,0xC0,0x00,0x38,0x00,0x18,0x7F,0xF8,0xFF,0x18,0x06,0x00,
0x3C,0x04,0x00,0x03,0xFF,0x00,0x00,0x60,0x00,0x00,0x3F,0xF0,0x66,0x1F,0xFC,0x00,
0x3C,0x04,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,




};	



/*温度传感器控制程序*/

void Delay15(uchar n)			//延时子程序
 {  do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();
  n--;
  
       }while(n);
  }
 
void Delay10ms(uint delay_num)		//延时子程序
{
 uchar i;
 while(delay_num--)
 { 
  for(i=0;i<125;i++) ;
   
 }
}

unsigned char Read18B20(void)		//读温度传感器子程序
 { unsigned char ch;
   unsigned char q ;

   for(q=0;q<8;q++)
    {ch=ch>>1;
     DQ=0;
     _nop_();
     DQ=1;
     _nop_();_nop_();_nop_();_nop_();
     if(DQ==1)  
        {ch=ch|0x80;}

   else     {ch=ch&0x7f;}
     Delay15(3);
   DQ=1;
 
     }  
 return (ch);
}


void Write18B20(uchar ch)		//写温度传感器子程序
 { uchar i;
   for(i=0;i<8;i++)
   { DQ=0;
  Delay15(1);
  DQ=ch&0x01;
  Delay15(3);
  DQ=1;
  ch=ch>>1;
  _nop_();
    }
 }

void Init18B20(void)		//初始化温度传感器
 { DQ=0;
   Delay15(33);//至少延时480us
   DQ=1;
   Delay15(10);//至少延时100us
 }


void DData(void)	//测温度、处理数据
{
	uchar temp1,temp2,flag=0;
	EA=0;			//在测温度时要关中断,避免影响温度传感器的控制时序
	Init18B20();

   	Write18B20(0xCC);//跳过ROM
   	_nop_();


   	Write18B20(0x44);//发送温度转换指令
   	Delay10ms(25);
   	Delay10ms(25);
   	Delay10ms(25);
	Delay10ms(25);//等待1s转换
	
   	Init18B20();
   	Write18B20(0xCC);//跳过ROM
   	Write18B20(0xBE);//读温度转换指令
   	temp1=Read18B20();  //读低位温度值
	temp2=Read18B20();  //读高位温度值
 
	temp2 = (temp2 << 4)|(temp1 >> 4);	//处理数据
	temp1&=0x0f;

	if(temp2>0x7f)
    {
	 	temp1=~temp1;        //数据取反
	 	temp2=~temp2;        //数据取反
	 	temp1&=0x0f;
	 	if(temp1==0x0f)
	   		temp2=temp2+1;
	 	else
	   		temp1=temp1+1;
		flag=1;
	 }
	 tem=temp1*0.0625+temp2;
	 if(flag)
	 	tem*=-1;
}


void RTInputByte(uchar d) 
{ 
    uchar i;
    ACC = d;
    for(i=8; i>0; i--)
    {
        T_IO = ACC0;           /*相当于汇编中的 RRC */
        T_CLK = 1;
        T_CLK = 0;
        ACC = ACC >> 1; 
    } 
}

uchar RTOutputByte(void) 
{ 
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         /*相当于汇编中的 RRC */
        ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    } 
    return(ACC); 
}

void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);       /* 地址,命令 */
    RTInputByte(ucDa);       /* 写1Byte数据*/
    T_CLK = 1;
    T_RST = 0;
} 

uchar R1302(uchar ucAddr)
{
    uchar ucData;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);             /* 地址,命令 */
    ucData = RTOutputByte();         /* 读1Byte数据 */
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}

void Set1302(uchar *pClock) 
{
    uchar i;
    uchar ucAddr = 0x80; 
	W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作*/
    for(i =7; i>0; i--)
    { 
     	W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
      	pClock++;
       	ucAddr +=2;
    }
	W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护*/

}

void Get1302(void) 
{
    uchar i;
    uchar ucAddr = 0x81;
    for (i=0; i<7; i++)
    {
        ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
        ucAddr += 2;
    }
}
/*//////////////////////////////////////////////////////////////////////*/	

void dis_time()
{
	char sec[2],min[2],hour[2],day[2],mon[2],year[2],week;

	sec[1]=(ucCurtime[0]&0x0f)|0x30;
	sec[0]=((ucCurtime[0]&0x70)>>4)|0x30;

	min[1]=(ucCurtime[1]&0x0f)|0x30;
	min[0]=((ucCurtime[1]&0x70)>>4)|0x30;
	
	hour[1]=(ucCurtime[2]&0x0f)|0x30;
	hour[0]=((ucCurtime[2]&0x30)>>4)|0x30;

	day[1]=(ucCurtime[3]&0x0f)|0x30;
	day[0]=((ucCurtime[3]&0x30)>>4)|0x30;

	mon[1]=(ucCurtime[4]&0x0f)|0x30;
	mon[0]=((ucCurtime[4]&0x10)>>4)|0x30;

	week=ucCurtime[5]&0x07;
	
	year[1]=(ucCurtime[6]&0x0f)|0x30;
	year[0]=((ucCurtime[6]&0xf0)>>4)|0x30;

	lcdwritecom(0x80);
	delayms(5) ;
	chardis("20");
	chardis(year);
	chardis("年");
	chardis(mon);
	chardis("月");
	chardis(day);
	chardis("日");
	chardis("  ");

	lcdwritecom(0x90);
	delayms(5) ;
	chardis("  ");
	chardis("  ");
	chardis("星");
	chardis("期");
	if(week==3)
	{
	lcdwritedata(0xc8) ;
	delayms(1) ;
	lcdwritedata(0xfd) ;
	delayms(1) ;
	}
	else
	chardis(Week+(week-1)*2);


	lcdwritecom(0x88);
	delayms(5) ;
	chardis("  ");
	lcdwritedata(' ') ;
	delayms(1) ;
	chardis(hour);
	lcdwritedata(':') ;
	delayms(1) ;
	chardis(min);
	lcdwritedata(':') ;
	delayms(1) ;
	chardis(sec);
	
}

void DisTemperature( float Ddata)			//显示温度
{
	unsigned char z[2],x[4],flag=0,i=0,j=0;
	unsigned int id,fd;
	float Dd;
	if(Ddata<0)			//判是否负,并取绝对值
		{
			flag=1;
			Dd=-Ddata;
		}
	else
		Dd=Ddata;
	id=(int)Dd;		//取整数部分
	fd=(Dd-id)*10000;	//取小数部分
	z[0]=id/10;			//将各位数字取出
	z[1]=id%10;
	x[0]=fd/1000;
	x[1]=(fd-x[0]*1000)/100;
	x[2]=(fd/10)%10;
	x[3]=fd%10;
	lcdwritecom(0x98);
	delayms(5) ;
	chardis("温");
	chardis("度");
	chardis(": ");
	if(flag)
	{
		lcdwritedata('-') ;
		delayms(1) ;		//判断是否负,是负输出负号
	}
	if(z[0])		//判断是第一个数字是否为0,若是,跳过第一个,输出第二个
	{
		lcdwritedata(z[0]|0x30) ;
		delayms(1) ;
	}
	lcdwritedata(z[1]|0x30) ;
	delayms(1) ;
	lcdwritedata('.') ;
	delayms(1) ;
	lcdwritedata(x[j]|0x30) ;
	delayms(1) ;
	
	
	lcdwritecom(0x9e);
	delayms(5) ;
	chardis("度");
}

void disstr(unsigned char x,unsigned char *p)
{
	int i,j;
	lcdwritecom(x);
	delayms(5);	
	for(i=0;p[i]!=0;i++)
	{
		lcdwritedata(p[i]) ;
		delayms(1);	
	}
	for(j=i;j<16;j++)
	{
		lcdwritedata(' ') ;
		delayms(1);
	}
}

void Gunp()
{
	unsigned char a,b,c,d,t,i,j;
	a=0x80;
	b=0x90;
	c=0x88;
	d=0x98;

	disstr(a,dis1);
	disstr(b,dis2);
	disstr(c,dis3);
	disstr(d,dis4);	
	for(j=0;j<20;j++)
			delayms(100);
	for(i=1;i<9;i++)
	{
		t=a; a=b; b=c; c=d; d=t;
		disstr(a,dis1);
		disstr(b,dis2);
		disstr(c,dis3);
		disstr(d,dis4);
		
		for(j=0;j<5;j++)
			delayms(100);
	}
	for(j=0;j<20;j++)
		delayms(100);
}		
 




	
		 
void main()
{	
	lcdinitial() ;
	
	W1302(0x8e,0x00);
	W1302(0x80,0x00);
	W1302(0x90,0xa8);  
	W1302(0x8e,0x80);
	Set1302(settime);
	W1302(0x8e,0x80); 

	photodis(tutab);
	delayms(5);	
	lcdinitial() ;
	Gunp();	
while(1)
	{
		Get1302();
		dis_time();
		delayms(5);
		DData();
    	DisTemperature( tem );
	   	
	
	}

}

void lcdinitial()
{	
	RST = 1 ;
	_nop_() ;
	PSB = 1 ;
	_nop_() ;	
	lcdwritecom(0x30) ;	
	delayms(5) ;
	lcdwritecom(0x0c) ;	
	delayms(5) ;
	lcdwritecom(0x01) ;
	delayms(5) ;
	lcdwritecom(0x06) ;
	delayms(5) ;	
	lcdwritecom(0x80) ;	
	delayms(5) ;
}

void lcdwritecom(unsigned char comm)
{
	 RS = 0    ;	
	 RW = 0    ;
	 P0 = comm ;
	 E = 1     ;	
	 E = 0     ;	
}

void lcdwritedata(unsigned char dat)
{
	
	RS = 1    ;	
	RW = 0	;
	P0 = dat  ;
	E = 1     ;
	E = 0     ;
}

void chardis(char *ddata)
{
	lcdwritedata(*ddata++) ;
	delayms(1) ;
	lcdwritedata(*ddata) ;
	delayms(1) ;
}

	
	
void wtzb(unsigned int  x,unsigned int y) 
{ 
   lcdwritecom(y);
   delayms(5) ;
   lcdwritecom(x); 
   delayms(5) ;
} 
void delayms(unsigned char ms)	
// 延时子程序
{						
	unsigned char i       ;
	while(ms--)
	{
		for(i = 0; i < 120; i++);
	}
}

//********显示图形子程序**************** 
void photodis(unsigned char *s) 
{ 
	
	lcdwritecom(0x36) ;	
	delayms(5) ;
   lcdx=0X80; 
   for (count3=0X02 ;count3!=0;count3--) 
   { 
       lcdy=0X80; 
       
       for (count2=0X20;count2!=0;count2--) 
       { 
         
		 	
         wtzb(lcdx,lcdy); 
         for (count1=0X10;count1!=0;count1--) 
          { 
            lcdwritedata(*s++);
			delayms(1) ;
			            
          } 
         lcdy+=1; 
       } 
       lcdx=0X88; 
   } 
   lcdwritecom(0x34); 
}

⌨️ 快捷键说明

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