📄 keil705.c
字号:
/*------------------------------------------------------------------------------
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 + -