/*本例程未使用6963的文本模式,使用程序填入字模也足夠快。程序以Youth所提供
的51例程移植過來,同時對有些地方做了簡化處理,增加了畫線畫圓的例程,好在
6963的畫點有專用指令,所以不用讀屏就可以直接畫點。
;************************************************************************
;連線圖:液晶屏分為8行*15列漢字,使用總線接口方式。*
;*LCM----S8515**LCM----S8515**LCM-----S8515**LCM-----S8515**
;*DB0-----PA0**DB4-----PA4**Rd------/Rd**Cd------PC0**
;*DB1-----PA1**DB5-----PA5**Wr------/Wr**CE------PC1**
;*DB2-----PA2**DB6-----PA6**RST------VCC**FS------Vcc**
;*DB3-----PA3**DB7-----PA7**
;注:S8515的晶振頻率為8MHz,嘗試使用11.0592MHz超頻,發(fā)現(xiàn)偶爾有數(shù)據(jù)丟失*
;************************************************************************/
#include
#defineWDR()asm("wdr")//匯編指令調(diào)用的定義
#defineBIT(x)(1<<(x))
#defineSRE7
#defineSRW6
#defineSE5
#defineulongunsignedlong
#defineuintunsignedint
#defineucharunsignedchar
//ASCII字符控制代碼解釋定義
#defineSTX0x02
#defineETX0x03
#defineEOT0x04
#defineENQ0x05
#defineBS0x08
#defineCR0x0D
#defineLF0x0A
#defineDLE0x10
#defineETB0x17
#defineSPACE0x20
#defineCOMMA0x2C
#defineTRUE1
#defineFALSE0
#defineHIGH1
#defineLOW0
//T6963C端口定義由匯編語言程序定義外部端口
__no_initstatICucharLCMCW@0xF100;//命令口
__no_initstaticucharLCMDW@0xF000;//數(shù)據(jù)口
//T6963C命令定義
#defineLC_CUR_POS0x21//光標位置設(shè)置
#defineLC_CGR_POS0x22//CGRAM偏置地址設(shè)置
#defineLC_ADD_POS0x24//地址指針位置
#defineLC_TXT_STP0x40//文本區(qū)首址
#defineLC_TXT_WID0x41//文本區(qū)寬度
#defineLC_GRH_STP0x42//圖形區(qū)首址
#defineLC_GRH_WID0x43//圖形區(qū)寬度
#defineLC_MOD_OR0x80//顯示方式:邏輯“或”
#defineLC_MOD_XOR0x81//顯示方式:邏輯“異或”
#defineLC_MOD_AND0x82//顯示方式:邏輯“與”
#defineLC_MOD_TCH0x83//顯示方式:文本特征
#defineLC_DIS_SW0x90//顯示開關(guān):D0=1/0:光標閃爍啟用/禁用;
//D1=1/0:光標顯示啟用/禁用;
//D2=1/0:文本顯示啟用/禁用;
//D3=1/0:圖形顯示啟用/禁用;
#defineLC_CUR_SHP0xA0//光標形狀選擇:0xA0-0xA7表示光標占的行數(shù)
#defineLC_AUT_WR0xB0//自動寫設(shè)置
#defineLC_AUT_RD0xB1//自動讀設(shè)置
#defineLC_AUT_OVR0xB2//自動讀/寫結(jié)束
#defineLC_INC_WR0xC0//數(shù)據(jù)一次寫,地址加1
#defineLC_INC_RD0xC1//數(shù)據(jù)一次讀,地址加1
#defineLC_DEC_WR0xC2//數(shù)據(jù)一次寫,地址減1
#defineLC_DEC_RD0xC3//數(shù)據(jù)一次讀,地址減1
#defineLC_NOC_WR0xC4//數(shù)據(jù)一次寫,地址不變
#defineLC_NOC_RD0xC5//數(shù)據(jù)一次讀,地址不變
#defineLC_SCN_RD0xE0//屏讀
#defineLC_SCN_CP0xE8//屏拷貝
#defineLC_BIT_OP0xF0//位操作:
//D0-D2:定義D0-D7位;D3:1置位;0:清除
__flashucharuPowArr[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//ASCII字模寬度及高度定義
#defineASC_CHR_WIDTH8
#defineASC_CHR_HEIGHT16
//ASCII字模,顯示為8*16
__flashcharASC_MSK[96*16]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*----*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,/*--!--*/
0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,/*--"--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,/*--#--*/
0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00,
0x00,0x18,0x18,0x3C,0x66,0x60,0x30,0x18,/*--$--*/
0x0C,0x06,0x66,0x3C,0x18,0x18,0x00,0x00,
0x00,0x00,0x70,0xD8,0xDA,0x76,0x0C,0x18,/*--%--*/
0x30,0x6E,0x5B,0x1B,0x0E,0x00,0x00,0x00,
0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x60,/*--&--*/
0x6F,0x66,0x66,0x3B,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,/*--’--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30,/*--(--*/
0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00,
0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,/*--)--*/
0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x36,0x1C,0x7F,/*--*--*/
0x1C,0x36,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,/*--+--*/
0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*--,--*/
0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,/*-----*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*--.--*/
0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,/*--/--*/
0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33,/*--0--*/
0x3B,0x3B,0x33,0x1E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C,/*--1--*/
0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,/*--2--*/
0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C,/*--3--*/
0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36,/*--4--*/
0x66,0x7F,0x06,0x06,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,/*--5--*/
0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66,/*--6--*/
0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,/*--7--*/
0x18,0x30,0x30,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C,/*--8--*/
0x6E,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,/*--9--*/
0x3E,0x0C,0x18,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,/*--:--*/
0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,/*--;--*/
0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00,
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,/*--<--*/
0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,/*--=--*/
0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,/*-->--*/
0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x0C,0x18,/*--?--*/
0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0xC3,0xC3,0xCF,0xDB,/*--@--*/
0xDB,0xCF,0xC0,0x7F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x66,/*--A--*/
0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,/*--B--*/
0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,/*--C--*/
0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x78,0x6C,0x66,0x66,0x66,/*--D--*/
0x66,0x66,0x6C,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,/*--E--*/
0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,/*--F--*/
0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,/*--G--*/
0x6E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7E,/*--H--*/
0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,/*--I--*/
0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,/*--J--*/
0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x6C,0x6C,0x78,/*--K--*/
0x6C,0x6C,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,/*--L--*/
0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x63,0x63,0x77,0x6B,0x6B,/*--M--*/
0x6B,0x63,0x63,0x63,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x63,0x63,0x73,0x7B,0x6F,/*--N--*/
0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,/*--O--*/
0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,/*--P--*/
0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,/*--Q--*/
0x66,0x66,0x66,0x3C,0x0C,0x06,0x00,0x00,
0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,/*--R--*/
0x6C,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x66,0x60,0x30,0x18,/*--S--*/
0x0C,0x06,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,/*--T--*/
0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,/*--U--*/
0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,/*--V--*/
0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,/*--W--*/
0x6B,0x36,0x36,0x36,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x34,0x18,0x18,/*--X--*/
0x2C,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,/*--Y--*/
0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7E,0x06,0x06,0x0C,0x18,/*--Z--*/
0x30,0x60,0x60,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,/*--[--*/
0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x3C,
0x00,0x00,0x00,0x60,0x60,0x30,0x30,0x18,/*----*/
0x18,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,/*--]--*/
0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x3C,
0x00,0x18,0x3C,0x66,0x00,0x00,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,0x38,0x18,0x0C,0x00,0x00,0x00,0x00,/*--`--*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x06,/*--a--*/
0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,/*--b--*/
0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,/*--c--*/
0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,/*--d--*/
0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,/*--e--*/
0x7E,0x60,0x60,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x30,0x30,0x30,0x7E,/*--f--*/
0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,/*--g--*/
0x66,0x66,0x66,0x3E,0x06,0x06,0x7C,0x7C,
0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,/*--h--*/
0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x18,0x00,0x78,0x18,0x18,/*--i--*/
0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x0C,0x0C,0x00,0x3C,0x0C,0x0C,/*--j--*/
0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x78,0x78,
0x00,0x00,0x00,0x60,0x60,0x66,0x66,0x6C,/*--k--*/
0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,/*--l--*/
0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7E,0x6B,0x6B,/*--m--*/
0x6B,0x6B,0x6B,0x63,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,/*--n--*/
0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,/*--o--*/
0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,/*--p--*/
0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60,
0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,/*--q--*/
0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x06,
0x00,0x00,0x00,0x00,0x00,0x66,0x6E,0x70,/*--r--*/
0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3E,0x60,0x60,/*--s--*/
0x3C,0x06,0x06,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x7E,0x30,0x30,/*--t--*/
0x30,0x30,0x30,0x1E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,/*--u--*/
0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,/*--v--*/
0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x63,0x6B,0x6B,/*--w--*/
0x6B,0x6B,0x36,0x36,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,/*--x--*/
0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,/*--y--*/
0x66,0x66,0x66,0x3C,0x0C,0x18,0xF0,0xF0,
0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,/*--z--*/
0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x18,0x18,0x18,0x30,/*--{--*/
0x60,0x30,0x18,0x18,0x18,0x0C,0x00,0x00,
0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,/*--|--*/
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x00,0x00,0x00,0x30,0x18,0x18,0x18,0x0C,/*--}--*/
0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x71,0xDB,/*--~--*/
0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*--.--*/
0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00
};
typedefstruct//漢字字模數(shù)據(jù)結(jié)構(gòu)
{
charIndex[2];
charMsk[32];
}typFNT_GB16;
__flashtypFNT_GB16GB_16[]=
{//顯示為16*16
"中",0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,
0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
"文",0x02,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,
0x08,0x20,0x08,0x20,0x08,0x20,0x04,0x40,
0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,
0x04,0x60,0x18,0x1E,0xE0,0x08,0x00,0x00,
"測",0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,
0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,
0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
"試",0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,
0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,
0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00
};
ucharconstturnf[8]={7,6,5,4,3,2,1,0};
uchargCurRow,gCurCol;//當前行、列存儲,行高16點,列寬8點
/*取當前行數(shù)據(jù)*/
ucharfnGetRow(void)
{
returngCurRow;
}
/*取當前列數(shù)據(jù)*/
ucharfnGetCol(void)
{
returngCurCol;
}
/************************************************/
/*狀態(tài)位STA1,STA0判斷(讀寫指令和讀寫數(shù)據(jù))*/
/*在讀寫數(shù)據(jù)或者寫入命令前必須保證均為1*/
/************************************************/
ucharfnSTA01(void)
{
uchari;
for(i=10;i>0;i--)
{
if((LCMCW&0x03)==0x03)//讀取狀態(tài)
break;
}
returni;//若返回零,說明錯誤
}
/********************************************************/
/*檢查STA2,如果STA2=1為自動讀狀態(tài)*/
/********************************************************/
ucharfnSTA2(void)
{
uchari;
for(i=10;i>0;i--)
{
if((LCMCW&0x04)==0x04)
break;
}
returni;//若返回零,說明錯誤
}
/********************************************************/
/*狀態(tài)位STA3判斷(STA3=1數(shù)據(jù)自動寫狀態(tài))*/
/********************************************************/
ucharfnSTA3(void)
{
uchari;
for(i=10;i>0;i--)
{
if((LCMCW&0x08)==0x08)
break;
}
returni;//若返回零,說明錯誤
}
/********************************************************/
/*狀態(tài)位STA6判斷(STA6=1屏讀/屏拷貝狀態(tài))*/
/********************************************************/
ucharfnSTA6(void)
{
uchari;
for(i=10;i>0;i--)
{
if((LCMCW&0x40)==0x40)
break;
}
returni;//若返回零,說明錯誤
}
/********************************************************/
/*寫雙參數(shù)的指令*/
/********************************************************/
ucharfnPR1(ucharuCmd,ucharuPar1,ucharuPar2)
{
if(fnSTA01()==0)
return1;
LCMDW=uPar1;
if(fnSTA01()==0)
return2;
LCMDW=uPar2;
if(fnSTA01()==0)
return3;
LCMCW=uCmd;
return0;//返回0成功
}
/********************************************************/
/*寫單參數(shù)的指令*/
/********************************************************/
ucharfnPR11(ucharuCmd,ucharuPar1)
{
if(fnSTA01()==0)
return1;
LCMDW=uPar1;
if(fnSTA01()==0)
return2;
LCMCW=uCmd;
return0;//返回0成功
}
/********************************************************/
/*寫無參數(shù)的指令*/
/********************************************************/
ucharfnPR12(ucharuCmd)
{
if(fnSTA01()==0)
return1;
LCMCW=uCmd;
return0;//返回0成功
}
/********************************************************/
/*寫數(shù)據(jù)*/
/********************************************************/
ucharfnPR13(ucharuData)
{
if(fnSTA3()==0)
return1;
LCMDW=uData;
return0;//返回0成功
}
/********************************************************/
/*讀數(shù)據(jù)*/
/********************************************************/
ucharfnPR2(void)
{
if(fnSTA01()==0)return1;//獲取狀態(tài),如果狀態(tài)錯
returnLCMDW;//返回數(shù)據(jù)
}
/********************************************************/
/*設(shè)置當前地址*/
/********************************************************/
voidfnSetPos(ucharurow,ucharucol)
{
uintiPos;
iPos=urow*30+ucol;
fnPR1(LC_ADD_POS,iPos&0xFF,iPos/256);
gCurRow=urow;
gCurCol=ucol;
}
/********************************************************/
/*設(shè)置當前顯示行、列*/
/********************************************************/
voidcursor(ucharuRow,ucharuCol)
{
fnSetPos(uRow*16,uCol);
}
/********************************************************/
/*清屏*/
/********************************************************/
voidcls(void)
{
uinti;
fnPR1(LC_ADD_POS,0x00,0x00);//置地址指針為從零開始
fnPR12(LC_AUT_WR);//自動寫
for(i=0;i<240*128/8;i++)//清一屏
{
fnSTA3();
fnPR13(0x0);//寫數(shù)據(jù),實際使用時請將0x55改成0x0
}
fnPR12(LC_AUT_OVR);//自動寫結(jié)束
fnPR1(LC_ADD_POS,0x00,0x00);//重置地址指針
gCurRow=0;//置地址指針存儲變量
gCurCol=0;
}
/********************************************************/
/*LCM初始化*/
/********************************************************/
charfnLCMInit(void)
{
if(fnPR1(LC_TXT_STP,0x00,0x00)!=0)//文本顯示區(qū)首地址
return(0xff);
fnPR1(LC_TXT_WID,0x1E,0x00);//文本顯示區(qū)寬度
fnPR1(LC_GRH_STP,0x00,0x00);//圖形顯示區(qū)首地址
fnPR1(LC_GRH_WID,0x1E,0x00);//圖形顯示區(qū)寬度
fnPR12(LC_CUR_SHP|0x01);//光標形狀
fnPR12(LC_MOD_OR);//顯示方式設(shè)置
fnPR12(LC_DIS_SW|0x08);//顯示開關(guān)設(shè)置
return0;
}
/********************************************************/
/*ASCII(8*16)及漢字(16*16)顯示函數(shù)*/
/********************************************************/
uchardprintf(ucharx,uchary,char*ptr)
{
charc1,c2,cData;
uchari,j,uLen,uRow,uCol;
uintk;
uLen=0;
i=0;
uRow=y;
uCol=x;
fnSetPos(uRow*16,uCol);//起點定位
while(ptr[uLen]!=0){uLen++;};//探測字串長度
while(i
c1=ptr[i];
c2=ptr[i+1];
//ascii字符與漢字內(nèi)碼的區(qū)別在于128做分界,大于界線的為漢字碼
uRow=fnGetRow();
uCol=fnGetCol();
if(c1<=128)//ASCII
{
for(j=0;j<16;j++)//寫16行
{
fnPR12(LC_AUT_WR);//寫數(shù)據(jù)(命令)
if(c1>=0x20)
{
fnPR13(ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)]);
}
else
fnPR13(cData);
fnPR12(LC_AUT_OVR);//寫數(shù)據(jù)結(jié)束
fnSetPos(uRow+j+1,uCol);
}
if(c1!=BS)//非退格
uCol++;//列數(shù)加1
}
else//中文
{
for(j=0;j
if(c1==GB_16[j].Index[0]&&c2==GB_16[j].Index[1])
break;
}
for(k=0;k
fnSetPos(uRow+k,uCol);
fnPR12(LC_AUT_WR);//寫數(shù)據(jù)
if(j
fnPR13(GB_16[j].Msk[k*2]);
fnPR13(GB_16[j].Msk[k*2+1]);
}
else//未找到該字
{
if(k
fnPR13(0x00);
fnPR13(0x00);
}
else
{
fnPR13(0xff);
fnPR13(0xff);
}
}
fnPR12(LC_AUT_OVR);
}
uCol+=2;
i++;
};
if(uCol>=30)//光標后移
{
uRow+=16;
if(uRow<0x80)
uCol-=30;
else
{
uRow=0;
uCol=0;
}
}
fnSetPos(uRow,uCol);
i++;
}
returnuLen;//返回字串長度,漢字按2字節(jié)計算
}
/*==============================*/
/*延時*/
/*==============================*/
voidshortdelay(uinttt)
{
uchari;
while(tt)
{
i=100;
while(i)i--;
tt--;
};
}
/****************************************/
/*畫點*/
/****************************************/
voidpoint(ucharx,uchary,uchars)
{
ucharx1;
x1=x>>3;//取Y方向分頁地址
fnSetPos(y,x1);//起點定位
x1=turnf[x&0x07];
x1=0xF0|x1|s;//字節(jié)內(nèi)位置計算
fnPR12(x1);//畫上屏幕,S顯示屬性8畫點0擦除點
}
/************************************************/
/*畫線。任意方向的斜線,直線數(shù)學方程aX+bY=1*/
/************************************************/
voidLinexy(ucharx0,uchary0,ucharxt,ucharyt,uchars)
{
registeruchart;
intxerr=0,yerr=0,delta_x,delta_y,distance;
intincx,incy,uRow,uCol;
delta_x=xt-x0;//計算坐標增量
delta_y=yt-y0;
uRow=x0;
uCol=y0;
if(delta_x>0)incx=1;//設(shè)置單步方向
elseif(delta_x==0)incx=0;//垂直線
else{incx=-1;delta_x=-delta_x;}
if(delta_y>0)incy=1;
elseif(delta_y==0)incy=0;//水平線
else{incy=-1;delta_y=-delta_y;}
if(delta_x>delta_y)distance=delta_x;//選取基本增量坐標軸
elsedistance=delta_y;
for(t=0;t<=distance+1;t++)
{//畫線輸出
point(uRow,uCol,s);//畫點
xerr+=delta_x;
yerr+=delta_y;
if(xerr>distance)
{
xerr-=distance;
uRow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
uCol+=incy;
}
}
}
/************************************************/
/*畫圓。數(shù)學方程(X-Ox)^2+(Y-Oy)^2=Rx^2*/
/************************************************/
voidcircle(ucharOx,ucharOy,ucharRx,uchars)
{
unsignedintxx,rr,xt,yt,rs,row,col;
yt=Rx;
rr=Rx*Rx+1;//補償1修正方形
rs=(yt+(yt>>1))>>1;//(*0.75)分開1/8圓弧來畫
for(xt=0;xt<=rs;xt++)
{
xx=xt*xt;
while((yt*yt)>(rr-xx))yt--;
row=Ox+xt;//第一象限
col=Oy-yt;
point(row,col,s);
row=Ox-xt;//第二象限
point(row,col,s);
col=Oy+yt;//第三象限
point(row,col,s);
row=Ox+xt;//第四象限
point(row,col,s);
/***************45度鏡象畫另一半***************/
row=Ox+yt;//第一象限
col=Oy-xt;
point(row,col,s);
row=Ox-yt;//第二象限
point(row,col,s);
col=Oy+xt;//第三象限
point(row,col,s);
row=Ox+yt;//第四象限
point(row,col,s);
}
}
voidmain(void)//測試用
{
uchari;
shortdelay(1200);
MCUCR|=BIT(SRE)|BIT(SRW);
fnLCMInit();
cls();
cursor(0,0);
dprintf(3,3,"Thisisatest:中文測試");
dprintf(0,6,"LCMExsampleuse90S8515&6963");
dprintf(15,7,"~Xiaoqi~");
Linexy(10,20,239,110,8);//畫斜線1
Linexy(10,20,217,1,8);//斜線2
Linexy(239,110,217,1,8);//斜線3
circle(185,45,40,8);//畫圓
circle(185,45,41,8);//畫同心圓加粗
shortdelay(24000);
while(1)
{
//變化圓演示,直徑不斷的變化,由大到小再由小到大來回縮放
for(i=40;i>5;i--)
{
circle(185,45,i+1,0);//擦除外圓
circle(185,45,i,8);
circle(185,45,i-1,8);
shortdelay(3600);
};
shortdelay(8000);
for(i=5;i<40;i++)
{
circle(185,45,i-1,0);//擦除內(nèi)圓
circle(185,45,i,8);
circle(185,45,i+1,8);
shortdelay(1800);
};
shortdelay(4000);
};
}