#ifndef __LCD_H__
#define __LCD_H__
#include "type.h"
//LCM122*32 PIN define
#define CLK PORTC.5 //pc5
#define SID PORTC.4 //pc4
#define CS PORTB.4 //pb4
#define SET_CLK() CLK = 1;
#define CLR_CLK() CLK = 0;
#define SET_SID() SID = 1;
#define CLR_SID() SID = 0;
#define LCD_Enable() CS = 1;
#define LCD_DISAble() CS = 0;
#define SID_PIN_IN() DDRC.4 = 0;
#define SID_PIN_OUT() DDRC.4 = 1;
#define CLK_PIN_OUT() DDRC.5 = 1;
#define CS_PIN_OUT() DDRB.4 = 1;
#define SID_PIN PINC.4 //read pinx, not port!
#define LCD_Hi_Z() DDRC &= 0xCF;
//lcd serial command
//#define LCD_WRITE_COMMAND 0b11111000
//#define LCD_WRITE_DATA 0b11111010
//#define LCD_READ_STATUS 0b11111100
//#define LCD_READ_DATA 0b11111110
#define LCD_WRITE_COMMAND 0xF8
#define LCD_WRITE_DATA 0xFA
#define LCD_READ_STATUS 0xFC
#define LCD_READ_DATA 0xFE
void serial_write_byte(byte data);
byte serial_read_byte(void);
void LCDWriteCmd(byte command);
void LCDWritEDAta(byte data);
void InitLCD(void);
void LCD_Write_CGRAM(byte nBytes);
void LCD_Write_CGRAM(byte nBytes);
void writechar(byte value);
void writestring(byte flash *strn);
void gotoxy(byte line, byte position);
void LCDclrscr(void);
void blink(byte on_off);
void writeNumber(word value);
#endif
/*------------------------------------------------------------
FileName : lcd.c
Created by : ZhengYanbo
Created date : 2006.3.17
Last modified: 2006.3.17
Comments: : serial drive for st7920
-------------------------------------------------------------*/
#include "lcd.h"
#include "type.h"
/*
flash byte CGRAM[128] =
{
//目录循环
0xE3,0x9E,0x91,0x11,0x89,0x11,0x89,0x1E,
0x89,0x14,0x91,0x12,0xE3,0x91,0x00,0x00,
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,
0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40,
//文件循环
0xEE,0x8F,0x84,0x88,0x84,0x88,0xE4,0x8E,
0x84,0x88,0x84,0x88,0x8E,0xEF,0x00,0x00,
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x22,
0x40,0x42,0x3E,0xFC,0x00,0x40,0x00,0x20,
//随机模式
0xE1,0x1B,0x92,0x95,0x94,0x55,0xE7,0xD5,
0xA4,0x51,0x94,0x51,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,
0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40,
//磁盘循环
0xCE,0x74,0xA4,0x84,0x94,0x85,0x94,0x66,
0x94,0x14,0xA4,0x16,0xCE,0xE5,0x00,0x00,
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,
0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40
}; */
//**********************************************************
//用串行方式写一个字节数据到LCD
void serial_write_byte(byte data)
//**********************************************************
{
byte i;
//SID pin output mode
SID_PIN_OUT();
CLK_PIN_OUT();
CS_PIN_OUT();
for(i=0; i<8; i++)
{
if(data & 0x80)
SET_SID();
else
CLR_SID();
//send clk
CLR_CLK();
#asm("nop");
SET_CLK();
data<<=1;
}
}
//**********************************************************
//以串行方式从LCD中读一个字节,返回数据
byte serial_read_byte(void)
//**********************************************************
{
byte i, temp=0;
//SID pin input mode
SID_PIN_IN();
CLK_PIN_OUT();
CS_PIN_OUT();
for(i=0; i<8; i++)
{
temp<<=1;
//send clk
CLR_CLK();
#asm("nop");
SET_CLK();
//wait pin steady
#asm("nop");
temp = (byte)SID_PIN;
}
return(temp);
}
//**********************************************************
//读LCD的状态,读出BF信号
byte LCD_read_status(void)
//**********************************************************
{
byte temp;
LCD_Enable();
//send 0b11111100
[1] [2] [3] 下一页
本文关键字:程序 AVR单片机,单片机-工控设备 - AVR单片机