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

📄 arm_3310控制.c

📁 该程序是液晶3310的源码程序
💻 C
字号:
						 /****************************************************************************
* 文件名:GPIO1.C
* 功能:
* 说明: 硬件连接问题:
        1:3310的引脚配置:1,VCC,2,SCLK,3,SDIN,4,DC,5,SCE,6,GND,7,悬空,8,RET(复位端)          
        2:3310与ARM的连接:1.VCC==VCC,2.SCLK==P0.16,3.SDIN==P0.17,4.DC==P0.18,5.SCE==P0.19   
  6.GND==GND,7,OEN==100欧姆的电阻==GND,8.RET==VCC.   
****************************************************************************/
#include <LPC213x.H>                        	// LPC21xx definitions

#ifndef TRUE
#define TRUE  1
#endif

#ifndef FALSE
#define FALSE 0
#endif

typedef unsigned char  uint8;                   /* 无符号8位整型变量                        */
typedef signed   char  int8;                    /* 有符号8位整型变量                        */
typedef unsigned short uint16;                  /* 无符号16位整型变量                       */
typedef signed   short int16;                   /* 有符号16位整型变量                       */
typedef unsigned int   uint32;                  /* 无符号32位整型变量                       */
typedef signed   int   int32;                   /* 有符号32位整型变量                       */
typedef float          fp32;                    /* 单精度浮点数(32位长度)                 */
typedef double         fp64;                    /* 双精度浮点数(64位长度)                 */

/* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
#define Fosc            11059200                    //晶振频率
#define Fcclk           (Fosc * 4)                  //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco            (Fcclk * 4)                 //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk           (Fcclk / 4) * 1             //VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍

//========================3310液晶程序============================//
 
#define sclk  1<<16; //时钟 P0^16
#define sdin  1<<17; //数据 P0^17
#define dc    1<<18; //1写数据,0写指令 P0^18
#define sce   1<<19; //片选 P0^19
//#define res   1<<20; //复位,0复位 P0^20  可接VCC;

uint8 const mask_table[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uint8 const Hzk1212[][24];
void  DelayNS(uint32  dly);
void  LCMInit(void);
void  displayonechar1212(uint8 page, uint8 row, uint8 HZ_num, uint8 dd, uint8 dismode);
						// page:页    row:列   HZ_num:显示字数  dd:字符序号  dismode: 0为正常,1为反显//
void displaynum(uint8 page,uint8 row,uint16 dd);
void display_num(uint8 page,uint8 row,uint16 dd);
				        // page:页    row:列     dd:字符 //
void  write_byte(uint8 dd,uint8 abc);                        //写一字节 0:指令 1:数据
void  cls_lcd();                                            //清屏幕                 
void  cls_lcd_one(uint8 layer,uint8 column,uint8 end);      //参数1:第几行,参数2:第几列,参数3:截止位


//==========================================================//
// 函数名称:DelayNS()
// 函数功能:长软件延时
// 入口参数:dly		延时参数,值越大,延时越久
// 出口参数:无
//=========================================================//
void  DelayNS(uint32  dly)
{  
    uint32  i;

    for(; dly>0; dly--) 
        for(i=0; i<5000; i++);
}
//=======================LCM初始化程序=======================//
void LCMInit(void) //LCM初始化
{
  PINSEL1|= 0x00000000;
  IO0DIR |= 0x0F << 16;
  IO0SET |= 0x0F << 16; 
  write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
  write_byte(0xe3,0);//设定液晶偏置电压(高--低)
  write_byte(0x20,0);//使用基本指令
  write_byte(0x0C,0);//设定显示模式,正常显示
}


//====================写字节==============================//

void write_byte(uint8 dd,uint8 abc)//写一字节 0:指令 1:数据
{
   uint8 i; 
   IO0CLR=sce;
   if(abc==0) IO0CLR=dc;
   if(abc==1) IO0SET=dc;
   IO0CLR  =  sclk;
   for(i=0;i<8;i++)
   {  
      if(dd&mask_table[i])
	  {	
	      IO0SET=sdin;
	  }
      else   IO0CLR=sdin;               
	  IO0CLR=sclk;
      IO0SET=sclk; 
   }
   IO0SET=dc;
   IO0SET=sce;
   IO0SET=sdin;
}
//=========================设定地址============================//

void setadd(uint8 a,uint8 d)//设定地址
{
  write_byte((a|0x80),0);
  write_byte((d|0x40),0);
}

//==========================清屏==============================//

void cls_lcd()//清屏
{
  uint8 t,k;
  uint8 d=0;   
  for(t=0;t<6;t++)
   {   
     for(k=0;k<84;k++)
       {       
        write_byte(0,1);
        d=d+1;       
       } 
   }
}
//==========================清屏==============================//

void cls_lcd_one(uint8 layer,uint8 column,uint8 end)//参数1:第几行,参数2:第几列,参数3:截止位
{
  uint8 i,k;
  for(i=0;i<2;i++)
  {  
     setadd(column,layer);// 列,页  
     for(k=column;k<end;k++)     
     write_byte(0,1);      
	 layer++;
  }
}

//================显示12(宽)*12(高)点阵列汉字==============//
void displayonechar1212(uint8 page, uint8 row, uint8 HZ_num, uint8  dd, uint8 dismode) 
                       // page:页    row:列   HZ_num:显示字数  dd:字符序号  dismode: 0为正常,1为反显//
{
   uint8 row_i,xx,num=0,i;
   for(i=0;i<HZ_num;i++)
   {
      for(xx=0;xx<2;xx++)
      { 
         setadd(row,page);// 列,页
         for(row_i=num; row_i<num+12;row_i++) 
		 {
		    if(dismode==0)
		        write_byte(Hzk1212[dd][row_i],1);
			else
                write_byte(~(Hzk1212[dd][row_i]),1);
		 }
         num=num+12;page++;
      }
      row=row+12;dd++; 
      num=0;  page=page-2;
	  if(row>72) 
	  {
	     row=0;
		 page=page+2;
	  }
   }
}
//================显示12(宽)*12(高)点阵列汉字==============//


void displaynum(uint8 page,uint8 row,uint16 dd) 
               // page:页   row:列     dd:字符 //
{
  uint8 row_i,xx,num=0,l,SZ_num,z; 
  uint16 k,bak;
  if(dd>=1) 
  {SZ_num=1;}
  if(dd>=10) 
  {SZ_num=2;}
  if(dd>=100) 
  {SZ_num=3;}
  if(dd>=1000) 
  {SZ_num=4;}
  if(dd>=10000) 
  {SZ_num=5;}

  if(SZ_num==5)	
  {k=10000;}
  if(SZ_num==4)	
  {k=1000;}
  if(SZ_num==3)	
  {k=100;}
  if(SZ_num==2)	
  {k=10;}
  if(SZ_num==1)	
  {k=1;}
  bak=dd/k; z=SZ_num;
  for(l=0;l<SZ_num;l++)
  {
      for(xx=0;xx<2;xx++)
      { 
         setadd(row,page);// 列,页
         for(row_i=num; row_i<num+8;row_i++) write_byte(Hzk1212[bak][row_i],1);
         num=num+8;page++;
      }
	  num=0;  page=page-2;
	  if(SZ_num!=0)
	  {
	     bak=dd%k;
		 k=k/10;
         bak=bak/k;
	  }
	  row=row+6;
   }
}


void display_num(uint8 page,uint8 row,uint16 dd) 
               // page:页   row:列     dd:字符 //
{
 	uint8 row_i,xx,num=0; 

      for(xx=0;xx<2;xx++)
      { 
         setadd(row,page);// 列,页
         for(row_i=num; row_i<num+8;row_i++) write_byte(Hzk1212[dd][row_i],1);
         num=num+8;page++;
      }
	  
}
										  
//================================主程序===========================//

int main(void)
{
  
   LCMInit();  //初始化LCD
   cls_lcd();  //清屏幕
 
   DelayNS(10);
   displayonechar1212(0, 0, 10, 10,0) ;
   display_num(4,2,2);
   display_num(4,8,3);
   return 0;			
}
//===========================字模表============================// 

uint8 const Hzk1212[][24]={
//"0"
    
    {0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x0F,0x10,0x10,0x10,0x0F,0x00},

    {0x00,0x00,0x00,0x40,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x10,0x00,0x00},

    
    {0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x18,0x14,0x12,0x11,0x10,0x00},

    {0x00,0x00,0x40,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x08,0x10,0x11,0x11,0x0E,0x00},

    
    {0x00,0x00,0x80,0x40,0xE0,0x00,0x00,0x00,0x00,0x02,0x05,0x04,0x1F,0x14,0x00,0x00},

    {0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x09,0x11,0x11,0x11,0x0E,0x00},


   
    {0x00,0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x00,0x00,0x0F,0x11,0x11,0x11,0x0E,0x00},

    {0x00,0x00,0x60,0x20,0x20,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00},
    
    {0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x0E,0x11,0x11,0x11,0x0E,0x00},

    {0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x01,0x1A,0x12,0x12,0x0F,0x00},
	
	{0xA5,0x96,0xCC,0xBF,0x96,0xA5,0x18,0x67,0x84,0x7C,0x04,0x00,0x04,0x05,0x02,0x02,0x03,0x04,0x04,0x02,0x01,0x02,0x04,0x00},//"数",10

    {0x44,0x46,0x4A,0x4A,0x4A,0xEB,0x5A,0x4A,0x4A,0x42,0x46,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00},//"字",1

{0x20,0x10,0xFC,0x83,0x80,0x40,0xFF,0x20,0x10,0x0C,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x07,0x00},//"化",2

{0x11,0xF2,0x00,0x21,0xA5,0xBD,0xA7,0xA5,0xBD,0xA1,0x21,0x00,0x00,0x07,0x02,0x01,0x07,0x04,0x04,0x04,0x04,0x07,0x00,0x00},//"语",3

{0x10,0x12,0xD2,0x56,0x5A,0x53,0x5A,0x56,0xD2,0x12,0x10,0x00,0x00,0x00,0x07,0x05,0x05,0x05,0x05,0x05,0x07,0x00,0x00,0x00},//"音",4

{0x82,0x42,0xF2,0x0A,0x4F,0x4A,0x4A,0xEA,0x5A,0x4A,0x42,0x00,0x00,0x00,0x07,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00},//"存",5

{0x10,0xFC,0x13,0xF6,0x00,0x94,0xD4,0x7F,0x54,0xDC,0x12,0x00,0x00,0x07,0x00,0x03,0x02,0x00,0x07,0x05,0x05,0x07,0x00,0x00},//"储",6

{0x80,0x80,0xA0,0xBF,0xA4,0xA4,0xA4,0xA4,0x24,0xF6,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x03,0x00,0x00},//"与",7

{0x00,0xFF,0x01,0xF9,0x49,0x49,0x49,0xF9,0x01,0x01,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00},//"回",8

{0x04,0xFC,0x15,0x16,0xF4,0x04,0x18,0x67,0x84,0x7C,0x04,0x00,0x06,0x01,0x02,0x02,0x03,0x04,0x02,0x01,0x01,0x02,0x04,0x00},//"放",9

{0x00,0x02,0x4A,0xCA,0x6E,0xDA,0x49,0xC9,0x65,0x41,0x00,0x00,0x04,0x02,0x01,0x04,0x04,0x07,0x00,0x00,0x01,0x02,0x04,0x00},//"系",10




};

⌨️ 快捷键说明

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