?? ht1621.c
字號:
//HT1621操作軟件包
//文件名:HT1621.c
//包含對HT1621操作的底層函數,如發送數據位,發送字節等等.
#include <reg51.h>
#include <intrins.h>
#include <HT1621.h>
//設置HT1621控制端口
sbit CS_PORT = P0^1; /*CS端口*/
sbit CLK_PORT = P0^2; /*WR端口*/
sbit SDA_PORT = P0^3; /*DATA端口*/
#define uchar unsigned char /*宏定義*/
#define uint unsigned int
#define _Nop() _nop_() /*定義空指令*/
//起動函數
//起動HT1621,以便進行器件操作.
void Start_spi()
{ CS_PORT=1;
CLK_PORT=1;
SDA_PORT=1;
_Nop(); /*起始條件建立時間大于3.34us*/
_Nop();
_Nop();
_Nop();
CS_PORT=0;
CS_PORT=0;
CLK_PORT=0;
CLK_PORT=0;
}
//發送數據位函數
//向HT1621發送dat的bitcnt位數據,由高位開始.(bitcnt不能大于8)
void SendBit(uchar dat,uchar bitcnt)
{ uchar i;
for(i=0;i<bitcnt;i++)
{ if(( dat & 0X80 ) == 0) SDA_PORT = 0;
else SDA_PORT = 1; /*發送數據由高位到低位傳送*/
_Nop(); /*起始條件建立時間大于4.7us,延時*/
_Nop();
_Nop();
_Nop();
CLK_PORT = 1; /*置時鐘線為高,通知被控器開始接收數位*/
_Nop(); /*起始條件建立時間大于4.7us,延時*/
_Nop();
_Nop();
_Nop();
_Nop();
CLK_PORT = 0; /*鉗住總線準備下一個數據位*/
dat=dat<<1; /*發送數據左移一位*/
}
}
// 發送字節函數
// 向HT1621發送一字節數據,數據單元首地址在指針buf中,發送字節數由bytecnt指定
void SendByte(uchar dat)
{ SendBit(dat,8); /*發送字節*/
}
// 發送命令函數(A類)
// 發送還HT1621命令時要先發送ID值,及命令字,用于設置HT1621.
void SENDCOMA(uchar com)
{ Start_spi();
SendBit(0X80,4); /*發送設置命令ID=100 0*/
SendByte(com); /*發送命令字*/
}
// 發送命令函數(B類)
// 發送還HT1621命令時要先發送ID值,及命令字,用于設置HT1621.
void SENDCOMB(uchar adr)
{ Start_spi();
SendBit(0XA0,4); /*發送寫顯示RAM命令ID=101 0*/
SendBit(adr,5); /*指定寫入地址*/
}
// 發送命令函數(C類)
// 發送還HT1621命令時要先發送ID值,及命令字,用于設置HT1621.
void SENDCOMC(uchar com)
{ Start_spi();
SendBit(0X90,4); /*發送命令ID=100 1*/
SendByte(com); /*發送命令*/
}
//初始化HT1621函數
void INTI1621()
{ SENDCOMA(BIAS);
SENDCOMA(XTAL32);
SENDCOMA(SYSEN);
SENDCOMA(LCDON);
SENDCOMA(TONE4K);
}
//向指定一個顯示緩沖區填充一個數據
void disp(uchar dat,uchar addr)
{ addr=addr<<3; /*左移3位,低5位作為RAM地址*/
SENDCOMB(addr);
SendByte(dat);
}
//循環填充并顯示某一段連地址地
//addr填充段首地址,顯示位數num,填充數據dat.
void dispsome(uchar num,uchar dat,uchar addr)
{ uchar i;
for(i=0;i<num;i++)
{ disp(dat,addr);
addr++;
addr++;
}
}
//左移一位循環顯示.
//顯示位數num,指針p指向一組要顯示的數組,顯示首地址addr
void disRound(uchar num, uchar *p, uchar addr)
{ uchar i;
for(i=0;i<num;i++)
{ disp(*p,addr);
p++;
addr++;
addr++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -