?? lcd.c
字號:
//////////////////////////////////////////////////////////////////////////////
//程序方式的串口,用來驅動LCD,IOB15為數據,IOB14為同步時鐘。
//一個字節分為兩次傳輸,先傳輸起始字節,5個1為開始標志,其后為RW,RS
//接口函數有
//lcd_init_usual(),作用是常用初始化液晶,無入口,無出口中
//chinese_series();作用是輸出漢字串16x16,參量為字串的指針
//code_write(); 參量為命令字。
//data_write(); 參量為要寫入的數或字母16x8,用ASC||碼做參數。
//================================================
//用戶指令集:
//清除顯示:01
//地址歸零:02
//點設定: 04 整體顯示不移動,光標左移,AC自動減1
// 05 整體顯示不移動,光標右移,AC自動加1
// 06 寫入時整體顯示向右移動,
// 07 整體顯示向左移動。
//顯示狀態:08 關閉整體顯示,關閉光標,光標位置不反白閃爍
// 0C 開啟整體顯示,關閉光標,光標位置不反白閃爍
// 0D 開啟整體顯示,關閉光標,光標位置反白閃爍
// 0E 開啟整體顯示,開啟光標,光標位置不反白閃爍
// 0F 開啟整體顯示,開啟光標,光標位置反白閃爍
//光標或顯示移位控制:
// 10 光標左移,AC減1
// 14 光標右移,AC加1
// 18 整體顯示,向左移動,光標跟隨,AC不變
// 1C 整體顯示,向右移動,光標跟隨,AC 不變
//功能設定:20 4 BIT 控制口,基本指令集
// 24 4 BIT 控制口,擴充指令集
// 30 8 BIT 控制口,基本指令集
// 34 8 BIT 控制口,擴充指
//////////////////////////////////////////////////////////////
#include "SPCE061v004.h"
#define code_start 0xf800
#define data_start 0xfa00
////////////////////////////////////////////////
///命令區定義;
//設定顯示地址;
#define row1_line1 0x0080
#define row1_line2 0x0081
#define row1_line3 0x0082
#define row1_line4 0x0083
#define row1_line5 0x0084
#define row1_line6 0x0085
#define row1_line7 0x0086
#define row1_line8 0x0087
#define row2_line1 0x0090
#define row2_line2 0x0091
#define row2_line3 0x0092
#define row2_line4 0x0093
#define row2_line5 0x0094
#define row2_line6 0x0095
#define row2_line7 0x0096
#define row2_line8 0x0097
#define row3_line1 0x0088
#define row3_line2 0x0089
#define row3_line3 0x008a
#define row3_line4 0x008b
#define row3_line5 0x008c
#define row3_line6 0x008d
#define row3_line7 0x008e
#define row3_line8 0x008f
#define row4_line1 0x0098
#define row4_line2 0x0099
#define row4_line3 0x009a
#define row4_line4 0x009b
#define row4_line5 0x009c
#define row4_line6 0x009d
#define row4_line7 0x009e
#define row4_line8 0x009f
//狀態設定
#define lcd_clear 0x0001
#define lcd_addres_0 0x0002;
//////////////////////////////////////
//public lcd_init_usual();
//public chinese_series();
//public code_write();
//public data_write();
//public set_position();
//============================================
//******************************************************************************
extern unsigned int msec ,sec ,min,hor; //毫秒,秒,分,小時變量
//*******************************************************************************
int lcd_init_usual()
{
init_iob_out();
code_write(1);
code_write(0x000e);
code_write(0x0006);
}
//===========================================
void init_iob_out()
{
*P_IOB_Dir|=0xc000;
*P_IOB_Attrib|=0xc000;
*P_IOB_Data&=0x3fff;
}
//===========================================
int set_position( position)
int position;
{
code_write(position);
}
//=========================================
int chinese_series(series)
int *series;
{
for(series;*series!=0;series++)
data_write(*series);
}
//========================================
int code_write(code)
int code;
{
int i,j;
code=code<<8;
i=j=code;
i&=0xf000;
j=j<<4;
j&=0xf000;
byte_write(code_start);
byte_write(code_start);
byte_write(i);
byte_write(j);
}
//================================
int data_write(data)
int data;
{
int i,j;
data=data<<8;
i=j=data;
i&=0xf000;
j=j<<4;
j&=0xf000;
byte_write(data_start); //啟始字符
byte_write(data_start);
byte_write(i);
byte_write(j);
}
///////////////////////////////////////
int byte_write(byte)
int byte;
{
int x=byte,i,r;
for(i=0;i<=7;i++)
{
r=*P_IOB_Data;
r&=0x3fff; // 最高2位B14,B15清零
x=byte;
x&=0x8000;
r|=x;
*P_IOB_Data=r;
*P_IOB_Data|=0x4000;
byte=byte<<1;
}
}
//////////////////////////////////////////////////////
void lcd_display(void)
{
set_position(0x0088);
data_write(((hor&0xf0)>>4)+0x30); //顯示小時
data_write((hor%10)+0x30);
set_position(0x008a);
data_write((min/10)+0x30); //顯示分鐘
data_write((min%10)+0x30);
set_position(0x008c);
data_write((sec/10)+0x30); //顯示秒
data_write((sec%10)+0x30);
set_position(0x008e);
data_write((msec/10)+0x30); //顯示毫秒
data_write((msec%10)+0x30);
//LCD顯示
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -