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

📄 tft200.c

📁 DS18B20温度测量-完整源代码
💻 C
字号:
// 芯片相关的头文件
#include <stm32f10x_lib.h>    // STM32F10x 库文件
#include "MyType.h"
#include "TFT200.h"
 // 实验板上相关定义  
/* PINS: 管脚定义
   - DB0 = PC0
   - DB1 = PC1
   - DB2 = PC2
   - DB3 = PC3
   - DB4 = PC4
   - DB5 = PC5
   - DB6 = PC6
   - DB7 = PC7
   - RD  = PC8
   - RW  = PC9
   - RS  = PC10
   - RST = PC11
   - CS  = PC12                                             */

#define PIN_CS               (   1 << 12)
#define PIN_RST              (   1 << 11)
#define PIN_RS               (   1 << 10)
#define PIN_RW               (   1 <<  9)
#define PIN_RD               (   1 <<  8)
#define PINS_CTRL            (0x1F <<  8)
#define PINS_DATA            (0xFF <<  0)
#define PINS_ALL             (PINS_CTRL | PINS_DATA)

//  时钟使能                            
#define LCD_CLOCK_EN         (RCC->APB2ENR |= (1 << 4)); // enable clock for GPIOC

 //写1,0                                              
#define LCD_CS(x)             GPIOC->ODR = (GPIOC->ODR & ~PIN_CS) | (x ? PIN_CS : 0);                                               
#define LCD_RST(x)            GPIOC->ODR = (GPIOC->ODR & ~PIN_RST) | (x ? PIN_RST : 0);                                             
#define LCD_RS(x)             GPIOC->ODR = (GPIOC->ODR & ~PIN_RS) | (x ? PIN_RS : 0);                                          
#define LCD_RW(x)             GPIOC->ODR = (GPIOC->ODR & ~PIN_RW) | (x ? PIN_RW : 0);                                    
#define LCD_RD(x)             GPIOC->ODR = (GPIOC->ODR & ~PIN_RD) | (x ? PIN_RD : 0);

// 读数据                                                         
#define LCD_DATA_IN           (((GPIOC->IDR & PINS_DATA) >> 0) & 0xFF);
// 写数据                                                
#define LCD_DATA_OUT(x)       GPIOC->ODR = (GPIOC->ODR & ~PINS_DATA) | (x << 0);
// 设置为输出模式                                            
#define LCD_ALL_DIR_OUT       GPIOC->CRL = (GPIOC->CRL & 0x00000000) | 0x33333333;                              GPIOC->CRH = (GPIOC->CRH & 0xFFF00000) | 0x00033333;
// 设置DATA为输入模式                                           
#define LCD_DATA_DIR_IN       GPIOC->CRL = (GPIOC->CRL & 0x00000000) | 0x44444444;
// 设置DATA为输入模式                                            
#define LCD_DATA_DIR_OUT      GPIOC->CRL = (GPIOC->CRL & 0x00000000) | 0x33333333;


//软件相关

static void delay (int cnt)
 { 
  while (cnt--);
  }
void delay1ms (int cnt) 
  {
  int i;
  while (cnt--)
  for(i=0;i<8300;i++);
  }

void LCD_Bus_Initial( void ) 
  {
  LCD_CLOCK_EN                                                              
  LCD_ALL_DIR_OUT
  LCD_CS(1);
  LCD_RW(1);
  LCD_RD(1);
  LCD_RS(1);
  LCD_RST(1);
  }
void LCD_Write_Data( unsigned char Data ) 
  {
  LCD_RD(1);
  LCD_CS(0);
  LCD_RS(1);
  LCD_DATA_OUT( Data );
  LCD_RW(0);
  delay( 10 );
  LCD_RW(1);
  LCD_CS(1);
  }
void LCD_Write_Cmd(unsigned char Cmd) 
  {
  LCD_RD(1);
  LCD_CS(0);
  LCD_RS(0);
  LCD_DATA_OUT( Cmd );
  LCD_RW(0);
  delay( 10 );
  LCD_RW(1);
  LCD_CS(1);
  }
void LCD_Reg_Set(unsigned char Cmd,unsigned char Data)
  {
  LCD_Write_Cmd( Cmd );
  LCD_Write_Data( Data );
  }

 unsigned int LCD_Bus_Read_Byte( void ) 
  {
  unsigned int BusData;
  LCD_DATA_DIR_IN;
  LCD_RD(0);
  BusData = LCD_DATA_IN;
  delay( 10 );
  LCD_RD(1);
  return BusData>>8;
  }

 // 液晶初始化                                
void LCD_Init( void )
    {
	LCD_Bus_Initial();
	//Reset	Lcd
	delay1ms(100 );
  	LCD_RST(0);
    delay1ms(100 );
  	LCD_RST(1);
    delay1ms(100 );
	//Driving ability Setting
	LCD_Reg_Set(0x60,0x00); //PTBA[15:8]
	LCD_Reg_Set(0x61,0x06); //PTBA[7:0]
	LCD_Reg_Set(0x62,0x00); //STBA[15:8]
	LCD_Reg_Set(0x63,0xD9); //STBA[7:0]
	LCD_Reg_Set(0x73,0x70); //OPON[7:0],SET OPON=70h, default 38h
	//Gamma 2.0 Setting
	LCD_Reg_Set(0x40,0x20); //
	LCD_Reg_Set(0x41,0x41); //
	LCD_Reg_Set(0x42,0x41); //
	LCD_Reg_Set(0x43,0x01); //
	LCD_Reg_Set(0x44,0x34); //
	LCD_Reg_Set(0x45,0x02); //
	LCD_Reg_Set(0x46,0x08); //
	LCD_Reg_Set(0x47,0xD1); //
	LCD_Reg_Set(0x48,0x05); //
	LCD_Reg_Set(0x50,0x67); //
	LCD_Reg_Set(0x51,0x00); //
	LCD_Reg_Set(0x52,0x27); //
	LCD_Reg_Set(0x53,0x0B); //
	LCD_Reg_Set(0x54,0x83); //
	LCD_Reg_Set(0x55,0x0E); //
	LCD_Reg_Set(0x56,0x01); //
	LCD_Reg_Set(0x57,0x37); //
	//For SRAM Improve
	
	LCD_Reg_Set(0x66,0x45); //SETVDC
	LCD_Reg_Set(0x80,0x0C); //SETIOOPT
	//Power Voltage Setting
	LCD_Reg_Set(0x1F,0x03); //VRH=4.65V
	LCD_Reg_Set(0x20,0x02); //BT (VGH~15V,VGL~-7V,DDVDH~5V)  0x02
	LCD_Reg_Set(0x24,0x1C); //VMH(VCOM High voltage3.2V)
	LCD_Reg_Set(0x25,0x34); //VML(VCOM Low voltage -1.2V)
	//****VCOM offset**///
	LCD_Reg_Set(0x23,0x3f); //for Flicker adjust //can reload from OTP-48   0x48
	//Power on Setting
	LCD_Reg_Set(0x18,0x44); //I/P_RADJ,N/P_RADJ, Normal mode 60Hz
	LCD_Reg_Set(0x1B,0x44); //FS1 Pumping Clock= 2 x line frequency
	LCD_Reg_Set(0x21,0x01); //OSC_EN='1', start Osc
	LCD_Reg_Set(0x01,0x00); //SLP='0', out sleep
	LCD_Reg_Set(0x1C,0x03); //AP=011
	LCD_Reg_Set(0x19,0x06); // VOMG=1,PON=1, DK=0,
	delay1ms(5);
	//262k/65k color selection
	LCD_Reg_Set(0x17,0x05); //default 0x06 262k color // 0x05 65k color
	//Display ON Setting
	LCD_Reg_Set(0x26,0x84); //PT=10,GON=0, DTE=0, D=0100
	delay1ms(40);
	LCD_Reg_Set(0x26,0xB8); //PT=10,GON=1, DTE=1, D=1000
	delay1ms(40);
	LCD_Reg_Set(0x26,0xBC); //PT=10,GON=1, DTE=1, D=1100
	//Set Display Direction 
	LCD_Reg_Set(0x35,0x02);
	//Set GRAM Area
	LCD_Reg_Set(0x02,0x00);
	LCD_Reg_Set(0x03,0x00); //Column Start
	LCD_Reg_Set(0x04,0x00);
	LCD_Reg_Set(0x05,0xAF); //Column End
	LCD_Reg_Set(0x06,0x00);
	LCD_Reg_Set(0x07,0x00); //Row Start
	LCD_Reg_Set(0x08,0x00);
	LCD_Reg_Set(0x09,0xDB); //Row End
	 LCD_Write_Cmd(0x22);
	 delay1ms(40);		
	}
void LCD_SetArea( U8 x0, U8 y0, U8 x1, U8 y1 )
   {
	//Set GRAM Area
	LCD_Reg_Set(0x02,0x00);
	LCD_Reg_Set(0x03,y0); //Column Start
	LCD_Reg_Set(0x04,0x00);
	LCD_Reg_Set(0x05,y1); //Column End
	LCD_Reg_Set(0x06,0x00);
	LCD_Reg_Set(0x07,x0); //Row Start
	LCD_Reg_Set(0x08,0x00);
	LCD_Reg_Set(0x09,x1); //Row End
	LCD_Write_Cmd(0x22);	//使能数据有效
	}
void LCD_Rectangle( unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1, unsigned int Data )
   {
	int x,y;
	LCD_SetArea(x0,y0,x1,y1);			
	for(x=0;x<=x1-x0;x++)
		for(y=0;y<=y1-y0;y++) {		    
			LCD_Write_Data( Data>>8 );
			LCD_Write_Data( Data );
			}
	}
void LCD_Clear_Screen( unsigned int Data )
   {
	LCD_Rectangle(0,0,219,175, Data );
	}
void LCD_SetPixel(unsigned short x, unsigned short y, unsigned int color)
    {
	LCD_SetArea(x,y,x,y);	
	LCD_Write_Data( color>>8 );
	LCD_Write_Data( color );
	}
#include "8X16.h"	//英文字符
void LCD_PutChar8x16(unsigned short x, unsigned short y, char c, unsigned int f, unsigned int b)
    {
	register unsigned int i,j;
	LCD_SetArea(x,y,x+16-1,y+16-1);
	for(i=0; i<16;i++) {
		unsigned char m=Font8x16[c*16+i];
		for(j=0;j<8;j++) {
			if((m&0x80)==0x80) {
				LCD_Write_Data(f>>8);
				LCD_Write_Data(f);
				}
			else {
				LCD_Write_Data(b>>8);
				LCD_Write_Data(b);
				}
			m<<=1;
			}
		}
	}

#include "GB1616.h"	//16*16汉字字模
void PutGB1616(unsigned short x, unsigned short  y, unsigned char c[2], unsigned int f,unsigned int b)
    {
	unsigned int i,j,k;
	LCD_SetArea(x, y, x+16-1, y+16-1);
	for (k=0;k<8;k++) {
	  if ((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])){ 
    	for(i=0;i<32;i++) {
		  unsigned short m=codeGB_16[k].Msk[i];
		  for(j=0;j<8;j++) {
			if((m&0x80)==0x80) {
				LCD_Write_Data(f>>8);
				LCD_Write_Data(f);
				}
			else {
				LCD_Write_Data(b>>8);
				LCD_Write_Data(b);
				}
			m<<=1;
			} 
		  }
		}  
	  }	
	}

void LCD_PutChar(unsigned short x, unsigned short y, char c, unsigned int f, unsigned int b) 
	{
		LCD_PutChar8x16( x, y, c, f, b );
	}

void LCD_PutString(unsigned short x, unsigned short y, char *s, unsigned int f, unsigned int b)
 //f:前景色 b:背景色
{
	register unsigned char l=0;
	while(*s) {
		if( *s < 0x80 ) {
			LCD_PutChar(x+l*8,y,*s,f,b);
			s++;l++;
			}
		else {
			PutGB1616(x+l*8,y,(unsigned char *)s,f,b);
			s+=2;l+=2;
			}
		}
	}
void LCD_BMP( U8 x0, U8 y0, U8 x1, U8 y1 , U8 * Bmp )
    {
	S16 i,j;
	LCD_SetArea(x0,y0,x1,y1);   
	for( i =0 ; i <= x1 - x0; i++ )
		for( j = 0; j <= y1 - y0; j++ ) {
			U16* PixP =  (U16*)(Bmp+0x46+i*(y1-y0+2)*2);
			U16 Pix = *(PixP+j);
			LCD_Write_Data(Pix>>8);
			LCD_Write_Data(Pix);
			}
	}



⌨️ 快捷键说明

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