?? lcd.c
字號:
/****************************************Copyright(c)************************************
**-----文件說明---------------------------------------------------------------------------
**器件: PG160*128A
**控制器: T6963C
**說明: PROTEUS仿真軟件中的灰度LCD顯示器
**功能: LCD顯示器的基本驅(qū)動函數(shù)
*****************************************************************************************/
/*****************************************LCD驅(qū)動函數(shù)************************************/
//具體連接的管腳根據(jù)實際電路選擇
#include "config.h"
#define WR (1<<8) //寫選通信號: 低電平有效,輸出信號
#define RD (1<<9) //讀選通信號: 低電平有效,輸出信號
#define CD (1<<10) //通道選擇信號:1為指令通道,0為數(shù)據(jù)通道
extern uint8 Read_State(void);
extern void RW_Enable(void);
extern void Read_Auto(void);
extern void Write_Auto(void);
extern void Write_Data(uint8 data1,uint8 data2,uint8 cmd,uint8 num);
extern uint8 Read_Data (void);
extern void Lcd_Init(void);
extern uint8 ICO1[]; //這是自己摸索出來的外部聲明數(shù)組變量的方法
extern uint8 ICO2[];
/*****************************************************************************************
**名稱:ReadState()
**功能:讀LCD的當前狀態(tài)
**輸入:無
**輸出:uint8類型的LCD狀態(tài)
*****************************************************************************************/
uint8 Read_State()
{
uint8 temp;
IO0DIR=0x700; //輸入輸出連接
IO0SET=CD; //指令通道
IO0CLR=RD; //讀信號有效
temp=IO0PIN; //讀狀態(tài)
IO0SET=RD; //恢復(fù)原始狀態(tài)
return(temp); //返回狀態(tài)信息
}
/*****************************************************************************************
**名稱:RW_Enable()
**功能:等待可讀寫
**輸入:無
**輸出:無
*****************************************************************************************/
void RW_Enable()
{
uint8 temp;
temp=Read_State(); //讀LCD狀態(tài)
while((temp&0x03)!=0x03) //等待可讀寫狀態(tài)
temp=Read_State(); //讀LCD狀態(tài)
}
/*****************************************************************************************
**名稱:Read_Auto()
**功能:等待自動讀
**輸入:無
**輸出:無
*****************************************************************************************/
void Read_Auto()
{
uint8 temp;
temp=Read_State();
while((temp&0x04)!=0x04)//判斷狀態(tài)
temp=Read_State();
}
/*****************************************************************************************
**名稱:Write_Auto()
**功能:等待自動寫
**輸入:無
**輸出:無
*****************************************************************************************/
void Write_Auto() //等待自動寫
{
uint8 temp;
temp=Read_State();
while((temp&0x08)!=0x08)
temp=Read_State();
}
/*****************************************************************************************
**名稱:Write_Data(uint8 data1,uint8 data2,uint8 cmd,uint8 num)
**功能:寫入數(shù)據(jù)或命令
**輸入:data1:輸入數(shù)據(jù)1, data2:輸入數(shù)據(jù)2,cmd:輸入的命令1,num:參數(shù)的個數(shù)
**輸出:無
*****************************************************************************************/
void Write_Data(uint8 data1,uint8 data2,uint8 cmd,uint8 num)
{
uint8 temp;
temp=num;
if(temp==2)
{
RW_Enable();
IO0DIR=0x7ff;
IO0CLR=CD;
IO0CLR=0xff;
IO0SET=data1;
IO0CLR=WR;
IO0SET=WR;
}
if(temp==2||temp==1)
{
RW_Enable();
IO0DIR=0x7ff;
IO0CLR=CD;
IO0CLR=0xff;
IO0SET=data2;
IO0CLR=WR;
IOSET=WR;
}
RW_Enable();
IO0DIR=0x7ff;
IO0SET=CD;
IO0CLR=0xff;
IO0SET=cmd;
IO0CLR=WR;
IO0SET=WR;
}
/*****************************************************************************************
**名稱:Read_Data()
**功能:讀數(shù)據(jù)
**輸入:無
**輸出:返回uint8數(shù)據(jù)
*****************************************************************************************/
uint8 Read_Data () //讀數(shù)據(jù)
{
uint8 temp;
RW_Enable();
IO0DIR=0x700;
IO0CLR=CD;
IO0CLR=RD;
temp=IO0PIN;
IO0SET=RD;
return(temp);
}
/*****************************************************************************************
**名稱:Lcd_Init()
**功能:初始化LCD
**輸入:無
**輸出:無
*****************************************************************************************/
void Lcd_Init()
{
IO0DIR=CD|RD|WR;
IO0SET=CD|RD|WR;
Write_Data(0x00,0x00,0x40,0x02); //設(shè)置文本顯示首地址
Write_Data(0x14,0x00,0x41,0x02); //設(shè)置文本顯示寬度
Write_Data(0x40,0x10,0x42,0x02); //設(shè)置圖形顯示首地址 非常的重要
Write_Data(0x14,0x00,0x43,0x02); //設(shè)置圖形顯示寬度
Write_Data(0x00,0x00,0xa1,0x00); //光標形狀設(shè)置
Write_Data(0x00,0x00,0x80,0x00); //顯示方式設(shè)置,“或”
Write_Data(0x00,0x00,0x9c,0x00); //顯示開關(guān)設(shè)置
}
/*-------------------------------------------------------------------------結(jié)束---------*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -