liuhao vor 3 Jahren
Ursprung
Commit
d856fca075

+ 124 - 0
TEST_Prj/stm32_std_proprj/Demo/HARDWARE/lcd/drive_12864.c

@@ -0,0 +1,124 @@
+
+#include "drive_12864.h"
+#include <stdarg.h>		  //  标准头文件
+#include "stdio.h"
+#include "delay.h"
+
+#define L128_RW  GPIO_Pin_8 //
+#define L128_EN  GPIO_Pin_9 //
+
+#define SET_EN GPIO_SetBits(GPIOA, L128_EN);
+#define CLR_EN GPIO_ResetBits(GPIOA, L128_EN);
+
+#define SET_RW GPIO_SetBits(GPIOA, L128_RW);
+#define CLR_RW GPIO_ResetBits(GPIOA, L128_RW);
+
+
+void LCD128GPIO_Init(void)
+{
+     GPIO_InitTypeDef GPIO_InitStructure;
+	   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置时钟 
+     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
+	   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+	   GPIO_Init(GPIOA,&GPIO_InitStructure);
+}
+
+
+void Senbyte(unsigned char command)//向12864串行发送1byte数据
+{
+  unsigned char i;
+  for(i=0;i<8;i++)
+  {
+     if((command<<i)&0x80)
+	 {
+	   SET_RW;
+	 }
+	 else 
+	 {
+	   CLR_RW;
+	 }
+	 CLR_EN;//sclk =0
+	// delay_ms(5);
+	 SET_EN;//sclk=1
+  }
+
+}
+
+void Write_lcd_com(unsigned char command)//向12864写指令函数
+{
+ //  SET_RW;
+   Senbyte(0xf8);
+   Senbyte(command&0xf0);
+   Senbyte((command<<4)&0xF0);
+   delay_us(100);
+}
+
+void Write_lcd_date(unsigned char date)//向12864写数据函数
+{
+//  SET_RW;
+  Senbyte(0xfa);
+  Senbyte(date & 0xf0);
+  Senbyte((date<<4) & 0xf0);
+  delay_us(100);
+}
+void lcd128_Init(void)//12864初始化函数
+{
+	 LCD128GPIO_Init();
+	 delay_ms(100);
+   Write_lcd_com(0x30);//设置8位数据口 基本指令模式
+   delay_us(100);
+   Write_lcd_com(0xc0);//整体显示开 游标关 反白关
+    delay_us(100);
+   Write_lcd_com(0x30); //设置8位数据接口,基本指令模式   
+   Write_lcd_com(0x20);  //清DDRAM    
+   Write_lcd_com(0x06);  //游标及显示右移一位   
+   Write_lcd_com(0x0c);  //整体显示开,游标关,反白关   
+   Write_lcd_com(0x01);  //写入空格清屏    
+   Write_lcd_com(0x80);  //设置首次显示位置 
+}
+
+/************ 写字符数据函数  *****************
+功能:在带字库12864指定位置上显示字符;
+参数
+p:    指向待显示数据指针
+x:    X坐标
+y:    Y坐标
+************ ***********  *****************/
+void WriteLcd128_String(char x,char y,char *p)
+{
+   switch(y)  //  设置显示地址
+	{
+	   case 0:Write_lcd_com(0x80 + x);  //  第一行
+	          break;
+	   case 1:Write_lcd_com(0x90 + x);  //  第二行
+	          break;
+	   case 2:Write_lcd_com(0x88 + x);  //  第三行
+	          break;
+	   case 3:Write_lcd_com(0x98 + x);  //  第四行
+	          break;
+	}
+	while(*p != 0)	    //  循环显示字符,直到检测到结束字符
+	{
+        Write_lcd_date(*p);
+  //  delay(100);
+		    p++;
+  }
+}
+
+
+void L128printf(char x,char y,char *p,...)
+{
+	  char LcdBuff[20];
+		va_list ap;
+		va_start(ap,p);
+		vsprintf(LcdBuff,p,ap);
+		va_end(ap);
+		WriteLcd128_String(x,y,LcdBuff);
+}
+
+
+
+
+
+

+ 19 - 0
TEST_Prj/stm32_std_proprj/Demo/HARDWARE/lcd/drive_12864.h

@@ -0,0 +1,19 @@
+#ifndef __DRIVE_12864_H
+#define __DRIVE_12864_H
+
+#include "stm32f10x.h"
+
+void lcd128_Init(void);//³õʼ»¯º¯ÊýÉùÃ÷ 
+void WriteLcd128_String(char x,char y,char *p);
+void L128printf(char x,char y,char *p,...);
+
+#endif
+
+
+
+
+
+
+
+
+

+ 311 - 0
TEST_Prj/stm32_std_proprj/Demo/HARDWARE/lcd/drive_lcd1602.c

@@ -0,0 +1,311 @@
+
+/*
+**************************************************************************************************
+*	   小浩电子科技
+* 文件名:stm32驱动1602程序源文件
+* 描  述:
+* 版本号:V2.0
+* 备  注:
+* 程序员:电子极客迷
+* 日  期:2018-04-22
+***************************************************************************************************
+*/
+
+#include "drive_lcd1602.h"
+#include "delay.h"
+#include "stm32f10x.h"
+#include "stm32f10x_gpio.h"
+#include "stm32f10x_rcc.h"
+#include <stdarg.h>		  //  标准头文件
+#include "stdio.h"
+
+#ifdef LCD602_Bin  //
+/*以下为并口驱动程序*/
+///********************************硬件接口定义*********************************/
+#define RS  GPIO_Pin_7             
+#define RW  GPIO_Pin_6 
+#define EN  GPIO_Pin_5 
+#define Control_GPIO GPIOA 
+
+/********************************宏定义*********************************/
+#define    LCD1602_RS(x)  x ? GPIO_SetBits(Control_GPIO, RS): GPIO_ResetBits(Control_GPIO, RS)
+#define    LCD1602_RW(x)  x ? GPIO_SetBits(Control_GPIO, RW): GPIO_ResetBits(Control_GPIO, RW)
+#define    LCD1602_EN(x)  x ? GPIO_SetBits(Control_GPIO, EN): GPIO_ResetBits(Control_GPIO, EN)
+void LCDGPIO_Configuration(void);
+
+/********************************************************************* 
+*名    称:LcdWaitReady()
+*描    述:等待液晶准备好
+*入口参数:无
+*出口参数:result
+*********************************************************************/
+u8 LcdWaitReady(void)
+{                         // 测试LCD忙碌状态
+	u8 result;
+	LCD1602_RS(0);  //0;
+	LCD1602_RW(1);  //1;
+	LCD1602_EN(1);  //1;
+	delay_us(50);
+	result = (GPIO_ReadInputData(GPIOB) & 0x8000)>>8;
+	LCD1602_EN(0); // 0;
+	return result; 
+}
+/********************************************************************* 
+*名    称: LcdWriteCmd(u8 cmd)
+*描    述:写指令到LCD1602,指令数据占一个字节
+*入口参数:cmd,待写入指令
+*出口参数:无
+*********************************************************************/
+void LCD1602_Write_Cmd(unsigned char cmd)  
+{                          // 写入指令数据到LCD
+	//while(LcdWaitReady());
+	delay_us(500);
+	LCD1602_RS(0); // 0;
+	LCD1602_RW(0); // 0;
+	LCD1602_EN(0); // 0;
+	delay_us(50);
+	GPIOB->BSRR = cmd<<8 & 0xff00;  //将数据送到P0口 
+  GPIOB->BRR = ((~cmd)<<8) & 0xff00;
+	delay_us(50);
+	LCD1602_EN(1); // 1;
+	delay_us(50);
+	LCD1602_EN(0); // 0;  
+}
+
+/********************************************************************* 
+*名    称: LcdWriteCmd(u8 cmd)
+*描    述:写数据到LCD1602,数据占一个字节
+*入口参数:dat,待写入数据
+*出口参数:无
+*********************************************************************/
+void LCD1602_Write_Dat(unsigned char dat) 
+{                          //写入字符显示数据到LCD
+	//while(LcdWaitReady());
+	delay_us(500);
+	LCD1602_RS(1); //= 1;
+	LCD1602_RW(0); //= 0;
+	LCD1602_EN(0); //= 0;
+	GPIOB->BSRR = dat<<8 & 0xff00;    ////P0 = dat
+  GPIOB->BRR = ((~dat)<<8) & 0xff00;
+	delay_us(50);
+	LCD1602_EN(1);// = 1;
+	delay_us(50);
+	LCD1602_EN(0);// = 0; 
+	delay_us(50);
+}
+/********************************************************************* 
+*名    称:InitLcd1602()
+*描    述:初始化1602液晶 
+*入口参数:无
+*出口参数:无
+*********************************************************************/	
+void Init_Lcd1602(void)
+{           
+	//LCD初始化设定
+	LCDGPIO_Configuration();
+	delay_ms(100);
+	LCD1602_Write_Cmd(0x38);          //16*2显示,5*7点阵,8位数据
+	delay_ms(30);
+	LCD1602_Write_Cmd(0x0c);          //显示开,关光标
+  delay_ms(30);
+	LCD1602_Write_Cmd(0x06);          //移动光标
+	delay_ms(30);
+	LCD1602_Write_Cmd(0x01);          //清除LCD的显示内容
+	delay_ms(30);
+}
+/********************************************************************* 
+*名    称:LcdClearScreen()
+*描    述:清屏
+*入口参数:无
+*出口参数:无
+*********************************************************************/
+void LcdClearScreen(void)
+{
+	LCD1602_Write_Cmd(0x01);
+}
+
+/********************************************************************* 
+*名    称:LcdOpenCursor()
+*描    述:打开光标的闪烁效果 
+*入口参数:无
+*出口参数:无
+*********************************************************************/
+void LcdOpenCursor(void)
+{
+	LCD1602_Write_Cmd(0x0F);
+}
+
+/********************************************************************* 
+*名    称:LcdCloseCursor()
+*描    述: 关闭光标显示 
+*入口参数:无
+*出口参数:无
+*********************************************************************/
+void LcdCloseCursor(void)
+{
+	LCD1602_Write_Cmd(0x0C);
+}
+
+
+void LCDGPIO_Configuration(void)
+{
+    GPIO_InitTypeDef GPIO_InitStructure;
+	
+	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
+	
+	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//RS RW EN 控制脚 时钟
+	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
+	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
+	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+	  GPIO_Init(GPIOB,&GPIO_InitStructure);
+		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; 
+	   //所有GPIO为同一类型端口
+		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;	 //开漏输出
+		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;	 //输出的最大频率为50HZ
+		GPIO_Init(GPIOB, &GPIO_InitStructure);   //初始化GPIOB端口
+	
+	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5;
+	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
+	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+	  GPIO_Init(Control_GPIO,&GPIO_InitStructure);
+}
+#else	
+
+//1602指令/数据 引脚  rs
+#define LCD_RS_Set()    GPIO_SetBits(GPIOB, GPIO_Pin_7)  
+#define LCD_RS_Clr()    GPIO_ResetBits(GPIOB, GPIO_Pin_7)  
+  
+//1602读写引脚  rw可以不用 直接接地 
+#define LCD_RW_Set()    GPIO_SetBits(GPIOB, GPIO_Pin_6)  
+#define LCD_RW_Clr()    GPIO_ResetBits(GPIOB, GPIO_Pin_6)  
+  
+//1602使能引脚  en
+#define LCD_EN_Set()    GPIO_SetBits(GPIOB, GPIO_Pin_6)  
+#define LCD_EN_Clr()    GPIO_ResetBits(GPIOB, GPIO_Pin_6)  
+ 
+
+//1602数据端口  PD4~7  //采用操作一组io写方法使用  不建议用
+#define DATAOUT(x)  GPIO_Write(LCD_DATA_PORT, x)  
+#define LCD_DATA_PORT GPIOB 
+
+
+void LCDGPIO_Configuration(void) 
+{  
+    GPIO_InitTypeDef    GPIO_InitStructure;  
+      
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);//打开时钟  
+       //dataIO GPIOA4~7 初始化  
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
+    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
+    GPIO_Init(LCD_DATA_PORT, &GPIO_InitStructure);                
+        // RS RW E IO初始化  
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5;  //rw rs en 
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
+    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
+    GPIO_Init(GPIOB, &GPIO_InitStructure);                
+}  
+  
+/* 检测液晶忙不忙 */  
+void LCD1602_Wait_Ready(void)  
+{  
+    int8_t sta;  
+    DATAOUT(0xff);    //PA端口全部置1  
+    LCD_RS_Clr();     //RS 0  
+    LCD_RW_Set();     //RW 1  
+    do  
+    {  
+        LCD_EN_Set();   //EN 1  
+        delay_ms(5);    //延时5MS  
+        sta = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15);//读取状态字  
+        LCD_EN_Clr();  //EN  0  
+    }while(sta & 0x80);//bit7等于1表示忙,重复检测到其为0停止  
+}  
+/*
+向1602写入一字节命令,cmd-待写入命令 
+//写入指令 RS-0  RW-0  
+*/  
+
+void LCD1602_Write_Cmd(unsigned char cmd)  
+{  
+	  char ik=0;
+	  delay_ms(10);    //不判忙信号 必须加入延时  
+    //LCD1602_Wait_Ready();  //判断忙不忙  
+    LCD_RS_Clr();     
+
+	    for(ik=0;ik<2;ik++) //操作一位一位的写数据进去  建议用这种写法  不影响其他位
+			{
+				   LCD_EN_Set();
+					 GPIO_ResetBits(GPIOB,GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);//数据口全部写低
+					if(cmd&0x80)  GPIO_SetBits(GPIOB,GPIO_Pin_15); 
+					if(cmd&0x40)  GPIO_SetBits(GPIOB,GPIO_Pin_14);
+					if(cmd&0x20)  GPIO_SetBits(GPIOB,GPIO_Pin_13);
+					if(cmd&0x10)  GPIO_SetBits(GPIOB,GPIO_Pin_12);
+					LCD_EN_Clr();  
+					cmd=cmd<<4;
+      }
+}  
+  
+/* 向1602写入一字节数据*/  
+void LCD1602_Write_Dat(unsigned char dat)  
+{  
+	     char ik=0;
+	    delay_ms(10);    //不判忙信号 必须加入延时 
+      LCD_RS_Set();   //1   
+		  for(ik=0;ik<2;ik++)
+			{
+				   LCD_EN_Set();
+					GPIO_ResetBits(GPIOB,GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
+					if(dat&0x80)  GPIO_SetBits(GPIOB,GPIO_Pin_15);
+					if(dat&0x40)  GPIO_SetBits(GPIOB,GPIO_Pin_14);
+					if(dat&0x20)  GPIO_SetBits(GPIOB,GPIO_Pin_13);
+					if(dat&0x10)  GPIO_SetBits(GPIOB,GPIO_Pin_12);
+					LCD_EN_Clr();  
+					dat=dat<<4;
+       }
+}  
+/* 初始化液晶*/  
+void Init_Lcd1602(void)  
+{  
+	  LCDGPIO_Configuration();//IO配置初始化
+    LCD1602_Write_Cmd(0x28);    //16*2显示,5*7点阵,4位数据口  
+    LCD1602_Write_Cmd(0x0C);    //开显示,光标关闭  
+    LCD1602_Write_Cmd(0x06);    //文字不动,地址自动+1  
+    LCD1602_Write_Cmd(0x01);    //清屏  
+}  
+
+#endif
+
+/************ 写字符数据函数  *****************
+//功能:在lcd1602指定位置上显示字符;
+//参数
+//p:    指向待显示数据指针
+//x:    X坐标
+//y:    Y坐标
+*/
+void WriteLcd1602_String(char x,char y,char  *p)
+{
+  if(y == 0)
+	{
+     LCD1602_Write_Cmd(0x80 + x);    
+	}
+	else
+	{
+      LCD1602_Write_Cmd(0xC0 + x);
+  }
+	while(*p != 0)
+	{
+        LCD1602_Write_Dat(*p);
+		    p++;
+  }
+}
+void L1602_printf(char x,char y,char *p,...)
+{
+	  char Lcdbuf[16];
+		va_list ap;
+		va_start(ap,p);
+		vsprintf(Lcdbuf,p,ap);
+		va_end(ap);
+		WriteLcd1602_String(x,y,Lcdbuf);
+}
+

+ 19 - 0
TEST_Prj/stm32_std_proprj/Demo/HARDWARE/lcd/drive_lcd1602.h

@@ -0,0 +1,19 @@
+#ifndef __DRIVE_LCD1602_H
+#define	__DRIVE_LCD1602_H
+#include "stm32f10x.h"
+
+//void LcdShowStr(char x, char y, char *str);
+void LCDGPIO_Configuration(void);
+void Init_Lcd1602(void);
+void L1602_printf(char x,char y,char *p,...);
+void LCD1602_Write_Cmd(unsigned char cmd) ;
+
+void WriteLcd1602_String(char x,char y,char  *p);
+void L1602_printf(char x,char y,char *p,...);
+//#define LCD602_Bin 1 
+void LCD1602_Write_Cmd(unsigned char cmd)  ;
+
+#endif 
+
+
+

Datei-Diff unterdrückt, da er zu groß ist
+ 7 - 8
TEST_Prj/stm32_std_proprj/Demo/USER/Demo.uvguix.liuhao


+ 54 - 30
TEST_Prj/stm32_std_proprj/Demo/USER/Demo.uvoptx

@@ -358,6 +358,30 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>9</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\HARDWARE\lcd\drive_12864.c</PathWithFileName>
+      <FilenameWithoutPath>drive_12864.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>10</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\HARDWARE\lcd\drive_lcd1602.c</PathWithFileName>
+      <FilenameWithoutPath>drive_lcd1602.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -368,7 +392,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -380,7 +404,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -392,7 +416,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -412,7 +436,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -424,7 +448,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -438,13 +462,13 @@
 
   <Group>
     <GroupName>FWLib</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -456,7 +480,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -468,7 +492,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -480,7 +504,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -492,7 +516,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -504,7 +528,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -516,7 +540,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -528,7 +552,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -540,7 +564,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -552,7 +576,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -564,7 +588,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -576,7 +600,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -588,7 +612,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -600,7 +624,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -612,7 +636,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -624,7 +648,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -636,7 +660,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -648,7 +672,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -660,7 +684,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -672,7 +696,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -684,7 +708,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -696,7 +720,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -708,7 +732,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -728,7 +752,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 11 - 1
TEST_Prj/stm32_std_proprj/Demo/USER/Demo.uvprojx

@@ -338,7 +338,7 @@
               <MiscControls></MiscControls>
               <Define>STM32F10X_MD,USE_STDPERIPH_DRIVER</Define>
               <Undefine></Undefine>
-              <IncludePath>..\HARDWARE\LED;..\SYSTEM\delay;..\SYSTEM\sys;..\SYSTEM\usart;..\USER;..\STM32F10x_FWLib\inc;..\CORE;..\HARDWARE\KEY;..\HARDWARE\LCD;..\HARDWARE\RTC;..\HARDWARE\WKUP;..\HARDWARE\DAC;..\HARDWARE\DMA;..\HARDWARE\IIC;..\HARDWARE\24CXX;..\HARDWARE\SPI;..\HARDWARE\FLASH;..\HARDWARE\REMOTE;..\HARDWARE\DS18B20;..\HARDWARE\oled;..\HARDWARE\ccs811;..\HARDWARE\dht11;..\HARDWARE\bh1750</IncludePath>
+              <IncludePath>..\HARDWARE\LED;..\SYSTEM\delay;..\SYSTEM\sys;..\SYSTEM\usart;..\USER;..\STM32F10x_FWLib\inc;..\CORE;..\HARDWARE\KEY;..\HARDWARE\LCD;..\HARDWARE\RTC;..\HARDWARE\WKUP;..\HARDWARE\DAC;..\HARDWARE\DMA;..\HARDWARE\IIC;..\HARDWARE\24CXX;..\HARDWARE\SPI;..\HARDWARE\FLASH;..\HARDWARE\REMOTE;..\HARDWARE\DS18B20;..\HARDWARE\oled;..\HARDWARE\ccs811;..\HARDWARE\dht11;..\HARDWARE\bh1750;..\HARDWARE\lcd</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>
@@ -427,6 +427,16 @@
               <FileType>1</FileType>
               <FilePath>..\HARDWARE\oled\oled.c</FilePath>
             </File>
+            <File>
+              <FileName>drive_12864.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\HARDWARE\lcd\drive_12864.c</FilePath>
+            </File>
+            <File>
+              <FileName>drive_lcd1602.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\HARDWARE\lcd\drive_lcd1602.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.