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

📄 reseive.c

📁 12864液晶驱动程序
💻 C
字号:
//*
//名称:无线发射模块程序
//创建时间:2007-1-4
//编写人:ghj
//cpu at89c55  主频11.0593
//ad cs5460 采样频率 4.096
//波特率9600 8位 无奇偶
//*/
#include <reg52.h>
#include <send.h>
#include <intrins.h> //_nop_();
#include <absacc.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(void)
{
	Lcd_init();
	led = 1 ;
    EA  = 1  ;    //开总中断
    ET1 = 0  ;    //close定时器1中断控制位
    ET0 = 1 ;
    TMOD = 0x21 ; //定时器1工作在方式2
    TH1 = 0xfd ;
    TL1 = 0xfd ;
    TH0 = 0x00 ;
    TL0 = 0x01 ;
    TR0 = 0 ;
    TR1 = 1 ;     //启动定时器1
    SCON = 0x40 ;//串行口工作在方式1
    PCON = 0x00 ;
    ES = 1 ;     //串行口中断允许
	REN = 1 ;

	LCMprint(0x0010,01,"%s","低压变比测量");
	LCMprint(0x0610,01,"%s","高压变比测量");
	LCMprint(0x0218,01,"%s","保定朗信电");
 	LCMprint(0x0400,02,"%s","!#\"\"&@'\/");
	//Display_mainmenu();
	while(1)
	{
		;
	}
}
void timer0(void) interrupt 1
{
	led = !led ;
}
void serial(void) interrupt 4
{	TR0 = 1 ;
	if(RI)
	{
		RI = 0 ;
		EA = 0 ;
		SerialData = SBUF ;
		EA = 1 ;
		TR0 = 0 ;
		timernum = TL0 -1 ;
		TH0 = 0x00;
		TL0 = 0x01;
		//timernum = 0;
		//timernum = 0 ;
	}
}
void  Delay5us(void)
{
	uchar i;
	for(i=5;i>0;i--);
	_nop_();

}

/* the function for lcm*/
void  WrL_cmd(void)  //write left command
{
	Cs1 = 0 ;
	Cs2 = 1 ;
	Rs = 0 ;
	Rw = 1 ;
	P0 = 0xff ;
	Enb = 1 ;

	Rs = 0 ;
	Rw = 0 ;
	P0 = Com ;
	Enb = 1 ;
	Delay5us() ;
	Enb = 0 ;

}
void  WrR_cmd(void)  //write right command
{
	Cs1 = 1 ;
	Cs2 = 0 ;
	Rs = 0 ;
	Rw = 1 ;
	P0 = 0xff ;
	Enb = 1 ;

	Rs = 0 ;
	Rw = 0 ;
	P0 = Com ;
	Enb = 1 ;
	Delay5us() ;
	Enb = 0 ;	
}
void  WrL_data(void) //write left data
{
	Cs1 = 0 ;
	Cs2 = 1 ;
	Rs = 0 ;
	Rw = 1 ;
	P0 = 0xff ;
	Enb = 1 ;
	
	Rs = 1 ;
	Rw = 0 ;
	P0 = Dat ;
	Enb = 1 ;
	Delay5us() ;
	Enb = 0 ;
}
void  WrR_data(void) //write right data
{
	Cs1 = 1 ;
	Cs2 = 0 ;
	Rs = 0 ;
	Rw = 1 ;
	P0 = 0xff ;
	Enb = 1 ;
	
	Rs = 1 ;
	Rw = 0 ;
	P0 = Dat ;
	Enb = 1 ;
	Delay5us() ;
	Enb = 0 ;	
}

void  Lcd_init(void) //init  lcd
{
	Res = 0 ;
	Delay5us();
	Res = 1 ;
	Com = 0xC0 ;
	WrL_cmd();
	WrR_cmd();
	Com = 0x3f ;
	WrL_cmd();
	WrR_cmd();
	Clear_lcd();	
}
void  Clear_lcd(void) //clear lcd
{
	uchar i,j;
	for(i=0;i<8;i++)
	{
		Com = i | 0xb8 ;
		WrL_cmd();
		WrR_cmd();
		Com = 0x3f ;
		WrL_cmd();
		WrR_cmd();
		for(j=0;j<64;j++)
		{
			Dat = 0x00 ;
			WrL_data();
			WrR_data();
		}
	}
}
void  Display_oneChinese(uchar a[],uchar x,uchar y) //display one chinese
{
	uchar i ;
    uchar row ;
	row  = y ;

    for( i = 0 ; i < 32 ; i++ )
    {
        if( i==16)
        {
          x = x + 1 ;
        }
        else
        {
          ;
        }
        if( i >15)
        {

          row = y + i -16 ;
        }
        else
        {
          row = i + y ;
        }

        Com  =  0xB8 | x ;   //set X reg for lcd
        WrL_cmd() ;
        WrR_cmd() ;

        Com  =  row & 0x3f ; //set Y reg For lcd
        Com  =  Com | 0x40 ;
        WrL_cmd() ;
        WrR_cmd() ;

       if( row >= 64 )
       {
          Dat = a[i] ;
          WrR_data() ;
       }
       if( row < 64 )
       {
          Dat = a[i] ;
          WrL_data() ;
       }

    }
}
uchar LCMprint(uint display_adr,uchar displayType,char *fmt,...)
{
	va_list arg_ptr;
	char data c1,c2;
	uchar uLen,i=0,j=0,x,y;
	char idata tmpBuf[32];
	va_start(arg_ptr,fmt);
	uLen=(uchar)vsprintf(tmpBuf,fmt,arg_ptr);
	va_end(arg_ptr);
	
	x = display_adr >> 8 ;
	y = display_adr & 0xff ;	
	while(i<uLen)
	{
		c1 = tmpBuf[i];
		c2 = tmpBuf[i+1];
		if(displayType == 01)
		{
			for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
			{
				if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
				break ;
			}
			if(j<sizeof(GB_16)/sizeof(GB_16[0]))
			{
					Display_oneChinese(GB_16[j].Msk,x,y);
					y = y + 0x10 ;
					i = i + 1 ;				
			}			
		}
		if(displayType == 02)
		{
			for(j=0;j<sizeof(ascm)/sizeof(ascm[0]);j++)
			{	c2 = ascm[j].Index[0];
				if(c1 == ascm[j].Index[0])
				break;	
			}
			if(j<sizeof(ascm)/sizeof(ascm[0]))
			{
				Display_oneAsscii(ascm[j].Msk,x,y);
				y = y + 8 ;
			}
		}
		i = i + 1 ;
	}
	return 0 ;
}
void  Display_oneAsscii(uchar a[],uchar x,uchar y)  //display one number
{
	uchar i ;
    uchar row ;

    for( i = 0 ; i < 16 ; i++ )
    {
        if( i==8)
        {
          x = x + 1 ;
        }
        else
        {
          ;
        }
        if( i >7)
        {

          row = y + i -8 ;
        }
        if( i <= 7 )
        {
          row = i + y ;
        }

        Com  =  0xB8 | x ;
        WrL_cmd() ;
        WrR_cmd() ;

        Com  =  row & 0x3f ;
        Com  =  Com | 0x40 ;
        WrL_cmd() ;
        WrR_cmd() ;

       if( row >= 64 )
       {
          Dat = a[i] ;
          WrR_data() ;
       }
       if( row < 64 )
       {
          Dat = a[i] ;
          WrL_data() ;
       }

    }
}

⌨️ 快捷键说明

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