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

📄 keil705.c

📁 keil 8051 for sd1821 lcd
💻 C
📖 第 1 页 / 共 2 页
字号:
/*------------------------------------------------------------------------------
keil705.C
display p7056 
date : 18dec2006
name : lo yiu hung
function :
1. display char to display  :work
2. display pic to display   :work
3. test iic 
4. hm55b

------------------------------------------------------------------------------*/

#include <reg51.h>                             /* define 8051 registers */
#include <stdio.h>                             /* define I/O functions */
#include "scancodes.h"
sbit Key_Data = P3^4; //定义Keyboard引脚
sbit Key_CLK  =P3^3;
#define Busy    0x80 //用于检测LCM状态字中的Busy标识
sbit rs		=  P1^0;		// LCD Rs pin
sbit sclk	=  P1^1;		// for serial
sbit sdin	=  P1^2;
sbit rreset	=  P1^3;		// LCD RESET
sbit cs		=  P1^5;		// LCD cs pin
sbit key	=  P2^7;		// LCD cs pin
sbit hm_in  =  P3^2;		// hm55b IN
sbit csb	=  P1^4;		// hm55b cs
sbit cs7056	= P1^5;
sbit cs7083	=	P1^6;
sbit LCM_RW = P2^0; //定义LCD引脚
sbit LCM_RS = P2^1;
sbit LCM_E  = P2^2;
#define LCM_Data  P1;
#define TRUE    1
#define FALSE   0
char code Cls[] = {"                "};
/***************************************************************************/
#define	WriteDeviceAddress 0xa0
#define	ReadDviceAddress 0xa1

/***************************************************************************/
sbit	SCL=P1^4;
sbit	SDA=P1^3;
sbit	DOG=P3^7;

 unsigned char ReadDataLCM(void);
unsigned char ReadStatusLCM(void);
                   // MPU6800=1 for parallel, 0 for SPI-4
char code int2char[]="0123456789ABCDEF";
unsigned int getnumber (void);
void output (unsigned int);
unsigned char reading = 0;
static unsigned char IntNum = 0; //中断次数计数
static unsigned char KeyV; //键值
static unsigned char DisNum = 0; //显示用指针
static unsigned char Key_UP=0, Shift = 0;//Key_UP是键松开标识,Shift是Shift键按下标识
static unsigned char BF = 0; //标识是否有字符被收到

void display_tempreture(unsigned char number)
{
        unsigned char x,y;
        y=(number<<1) - 232;
        x=y/10;
        
        printf("a" ,int2char[x]);
        x=y%10;
        printf("b",int2char[x]);
}
 unsigned  char code pic1[] =
{
		0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
        0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
        0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0xFE,0x10,0x10,0x10,0x10,0xFE,0x00,0x00,0xFE,0x00,0x00,0xFE,0x80,0x80,0x80,0x00,0x00,0xFE,0x00,0x00,0xFE,0x12,0x12,0x12,0x0C,0x00,0x4C,0x92,0x92,0x92,0x92,0x64,0x00,0x00,0x00,0x00,0xFE,0x80,0x80,0x80,0x00,0x7C,0x82,0x82,0x82,0x82,0x44,0x00,0xFE,0x82,0x82,0x82,0x82,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
        0xFF,0x00,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x00,0xE0,0x00,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0xC0,0x00,0x80,0x40,0x20,0x20,0x20,0x40,0x80,0x00,0x20,0x20,0xE0,0x20,0x20,0x00,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00,0xC0,0xE0,0x00,0x80,0x40,0x20,0x40,0x80,0x00,0x20,0x20,0xE0,0x20,0x20,0x00,0xE0,0x20,0x20,0x20,0x20,0xC0,0x00,0xE0,0x00,0x20,0x40,0x80,0x80,0x40,0x20,0x00,0x00,0x00,0x00,0xFF,
        0xFF,0x00,0x00,0x00,0x00,0x0F,0x01,0x01,0x01,0x00,0x00,0x07,0x08,0x08,0x08,0x07,0x00,0x00,0x0F,0x08,0x08,0x08,0x00,0x00,0x0F,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0x07,0x00,0x03,0x04,0x08,0x08,0x08,0x04,0x03,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x03,0x0C,0x03,0x00,0x0F,0x00,0x0F,0x02,0x02,0x02,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x01,0x01,0x03,0x05,0x08,0x00,0x0F,0x00,0x08,0x04,0x03,0x03,0x04,0x08,0x00,0x00,0x00,0x00,0xFF,
        0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xA2,0xA2,0xA2,0x7C,0x00,0x7C,0x8A,0x8A,0x8A,0x70,0x00,0x82,0x44,0x38,0x38,0x44,0x82,0x00,0x7C,0x8A,0x8A,0x8A,0x70,0x00,0x30,0x28,0x24,0xFE,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
        0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
        0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,
};


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++ SWITCH FUNCTION TO TRANSMIT DATA IN 6800 OR SPI INTERFACE	+++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void tx_data(bit rrs,unsigned char lcddata,unsigned char i)
{
	unsigned char j;
	rs = rrs;
	cs	= 0;
	//cs7056 = 0;
	P2 = lcddata;
	//printf("%i ",lcddata);
	for (j = 0; j < 8; j++) 		// bit 1..8
	{
		if ((lcddata & 0x80) == 0x80)	
			sdin = 1;		
		else			
			sdin = 0;
		
		sclk = 0;
		sclk = 1;
		lcddata *= 2;
	}
	//printf(" ");
	cs = 1;
	//cs7056 =1;
	j = 0;
	i = i * 3;
	while (j > i) j++;
}
void delay (int i)
{
    int j; 
	j = 0;
    i = i * 30000;
	while (j > i) j++;
}

//+++++++++++++++++++++++++++++++++++
//+++++ MODULE H/W RESET		+++++
//+++++++++++++++++++++++++++++++++++
void hw_reset(void)
{
	rreset = 0;
	rreset = 1; 			// module reset
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++      DECLARATION INITIALISATION TO TEST CELL P7083      +++++
//+++++            (for use with INTERNAL Vop)                 +++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void sw_init7056(void)
{
    tx_data(0,0xe2,4);      // Reset

    tx_data(0,0x23,4);      // regulator
    tx_data(0,0x48,4);      // set multiplex ratio
    tx_data(0,64,4);        // 1/64 + icon = 65; 2 nd byte
    tx_data(0,0x55,4);      // 1/9 bias
    tx_data(0,0x66,4);      // 5x voltage booster
    tx_data(0,0x81,4);      // evr set electronic volume register
//    tx_data(0,0x16,4);      // evr data  VOP     ver.o 7.45v
//    tx_data(0,0x18,4);      // evr data  VOP       ver.b 7.52v
//	tx_data(0,0x1c,4); 	//evr data vop 7.69
	tx_data(0,0x1f,4); 	//evr data vop 7.69
 	tx_data(0,0xab,4);      // internal oscillator on
    tx_data(0,0x40,4);      // display initial display line register
    tx_data(0,0x00,4);      // 2nd byte
    tx_data(0,0xb0,4);      // page address
    tx_data(0,0x11,4);      // set column address msb
    tx_data(0,0x00,4);      // set column address lsb
    tx_data(0,0xa1,4);      // adc select
    tx_data(0,0xc8,4);      // shl select
    tx_data(0,0x2f,4);      // power control
    tx_data(0,0xa2,4);      // icon enable

    //tx_data(0,0x4f,4);      //set n-line inversion regieter
    //tx_data(0,0x05,4);      // 2nd 5
    //tx_data(0,0xe4,4);      //release n-line inversion	
    
    tx_data(0,0xaf,4);      // Display ON
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++ SWITCH FUNCTION TO TRANSMIT DATA IN 6800 OR SPI INTERFACE	+++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void tx_7056(bit rrs,unsigned char lcddata,unsigned char i)
{
	unsigned char j;
	rs = rrs;
    cs7056  = 0;
	for (j = 0; j < 8; j++) 		// bit 1..8
	{
		if ((lcddata & 0x80) == 0x80)
			sdin = 1;
		else
			sdin = 0;
		sclk = 0;
		sclk = 1;
		lcddata *= 2;
	}
	cs7056 = 1;
	j = 0;
	i = i * 3;
	while (j > i) j++;
}




//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++ 	 DECLARATION INITIALISATION TO TEST CELL P7083		+++++
//+++++ 		   (for use with INTERNAL Vop)				   +++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void sw_init(void)
{
	tx_data(0,0xe2,4);		// Reset
	tx_data(0,0xa0,4);		// adc select
	tx_data(0,0x70,4);		// sub inst. start

    //tx_data(0,0x01,4);      // 1st blk start line
    //tx_data(0,0x1c,4);      // 1st blk of disp unit (max 1dh)
    //tx_data(0,0x20,4);      // 2nd blk start line
    //tx_data(0,0x30,4);      // 2nd no. of disp unit

    tx_data(0,0x01,4);      // 1st blk start line
    tx_data(0,0x18,4);      // 1st blk of disp unit (max 1dh)
    tx_data(0,0x29,4);      // 2nd blk start line
    tx_data(0,0x34,4);      // 2nd no. of disp unit

	tx_data(0,0x40,4);		// partial disp on

	tx_data(0,0x50,4);		// no. of inverse higher
	tx_data(0,0x6c,4);		// no. of inverse lower
	tx_data(0,0x70,4);		// exec of the line inverse
	tx_data(0,0x8c,4);		// evr higher
	tx_data(0,0x90,4);		// evr lower
	tx_data(0,0xa0,4);		// exec of evr reg.
	tx_data(0,0x71,4);		// end of sub inst.
	tx_data(0,0xb6,4);		// bias 1/10
	tx_data(0,0x33,4);		// booster x5
	tx_data(0,0x21,4);		//internal power supply on
	tx_data(0,0x23,4);		//lcd driving voltage on
	tx_data(0,0xaf,4);		//display on
}


void all_on(void)
{
	unsigned char i, j;
	for (i = 0; i < 0x0c; i++)
	{
		tx_data(0,0x40,4);
		tx_data(0,0xc0+i,4);		/* Page address 'i'             /**/
		tx_data(0,0x10,4);			/* Column address A7-A4 = 0 	/**/
		tx_data(0,0x00,4);			/* Column address A3-A0 = 0 	/**/
		for (j = 0; j < 128; j++)
			tx_data(1,0xff,4);		//
	}
}

//++++++++++++++++++++++++++
//+++++ 'ALL OFF'      +++++
//++++++++++++++++++++++++++
void all_off(void)
{
	unsigned char i, j;

	for (i = 0; i < 0x0c; i++)			   /* 8 pages + COMS			   /**/
	{
		tx_data(0,0x40,4);
		tx_data(0,0xc0+i,4);			/* Page address 'i'             /**/
		tx_data(0,0x10,4);				/* Column address A7-A4 = 0 	/**/
		tx_data(0,0x00,4);				/* Column address A3-A0 = 0 	/**/
		for (j = 0; j < 128; j++)		/* 128 columns					/**/
			tx_data(1,0x00,4);			/* 'OFF' data                   /**/
	}
}


void display_pic ( unsigned char *bo)        /*  display 128x64 */
{	
	unsigned char i,j;
	for (i = 0; i < 8; i++)                 /*  pages  8                   /**/
	{
		tx_data(0,0x40,4);
		tx_data(0,0xc0+i,4);				/* Page address 'i'             /**/
		tx_data(0,0x10,4);					/* Column address A7-A4 = 0 	/**/
		tx_data(0,0x00,4);					/* Column address A3-A0 = 0 	/**/
        for (j = 0; j < 128; j++)            /* seg0 till seg95              /**/
        tx_7056(1,bo[128*i+j],4);
	}
}
void display_pic7056 ( unsigned char *bo)        /*  display 128x64 */
{	
	unsigned char i, j;
    for (i = 0; i < 8; i++)                 /*  pages  8                   /**/
	{
		tx_7056(0,0xb0+i,4);        /* Page address 'i'             /**/
        tx_7056(0,0x12,4);          /* Column address A7-A4 = 2     /**/
        tx_7056(0,0x00,4);          /* Column address A3-A0 = 0     /**/
        for (j = 0; j < 96; j++)            /* seg0 till seg95              /**/
        tx_7056(1,bo[96*i+j],4);
	}
}

void getline (char *line)  {
  while ((*line++ = getchar()) != '\n');
}

int atoi (char *line)  {
  bit sign;
  int number;

  /* skip white space */
  for ( ; *line == ' ' || *line == '\n' || *line == '\t'; line++);

  /* establish sign */
  sign = 1;
  if (*line == '+' || *line == '-')  sign = (*line++ == '+');

  /* compute decimal value */
  for (number=0; *line >= '0' && *line <= '9'; line++)
    number = (number * 10) + (*line - '0');

  return (sign ? number : -number);
}

unsigned int getnumber (void)  {
  char line [40];
  
  printf ("Input Number ? ");
  getline (line);
  return (atoi (line));
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++ DECLARATION OF FUNCTION 'ONES'        (ones)           +++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++
//+++++ 'ALL ON'       +++++
//++++++++++++++++++++++++++
void all_on7056()
{
    unsigned char i, j;
    tx_data(0,0xa3,4); 
    for (i = 0; i < 9; i++)
    {
        tx_7056(0,0xb0+i,4);        /* Page address 'i'             /**/
        tx_7056(0,0x12,4);          /* Column address A7-A4 = 2     /**/
        tx_7056(0,0x00,4);          /* Column address A3-A0 = 0     /**/
        for (j = 0; j < 96; j++)
            tx_7056(1,0xff,4);      // chess-1 data
    }
}

void all_off7056()
{
    unsigned char i, j;

    for (i = 0; i < 9; i++)             /* 8 pages + COMS               /**/
    {
        tx_7056(0,0xb0+i,4);            /* Page address 'i'             /**/
        tx_7056(0,0x12,4);              /* Column address A7-A4 = 1     /**/
        tx_7056(0,0x00,4);              /* Column address A3-A0 = 0     /**/
        for (j = 0; j < 128; j++)       /* 128 columns                  /**/
            tx_7056(1,0x0,4);          /* 'OFF' data                   /**/
    }

}




void LCD_WriteChar (unsigned char temp,unsigned char y,unsigned char x)
{

unsigned char code font6x8[][6] = {
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I

⌨️ 快捷键说明

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