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

📄 nokia5110.c

📁 nokia5110智能电子钟的设计ds1302+ds18b20+stc12c5a60s2
💻 C
字号:
/**************************************************************************************
*		         			子程序:底层程序     									  *	  					  
*						    功能:显示器处理,系统初始化;							  *
*     								      											  *
*																					  *
***************************************************************************************/
# include <intrins.h>
# include "stc12c5a60s2.h"
# include "macroandconst.h"
# include "zimo.h"
# include "nokia5110.h"
# include "ds1302.h"
# include "ADC.h"
# include "delay.h"
void system_inint()
{
     uchar num;

	EX0  =  1;//*外部中断0中断允许位;*//
	IT0  =  0;//*外部中断0触发方式控制位,置0为低电平触发方式,置1为跳变触发方式;*//

	TMOD =  0x11;		//设置定时器模式
	TH0  =  (65536-50000)/256;
	TL0  =  (65536-50000)%256;
	TF0  =  0;		//清除TF0标志
	TR0  =  1;
	EA   =  1;//*总中断控制;*//

	LCD_RST=0;
	Delay100ms();
	LCD_RST=1;
		  	
  	LCD_init();  //初始化LCD模块 
	LCD_clear(); //清屏幕
	LCD_POWER=1;
	Delay100ms();
	LCD_BLA=1;

	BEEP=0;	 
	//smartclock//
	for(num=0;num<10;num++)
	{
	LCD_write_shu(num,2,num+77);
	} 	
	BEEP=1;
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	LCD_clear(); //清屏幕

	/*您好,欢迎您使用!*/

	LCD_write_hanzi(0,0,20);
	LCD_write_hanzi(1,0,21);
	LCD_write_shu(4,0,88);


	LCD_write_hanzi(0,2,22);
	LCD_write_hanzi(1,2,23);
	LCD_write_hanzi(2,2,20);
	LCD_write_hanzi(3,2,24);
	LCD_write_hanzi(4,2,25);
	LCD_write_6x8shu(13,3,100);
    LCD_write_6x8shu(13,2,99);


   /*leading...*/
	LCD_write_shu(2,4,'L'-29);
	LCD_write_shu(3,4,'e'-87);
	LCD_write_shu(4,4,'a'-87);
	LCD_write_shu(5,4,'d'-87);
	LCD_write_shu(6,4,'i'-87);
	LCD_write_shu(7,4,'n'-87);
	LCD_write_shu(8,4,'g'-87);
    LCD_write_shu(9,4,89);

	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();

	LCD_draw_bmp_pixel(0,0,tupian, 84,48);

	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();
	Delay100ms();

	LCD_clear(); //清屏幕

	InitADC();

}




/*--------------------------------------------
LCD_write_byte: 使用SPI接口写数据到LCD
输入参数:DAT:写入的数据;
command :写数据/命令选择; 
----------------------------------------------*/
void LCD_write_byte(uchar DAT, uchar command)
{
	uchar i; 
	LCD_CE=0;	
	LCD_DC=command;		  //command=1为写数据,command=0为写指令
	for(i=0;i<8;i++)
	{ 
		if(DAT&0x80)
			LCD_SDA=1;
		else
			LCD_SDA=0;
		DAT=DAT<<1;		
		LCD_SCLK=0; 	//LCD_SCLK上升沿接收一位数据	
		LCD_SCLK=1; 
	}	
		LCD_DC=1;	
		LCD_CE=1;	
		LCD_SDA=1;
}
/*---------------------------------------
LCD_init: 5110LCD初始化

-----------------------------------------  */
void LCD_init(void)
{
	LCD_RST=0;  			   //复位
  	delayms(1);	
  	LCD_RST=1;  
	LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
	LCD_write_byte(0xc5,0);//设定液晶偏置电压//背景阴影调整;
	LCD_write_byte(0x20,0);//使用基本指令
	LCD_write_byte(0x0C,0);//设定显示模式,正常显示
    LCD_write_byte(0x06,0);	// 温度校正

}
/*-------------------------------------------
LCD_set_XY: 设置LCD坐标函数
输入参数:X:0-83  Y:0-5

---------------------------------------------*/
void LCD_set_XY(uchar X, uchar Y)
{
	LCD_write_byte(0x40 | Y, 0);// column  列
	LCD_write_byte(0x80 | X, 0);// row	  行
} 
/*------------------------------------------
LCD_clear: LCD清屏函数

--------------------------------------------*/
void LCD_clear(void)
{
	uchar t;
	uchar k;
	LCD_set_XY(0,0);
	for(t=0;t<6;t++)
	{ 
		for(k=0;k<84;k++)
		{ 
			LCD_write_byte(0x00,1);
				
		} 
	}
}
/*---------------------------------------------
LCD_write_shu: 显示6(宽)*8(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
-----------------------------------------------*/
void LCD_write_6x8shu(uchar row, uchar page,uchar c) //row:列 page:行 dd:字符
{
	uchar i;  	
	
	LCD_set_XY(row*6, page);// 列,页 row表示第row个8行,page表示第page个8列,坐标位(row,page)
	for(i=0; i<3;i++) 
	{
		LCD_write_byte(shuzi6x8[c*6+i],1); //数字的点阵为8*6,写上shuz90的上半部分
	}
	
    LCD_set_XY(row*6+3, page);// 列,行 
	for(i=3; i<6;i++) 
	{
		LCD_write_byte(shuzi6x8[c*6+i],1);  //写数字的下半部分
	}	 	
}
/*---------------------------------------------
LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
-----------------------------------------------*/
void LCD_write_shu(uchar row, uchar page,uchar c) //row:列 page:页 dd:字符
{
	uchar i;  	
	
	LCD_set_XY(row*8, page);// 列,页 row表示第row个8行,page表示第page个8列,坐标位(row,page)
	for(i=0; i<8;i++) 
	{
		LCD_write_byte(shuzi[c*16+i],1); //数字的点阵为16*8,写上shuz9o的上半部分
	}
	
    LCD_set_XY(row*8, page+1);// 列,页 
	for(i=8; i<16;i++) 
	{
		LCD_write_byte(shuzi[c*16+i],1);  //写数字的下半部分
	}	 	
}
/*---------------------------------------------
LCD_write_hanzi: 显示16(宽)*16(高)点阵列汉字等半角类
输入参数:c:显示的字符;
-----------------------------------------------*/
void LCD_write_hanzi(uchar row, uchar page,uchar c) //row:列 page:页 dd:字符
{
	uchar i;  	
	
	LCD_set_XY(row*16, page);// 列,页 
	for(i=0; i<16;i++) 
	{
		LCD_write_byte(hanzi[c*32+i],1);  //写汉子的上半部分
	}
	
    LCD_set_XY(row*16, page+1);// 列,页 
	for(i=16; i<32;i++) 
	{
		LCD_write_byte(hanzi[c*32+i],1);  //写汉子的下半部分
	}	
}
/*********************************************************** 
函数名称:LCD_draw_bmp_pixel
函数功能:位图绘制函数
入口参数:X、Y    :位图绘制的起始X、Y坐标;
          *map    :位图点阵数据;
          Pix_x   :位图像素(长)
          Pix_y   :位图像素(宽)
出口参数:无 
备 注: 
***********************************************************/
void LCD_draw_bmp_pixel(uchar X,uchar Y,uchar *tupian, uchar Pix_x,uchar Pix_y)
{
    uint i,n;
    uchar row;
    						    //计算位图所占行数
      if (Pix_y%8==0) 		//如果为位图所占行数为整数
	     row=Pix_y/8;      
      else
         row=Pix_y/8+1;		//如果为位图所占行数不是整数
    
	LCD_set_XY(X,Y);
    for (n=0;n<row;n++)		//换行
      {	
        for(i=0;i<Pix_x;i++)
          {	
		     LCD_set_XY(X+i,Y+n);
             LCD_write_byte(tupian[i+n*Pix_x], 1);
          }                         
      }      
}






⌨️ 快捷键说明

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