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

📄 main.c

📁 关于液晶显示器与三菱单片机连接的编程
💻 C
📖 第 1 页 / 共 3 页
字号:
/********************************************************************
    Create on         : 2005.6
    Last modifed on   : 2006 ver 1.0
    by   : Baisz(Sichuan University)
*********************************************************************/
#include "sfr62a.h"
#include "math.h"
#include "code.h"
void runaway();
void mcu_init();       /* 单片机初始化子程序 */
void lcd_init();       /* LCD初始化子程序 */
void Touchscreen_init();//触摸屏初始化子程序
//void display();
void clear_screen();          /* 清显示RAM 区(清屏)函数 */
void delay();
void delay1();
void Picture_0();
void Picture_1();
void Picture_2();
void Picture_3();
void Picture_4();
void Picture_5();
void Picture_6();
void Picture_7();


void pr11(unsigned char com_dat);           /* 参数指令写入入口 */
void pr12(unsigned char com_dat); 
     pr13(unsigned char com_dat); 
void box();
void box1();

void W_DOT1(int o_x,int o_y);
void W_DOT(int o_x,int o_y);
//void show();
//void CW_PR(char o_x,char o_y);
//void W_DOT(int o_x,int o_y);
void CCW_PR(unsigned char o_x, unsigned char o_y);
 void CCW_PR1(unsigned char o_x,unsigned char o_y);
 void CCW_PR2(unsigned char o_x,unsigned char o_y);
 void CCW_PR3(unsigned char o_x,unsigned char o_y);
 void CCW_PR4(unsigned char o_x,unsigned char o_y);
 void CCW_PR5(unsigned char o_x,unsigned char o_y);

 void WR_Zero(unsigned char a_x,unsigned char a_y);
 void WR_One(unsigned char a_x,unsigned char a_y);
 void WR_Two(unsigned char a_x,unsigned char a_y);
 void WR_Three(unsigned char a_x,unsigned char a_y);
 void WR_Four(unsigned char a_x,unsigned char a_y);
 void WR_Five(unsigned char a_x,unsigned char a_y);
 void WR_Six(unsigned char a_x,unsigned char a_y);
 void WR_Seven(unsigned char a_x,unsigned char a_y);
 void WR_Eight(unsigned char a_x,unsigned char a_y);
 void WR_Nine(unsigned char a_x,unsigned char a_y);
 void WR_Ge(unsigned char a_x,unsigned char a_y);
void WR_Xiang(unsigned char a_x,unsigned char a_y);
void WR_Dian(unsigned char a_x,unsigned char a_y);
void WR_Can(unsigned char a_x,unsigned char a_y);
void WR_Shu(unsigned char a_x,unsigned char a_y);
void WR_Liu(unsigned char a_x,unsigned char a_y);
void WR_Ya(unsigned char a_x,unsigned char a_y);
void WR_LETT_K(unsigned char a_x,unsigned char a_y);
void WR_LETT_W(unsigned char a_x,unsigned char a_y);
void WR_LETT_U(unsigned char a_x,unsigned char a_y);
void WR_LETT_P(unsigned char a_x,unsigned char a_y);
void WR_LETT_F(unsigned char a_x,unsigned char a_y);
void WR_LETT_I(unsigned char a_x,unsigned char a_y);
void WR_LETT_H(unsigned char a_x,unsigned char a_y);
void WR_LETT_H1(unsigned char a_x,unsigned char a_y);
void WR_LETT_T(unsigned char a_x,unsigned char a_y);
void WR_LETT_D(unsigned char a_x,unsigned char a_y);
void WR_LETT_A(unsigned char a_x,unsigned char a_y);
void WR_LETT_B(unsigned char a_x,unsigned char a_y);
void WR_LETT_C(unsigned char a_x,unsigned char a_y);
void WR_LETT_V(unsigned char a_x,unsigned char a_y);
void WR_LETT_a(unsigned char a_x,unsigned char a_y);
void WR_LETT_b(unsigned char a_x,unsigned char a_y);
void WR_LETT_c(unsigned char a_x,unsigned char a_y);
void WR_LETT_z(unsigned char a_x,unsigned char a_y);
void WR_LETT_m(unsigned char a_x,unsigned char a_y);
void WR_LETT_s(unsigned char a_x,unsigned char a_y);
void WR_LETT_d(unsigned char a_x,unsigned char a_y);
void WR_LETT_i(unsigned char a_x,unsigned char a_y);
void WR_LETT_v(unsigned char a_x,unsigned char a_y);
void WR_LETT_R(unsigned char a_x,unsigned char a_y);
void WR_LETT_M(unsigned char a_x,unsigned char a_y);
void WR_LETT_S(unsigned char a_x,unsigned char a_y);
void WR_Pic(unsigned char a_x,unsigned char a_y);
void WR_Pic1(unsigned char a_x,unsigned char a_y);
void WR_ABC(unsigned char a_x,unsigned char a_y);
void WR_ABC1(unsigned char a_x,unsigned char a_y);
void WR_ABC2(unsigned char a_x,unsigned char a_y);
void WR_ABC3(unsigned char a_x,unsigned char a_y);
void WR_ABC4(unsigned char a_x,unsigned char a_y);
     ReadFromCharFrom7843(); 
void WriteCharTo7843(unsigned char num); 		
void Disp_num(unsigned char a_x,unsigned char a_y,unsigned int loc_num);



 

             /* 写参数代码 */
unsigned char systab[8] = {0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
unsigned char scrtab[10] = {0x00,0x00,0xF0,0x00,0x40,0xF0,0x00,0x80,0x00,0x00};






void main()
{	   
	 unsigned int i,j;
	 unsigned int X=0,Y=0;
	     
	     mcu_init();
	     lcd_init();
	    Touchscreen_init();                                 	//启动SPI
          								
  delay();
  WriteCharTo7843(0x90);    								//送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
          							
  delay();
  p5_3=1; 
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop "); 
  p5_3=0; 
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  X=ReadFromCharFrom7843(); 								//读X轴坐标
 
 
  WriteCharTo7843(0xd0);    								//送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
  delay();
  
  p5_3=1; 
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  p5_3=0; 
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  asm(" nop ");
  Y=ReadFromCharFrom7843(); 								//读Y轴坐标
  //delay1(1000);
   asm(" nop ");
   asm(" nop ");
   asm(" nop ");
  p0_6=1;
  clear_screen();
  Disp_num(0x03,0x08,X%10);
  Disp_num(0x02,0x08,(X/10)%10);
  Disp_num(0x01,0x08,(X/100)%10);
  Disp_num(0x07,0x08,Y%10);
  Disp_num(0x06,0x08,(Y/10)%10);
  Disp_num(0x05,0x08,(Y/100)%10);
	     
	    
	 /*  Picture_0();
	   
	    clear_screen();
	     
	    Picture_1();
	    for(i=0;i<70;i++)
	    delay();
	    clear_screen();
	     Picture_2();
	     for(i=0;i<70;i++)
	    delay();
	    clear_screen();
	      Picture_3();
	      for(i=0;i<70;i++)
	    delay();
	    clear_screen();
	       Picture_4();
	       for(i=0;i<70;i++)
	    delay();
	    clear_screen();
	        Picture_5();
	        for(i=0;i<70;i++)
	    delay();
	    clear_screen();
	         Picture_6();
	         for(i=0;i<70;i++)
	    delay();
	    clear_screen();
	          Picture_7(); */
	 
     while(1){};
} 
	   
	
			 
		
  
        
    
      

// watch dog中断处理函数runaway
#pragma  INTERRUPT /B  runaway
void runaway(void)
{
	asm(" bset 1,03f1h");
	asm(" mov.b #07h,0ah");
	asm(" bset 3,04h");
	asm("mov.b #00h,0ah");
}

void Touchscreen_init()
{
	
}
/********************************************************************
初始化所有的寄存器和i/o口,和timer,a-d
*********************************************************************/
void mcu_init()
{
	  p0=0x00;
  	pd0=0xff;                //p0_7为蜂鸣器输出,其他不使用,均设为输出口
  	p1=0x00;
  	pd1=0x1f;                //p1_5~p1_7口设为输入,p1_0~p1_4控制对LCD的读写设为输出
  	pu03=1;                  //p1_4~p1_7上拉
  	p2=0x00;
  	pd2=0xff;                //p2为数据口,设为输出
  	p3=0x00;
  	pd3=0xff;                //p3不使用,设为输出
  	p4=0x00;
  	pd4=0xff;                //不使用,设为输出
  	p5=0x00;
  	pd5=0xff;
  	p6=0x00;
  	pd6=0x00;                //p6为仿真口输入
  	p7=0x00;
  	pd7=0xff;                //p7不使用,设为输出
  	p8=0x00;
  	pd8=0xc3;                //p8_0和p8_1为输出(控制继电器),p8_2~p8_4为输入,p8_5必须设为输入
  	asm(" mov.b #04h,0ah");  //重写pd9之前需对保护寄存器0ah的位2置1
  	pd9=0xff;                //p9不使用,设为输出
  	p9=0x00;
  	p10=0x00;
  	pd10=0x00;               //p10为AD输入

  	cm04=1; 	         //启动辅时钟(定时器计数时钟源); 系统时钟控制寄存器
        	                 //cm04:Xc口选择位  0:I/O口 1:Xcin-Xcout驱动

	//初始化Timer
  	ta3mr=0x00;        //时钟频率为f1=11.0592MHz,无gate功能,no pulse输出,时钟mode
  	ta3=0x04b0;        //周期为100us(when f1=12MHz)
  	ta3ic=6;           //中断优先级,最低为0最高为7,为0时中断禁止
  	ta3mr=0xc0;        //时钟频率为fc32=1.024kHz,无gate功能,no pulse输出,时钟mode
  	ta3=0x1388;        //周期为5s
  	ta3ic = 6;
  	ta2mr=0xc0;        //时钟频率为fc32=1.024kHz,无gate功能,no pulse输出,时钟mode
  	ta2=0x1388;        //周期为5s
  	ta2ic=0;           //禁止中断
  	ta1mr=0xc0;        //时钟频率为fc32=1.024kHz,无gate功能,no pulse输出,时钟mode
  	ta1=0xf000;        //周期为60s
    ta1ic=6;           //中断优先级为6
  	tb2mr=0x00;        //时钟频率为f1=11.0592MHz,无gate功能,no pulse输出,时钟mode
  	tb2=0x229;         //周期为0.05ms
  	tb2ic=0;           //中断优先级,最低为0最高为7,为0时中断禁止
  	ta0mr=0x01;        //事件计数模式
  	udf=0x01;          //加计数
  	onsf=0x40;         //TB2的溢出为计数源
  	ta0=0x159f;        //从5535开始加计数,至65535时溢出,每周期3000ms
  	ta0ic=6;

	//初始化AD
  	adcon0=0x90;       //时钟为fAD/2,软件触发,单次扫描模式
  	adcon1=0x23;       //8位模式,扫描通道位AN0~AN7
  	adcon2=0x01;       //有采样保持

	//初始化INT4
  	ifsr4=0;          //单向边沿触发
  	ifsr6=1;          //中断起因为INT4
  	int4ic=0x07;       //下降沿触发,中断优先级为7
  	ir_int4ic=0;       //清除中断请求位

	  s1ric=6;   /* 接收中断 */
	  u1mr=0x05; /* 8bit data, internal clock,1 stop bit, 无奇偶校验,sleep mode deselected */
	  u1c0=0x18; /* cts/rts disabled, f1 selected, 无数据在发送寄存器(发送完成后)时"空"标志置1 */
	  u1irs=1;   /* 发送结束后(发送寄存器空)产生中断 */
	  u1brg=5;   /* 比特率生成器,波特率115200(11.0592M晶振) */
	  u1brg=71;

//	初始化watchdog
  	wdc7=1;            //预分频比为128,12MHz时钟下溢出周期约为350ms

  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	delay();
  	  	
  	
  	
 }

void delay()
{ 
	for(count1=0;count1<60000;count1++)

    {
      asm(" nop "); 
      asm(" nop ");
      asm(" nop ");
      asm(" nop ");
      asm(" nop ");
      asm(" nop ");
      asm(" nop ");
      asm(" nop ");
    }
}


/********************************/
/* 初始化函数lcd_init           */
/* 内部调用函数:pr1(),pr12()   */
/* 函数调用入口:lcd_init()     */
/* 函数参数:para               */
/* 函数调用变量:无             */
/********************************/
void lcd_init()
{
	unsigned int j;
	
     
        
       
        //设置SYSTEM SET代码
       
        pr11( 0x40);
        for (j=0;j<8;j++)
        {
        	
                pr12(systab[j]);
        }
        //设置SCROLL代码
        
        pr11(0x44);
        for (j=0;j<10;j++)
        {
        	
        	pr12( scrtab[j]);
        }
        //设置HDOT SCR代码
      
        pr11(0x5A);
        
        pr12(0x00);
        //设置OVLAY代码
        
        pr11(0x5B);
       
        pr12(0x0c);
        
      
        pr11(0x5d);
        
        pr12(0x07);
       
        pr12(0x88);
        
        clear_screen();      //清显示RAM子程序
        
        
        pr11(0x59);

        pr12(0x54);
}

/************************************/
/* 清显示RAM 区(清屏)函数clear_screen      */
/* 内部调用函数:pr1(),pr12(),st3() */
/* 函数输入变量:无                 */
/* 函数调用入口:clear_screen()            */
/************************************/
void clear_screen()
{
	unsigned int i,j;
	//设置CSRDIR代码,无参数
	
	pr11(0x4C);
	//设置CSRW代码

	pr11(0x46);
	
	pr12(0x00);
	pr12(0x00);
	//设置MWRITE代码
	
	pr11(0x42);
	for(i=0;i<2195;i++)
	{
		for(j=0;j<30;j++)
		{
			
			pr12(0x00);
		}
	}
}


	


/************************************/
/* 写指令代码子程序             */
/* 函数输入变量:dat1,dat2,com      */
/************************************/
void pr11(unsigned char com_dat)                 /* 写指令代码 */
{    
	int i;
  p1_2 = 0;	//选通片选
 // pd2 = 0xff;
	p1_3 = 1;	/*置写命令状态*/
	for(i=0;i<10;i++);
	p0_4 = 1;	/*关掉读信号*/
	p1_0 = 0;	/*开写信号*/
	for(i=0;i<10;i++);
	p2 = com_dat;		/*输出命令字*/
	for(i=0;i<21;i++);
	p1_0 = 1;	/*关掉写信号*/
	//pd2 = 0x00;
	p1_2 = 1;	/*关片选*/
	   
   
}

void pr12(unsigned char com_dat)                 /* 写参数代码 */
{
	int i;
	p1_2 = 0;	/*选通片选*/
	//pd2 = 0xff;
	p1_3 = 0;	/*置写命令状态*/
	for(i=0;i<10;i++);
	p0_4 = 1;//关读信号
	p1_0 = 0;	/*开写信号*/
	for(i=0;i<10;i++);
	p2 = com_dat;		/*输出命令字*/
	for(i=0;i<21;i++);
	p1_0 = 1;	/*关掉写信号*/
	//pd2=0x00;
	p1_2 = 1;	/*关片选*/   
	 
}
pr13(unsigned char com_dat)                 /* 读参数代码 */
{
	int i;
	pd2 =0x00;
	pur0=0x30;
	asm(" nop "); 
  asm(" nop ");
	
	p1_2 = 0;	/*选通片选*/
	
	p1_3 = 1;	/*置读命令状态*/
	for(i=0;i<10;i++);
	p1_0 = 1;	/*关写信号*/
	p0_4 = 0; //开读信号
	for(i=0;i<15;i++);
	com_dat = p2;		/*输出命令字*/
	for(i=0;i<21;i++);
	p0_4 = 1;	/*关掉写信号*/
	
  p1_2 = 1;	/*关片选*/
  asm(" nop "); 
  asm(" nop ");
  pd2 = 0xff; 
	pur0=0x00;
	  
  return(com_dat);
}

void WriteCharTo7843(unsigned char num) 							//SPI写数据
{
	unsigned char i;	
	p5_3=0;
	for(i=128;i>0;)
	{
		if(num&i)
			{
				p6_3 = 1;
			}
		else
			{
				p6_3 = 0;
			}
		i=i/2;
	p5_3=0; 
	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
	asm(" nop "); //上升沿有效
	p5_3=1;  
	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
	asm(" nop ");
 }
}
ReadFromCharFrom7843() 														//SPI 读数据
{
	unsigned char i;
	unsigned int Num=0;
	for(i=0;i<12;i++)
	{
	  Num =Num*2;
		 p5_3=1;
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 p5_3=0;
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 asm(" nop ");
		 if(p6_2) Num++;
	}
	return(Num);
}	
	

void Picture_0()
{
  WR_Pic1(0x05,0x08);
  WR_ABC2(0x0a,0xbe);
  for(count1=0;count1<15;count1++)
  delay();
  WR_ABC2(0x0d,0xbe);
  for(count1=0;count1<15;count1++)
  delay();
  WR_ABC2(0x10,0xbe);
  for(count1=0;count1<15;count1++)
  delay();
  WR_ABC2(0x13,0xbe);
  for(count1=0;count1<15;count1++)
  delay();

⌨️ 快捷键说明

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