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

📄 display.c

📁 Avr Atmeg128汽车行驶记录仪 带有USB驱动 c语言
💻 C
📖 第 1 页 / 共 5 页
字号:
									0xAA,0xAA,0xA9,0xF9,0x29,0x0C,0x08,0x00,
									0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,
									0x4A,0x4A,0x4A,0x4B,0x48,0x60,0x40,0x00	};
/*	苏	*/
const prog_char PAGE_Car11[32]={	0x04,0x04,0x44,0x44,0x5F,0x44,0xF4,0x44,    // 苏
									0x44,0x44,0x5F,0xE4,0x44,0x06,0x04,0x00,
									0x00,0x88,0x46,0x20,0x10,0x0C,0x03,0x00,
									0x00,0x40,0x80,0x7F,0x02,0x04,0x0C,0x00	};
/*	沪	*/
const prog_char PAGE_Car12[32]={	0x10,0x22,0x64,0x0C,0x80,0x00,0xF8,0x88,    // 沪
									0x89,0x8A,0x8E,0x88,0x88,0xFC,0x08,0x00,
									0x04,0x04,0xFC,0x03,0x80,0x60,0x1F,0x00,
									0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00	};
/*	浙	*/
const prog_char PAGE_Car13[32]={	0x10,0x22,0x64,0x0C,0x90,0x10,0xFF,0x10,    // 浙
									0x90,0xFC,0x44,0x44,0xC2,0x62,0x40,0x00,
									0x04,0x04,0xFE,0x01,0x42,0x82,0x7F,0x41,
									0x20,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00	};
/*	皖	*/
const prog_char PAGE_Car14[32]={	0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x10,0x0C,    // 皖
									0x24,0x25,0x26,0x34,0x24,0x94,0x0C,0x00,
									0x00,0x3F,0x10,0x10,0x10,0xBF,0x41,0x31,
									0x0F,0x01,0x01,0x3F,0x41,0x41,0x71,0x00	};
/*	京	*/
const prog_char PAGE_Car15[32]={	0x08,0x08,0x08,0xE8,0x28,0x28,0x29,0x2E,    // 京
									0x28,0x28,0x28,0xF8,0x28,0x0C,0x08,0x00,
									0x00,0x00,0x40,0x23,0x1A,0x42,0x82,0x7E,
									0x02,0x0A,0x12,0x33,0x60,0x00,0x00,0x00	};
/*	查表	*/
const prog_char TABE_CAR[15][3]= {	0xB4,0xF3,0,
									0xD0,0xA1,1,
									0xD6,0xD0,2,
									0xD0,0xCD,3,
									0xBF,0xA8,4,
									0xB3,0xB5,5,
									0xBD,0xCE,6,
									0xBB,0xF5,7,
									0xC7,0xE1,8,
									0xD6,0xD8,9,
									0xCB,0xD5,10,
									0xBB,0xA6,11,
									0xD5,0xE3,12,
									0xCD,0xEE,13,
									0xBE,0xA9,14 };
//ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

//PGM_P AA = (&PAGE23[0][0]);
PGM_P XX ;
uchar *PP;
//PGM_P AAB = (&PAGE24[0][0]);
//zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
void Disp_pwm(void)
{
	//
	MCUCR |=_BV(SRE) |_BV(SRW10);	//外部SRAM可用   SRW10高段WAIT
	XMCRA |= _BV(SRW11);
//	XMCRB |= _BV(XMBK);				//外部SRAM的总线保持
	
	DDRD = 0XEF;
	DDRB = 0XFF;
	PORTD =0X03;
	DDRB = 0XFF;
	PORTB = 0X00;
	//加PWM用在LCD中

	TCCR0 |=_BV(CS01);
	
	TCCR3A |= _BV(COM3A1) ;
	TCCR3B |= _BV(CS31) |_BV(WGM33);
	DDRE |=_BV(PE3)|_BV(PE2);
	PORTE|=0X40;
	PORTE&=0XFB;
	OCR3A = 0X72;
	ICR3 = 0X00E5;
}

/*************************************/
/*           初始函数                */
/*************************************/
void LCD_INT(void)
{
	       com=reset;  /* 复位*/
           PR1();      /* 写指令函数 */
           PR4();      /* 写指令函数 */
           com=sleep_off;/* 关闭休闲状态*/
           PR1();
           PR4();
		   com=display_off;/* 关闭休闲状态*/
           PR1();
           PR4();
		   com=duty32;	/* 占空比为32DUTY*/
           PR1();
           PR4();
		   com=ADC_P;   /*  ADC=0正向顺序  */
           PR1();
           PR4();	
           com=start_line0;  /* 显示起始行为0 */
           PR1();
           PR4();	
           com=display_on;  /* 开显示  */
           PR1();
           PR4();

}


/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void)                 //1us延时函数
  {
   asm("nop");
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }
  
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }
  
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }
/*************************************/
/*      直接访问方式的驱动函数       */
/*************************************/
void  busy1(void)
        {
			uchar i;
			LED_E1();

           do
              {
			  	    i=LcdStateRead1;                /*  读状态字  */
			   }
           while ((i & 0x80));                /*  判“忙”标志  */
		 		  
        }


void  busy2(void)
        {
          uchar i;
		  LED_E2();
		  do
		  	{
				i=LcdStateRead2;			/*  读状态字  */	
			}
		  while((i & 0x80));				/*  判“忙”标志  */
		 }
/*************************************/
/*          写指令函数               */
/*************************************/
void  PR1(void)
        {
           busy1();                         /*  判忙  */
           LcdCommandWrite1 = com;			/*  写指令(E1)  */
        }

void  PR4(void)
        {
           busy2();                         /*  判忙  */
           LcdCommandWrite2 = com;			/*  写指令(E2)  */
        }
/*************************************/
/*        写显示数据函数             */
/*************************************/
void  PR2(void)
        {
           busy1();
           LcdDataWrite1 = dat1;			 /*  写显示数据(E1)  */
        }

void  PR5(void)
        {
           busy2();           
		   LcdDataWrite2 = dat1;			/*  写显示数据(E2)  */
		 }
/*************************************/
/*          读显示数据函数           */
/*************************************/
void  PR3(void)
        {
           busy1();
           //dat1=dradd1;                     /*  读显示数据(E1)  */
		   
        }

void  PR6(void)
        {
           busy2();
           //dat1=dradd2;                     /*  读显示数据(E2)  */
		   
        }



//

void LED_E1(void)
{
	PORTD |= _BV(PD7) | _BV(PD6); //		Y3
	PORTD &= ~_BV(PD5);

}

void LED_E2(void)
{
	PORTD |= _BV(PD5) | _BV(PD7); //		Y5
	PORTD &= ~_BV(PB6);
}

/*************************************/
/*             清屏函数              */
/*************************************/
void CLEAR(void)
        {
         unsigned int i;
                for(count1=0xb8;count1!=0xbc;count1++) /*以页地址作为循环量*/
                {
                  com=count1;  /* 页面地址设置 */
                  PR1();
                  PR4();
                  com=0x00;    /* 列地址设置为"0" */
                  PR1();
                  PR4();
                  for(i=0;i<62;i++)   /*清除所有SED1520的内部RAM单元*/
                      {
                        dat1=0x00;  /* 写入数据为"0x00"*/
                        PR2();
                        PR5();
                       }
                  }
        }

/*************************************/
/*          西文写入函数             */
/*************************************/
void CW_PR(PGM_P GG)//(void)
        {
        unsigned int j;
                j=para1;
                com=O_Y|0xb8;  /* 页地址设置 */
                PR1();
                PR4();
              if(O_X<j)  /* 是否小于SED1520控制器宽度 */
                 {
                   com=O_X;
                   PR1();   /* 小于写E1 */
                   O_Y=1;
                 }
              else
                 {
                   com=O_X-j;
                   PR4();    /* 不小于写E2 */
                   O_Y=0;
                 }
               for(count1=0;count1<6;count1++)
                 {
                   dat1=pgm_read_byte(GG);//(&CHTAB[code_1][count1]);   /* 取数据 */
                   GG++;   
					  if(O_Y==1)
                         {
                            PR2();     /* 写E1 */
                         }
                      else
                         {
                            PR5();    /* 写E2 */
                         }
                            com++;  /* 计算列 */

                      if(j==com)
                        {
                            if(O_Y==1) /* 判左屏出界还是右屏出界 */
                               {
                                   com=0;
                                   PR4();  /* 左屏出界写右屏 */
                                   O_Y=0;
                               }
                            else
                               {
                                   return;
                               }
                        }
                   }
          }


///*----------- 西文显示----------*/
void English_Dis(uchar *p,uchar y,uchar x,uchar gs)
{
	PGM_P TT;
	unsigned int a,b,i,j,h;
           a=y;
           b=x;
           code_1=0;
   for(i=0;i<gs;i++)
          {
           O_Y=a;
           O_X=b;
		   h= CtabAdd(*(p+i));
		   TT = ((&CHTAB[0][0])+h);
           CW_PR(TT);   /* 调西文写入函数 */
           b=b+7;  //8;******************************************
           code_1++;
              if(b==119)//120)
                {
                   a++;
                   b=0;
                     if(a==4)
                       {
                            return 0;
                       }
               }

          }
}

//ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
/*************************************/
/*  16*16点阵中文写入函数:CCW_PR     */
/*  函数参数选择:PARA1              */
/*  内部调用函数:PR1,PR2,PR4,PR5    */
/*  连接字库:      CCTAB            */
/*  函数调用入口:  CCW_PR()         */
/*  函数输入变量:  O_XL,O_YL,CODE_1 */
/*************************************/
void  CCW_PR(PGM_P CC)//(void)
        {
           unsigned int i,j,k;
                i=0;
                j=para1;
          loop: com=O_Y|0xb8;   /* 设页地址 */
                PR1();
                PR4();
                  if(O_X<j)    /* 是否小于SED1520控制器宽度 */
                     {
                        com=O_X;
                        PR1();   /* 小于写E1 */
                        k=1;
                     }
                  else
                     {
                        com=O_X-j;
                        PR4();   /* 不小于写E2 */
                        k=0;
                     }
                  for(count1=i;count1<i+16;count1++)
                     {
                         dat1=pgm_read_byte(CC);//(&PAGE23[code_1][count1]);  /* 取数据 */
						 CC++;
                         if(k==1)
                           {
                                PR2();   /* 写E1 */
                           }
                         else
                           {
                                PR5();    /* 写E2 */
                           }
                                com++;  /* 计算列 */
                         if(j==com)
                            {
                                if(k==1)  /* 判左屏出界还是右屏出界 */

⌨️ 快捷键说明

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