?? ts128647921chuank.c
字號(hào):
/*********************************************
1.功能:ts12864LCD(內(nèi)控芯片st7920)串行顯示程序
2.I/O腳使用
io_LCDsid(數(shù)據(jù))---------串行數(shù)據(jù)輸入端
io_LCDsclk(時(shí)鐘)------串行同步時(shí)鐘端
3.調(diào)試環(huán)境:12M晶振(51系列12時(shí)鐘模式)
若為其他時(shí)鐘則作如下修改:
(1)修改宏定義delaycomm.h
(3)修改宏定義DELAY1US_M
3.程序大小(ROM估計(jì)):
4.數(shù)據(jù)大小(RAM估計(jì)):
5.運(yùn)行時(shí)間(與調(diào)用函數(shù)有關(guān)):
***********************************************/
//#define __TS128647921CHUANK_DEBUG__ //調(diào)試后,屏蔽此定義
//#ifdef __TS128647921CHUANK_DEBUG__
// #include<wywcomm.h>
#define uint8 unsigned char
#define uint16 unsigned int
#define int16 int
#include<reg51.h>
sbit io_LCDsid = P3^0; /*串行數(shù)據(jù)輸入端 */ //液晶顯示所用端口
sbit io_LCDsclk = P3^5; /*串行同步時(shí)鐘端 */
//此模塊調(diào)用其它模塊的外部變量和函數(shù)的聲明(此程序無(wú))
#include "E:\ouyw\delaycomm\src\delaycomm.h"
//此模塊的宏定義(常數(shù)等)
#define DELAY1US_M _nop_()
//此模塊必要的庫(kù)函數(shù)包含(include)
#include<intrins.h>
#include<math.h>
//全局變量(靜態(tài)或一般)的定義
//以下為函數(shù)定義
static void v_write_f(uint8 x) //寫(xiě)數(shù)據(jù)函數(shù)
{
uint8 i;
for(i=8;i>0;i--)
{ io_LCDsclk = 0;
if (x & 0x80 ) io_LCDsid = 1;
else io_LCDsid = 0; //將并行數(shù)據(jù)轉(zhuǎn)換成串行
DELAY1US_M;
io_LCDsclk = 1; //給一個(gè)CP脈沖
DELAY1US_M;
x<<=1;//x=_crol_(x,1); 好像前一種的效果更好
}
v_DelayX10us_f(16);
}
//屏蔽的程序
/********每個(gè)位進(jìn)行 串行-并行轉(zhuǎn)換 送數(shù)據(jù)到MUC***********
static uint8 read()
{
uint8 i,fan=0x00;
for(i=0;i<8;i++)
{io_LCDsclk = 0;
if(io_LCDsid == 1) fan+=1;
if(i != 7)fan=fan<<1;
io_LCDsclk = 1;}
return fan;
}
//*************LCD問(wèn)忙**********************/
static void lcd_mang(void)
{
uint8 i=1;
while(i)
{
v_write_f(0xfc);
io_LCDsclk = 1;
if(io_LCDsid ==1 ) i=1;
else i=0;
io_LCDsclk = 0;
}
}
//******根據(jù)串行協(xié)議讀出數(shù)據(jù)或控制指令******/
/*static uint8 lcd_du(uint8 fang_s)
{
uint8 fan;
lcd_mang();
if(fang_s==0) v_write_f(0xfc); //H表示讀出LCD內(nèi)部RAM,L表示讀出BF與AC
else v_write_f(0xfe);
fan=read();
fan=fan|(read()>>4);
return fan;
}
*/
void v_WriteIns_f(uint8 x)
{
lcd_mang();
v_write_f(0xf8);
v_write_f( x & 0xf0 );
v_write_f( x << 4) ;
}
static void v_WriteData_f(uint8 x)
{
lcd_mang();
v_write_f(0xfa);
v_write_f( x & 0xf0 );
v_write_f( x << 4) ;
}
//**************寫(xiě)入位置轉(zhuǎn)換************
static void LcdWritePlace(uint8 yx)
{
uint8 i;
switch(yx>>4)
{ case 0:i=0x80;break;
case 1:i=0x90;break;
case 2:i=0x88;break;
case 3:i=0x98;break;
default:i=0x80;break;
}
v_WriteIns_f((yx&0x0f)+i);
}
//***************初始化**************
void v_LcdWriteCharIni_f(void)
{
v_WriteIns_f(0x30); //寫(xiě)指令,使用基本指令
v_WriteIns_f(0x01); //寫(xiě)指令,清屏
v_DelayX10ms_f(1);
// v_write_f_ins(0,0x02);
v_WriteIns_f(0x06); //寫(xiě)指令,寫(xiě)入時(shí)游標(biāo)右移
v_WriteIns_f(0x0c); //寫(xiě)指令,顯示開(kāi),游標(biāo)關(guān)
}
//*************光標(biāo)控制***************
//功能:光標(biāo)閃爍控制
//說(shuō)明:輸入k :控制光標(biāo)閃爍,k=0光標(biāo)閃爍,k=1光標(biāo)不閃爍
void v_LcdCursorCommend_f(bit k)
{
if(k) v_WriteIns_f(0x0c); //光標(biāo)關(guān),光標(biāo)反白禁止
else v_WriteIns_f(0x0f); //光標(biāo)開(kāi),光標(biāo)反白容許
}
//************寫(xiě)入中文字符*************
void v_LcdWriteChar_f(uint8 yx,uint8 code *shuju)
{
LcdWritePlace(yx);
v_WriteData_f(*shuju);
shuju++;
v_WriteData_f(*shuju);
}
//**************************************************************************************
//功能: 顯示六位以下的帶小數(shù)點(diǎn)的數(shù)字
//說(shuō)明: 輸入yx(16進(jìn)制)y表示:指出個(gè)LCD中y坐標(biāo)的位置, 取值范圍:0~3。
// x表示:指出個(gè)LCD中x坐標(biāo)的位置, 取值范圍:0~7。
// 輸入d d表示:小數(shù)點(diǎn)相對(duì)數(shù)字的顯示位置, 取值范圍:0~4。超過(guò)范圍表示不顯示。
// 輸入shuju 表示:顯示任意有符號(hào)十進(jìn)制數(shù), 取值范圍:-32768~32767。
//***************************************************************************************
void v_LcdWriteNumber_f(uint8 yx,uint8 dian,int16 shuju)
{
bit b0=1,b1=0,b2=1;
uint8 i,xx=5;
LcdWritePlace(yx-3); //寫(xiě)入坐標(biāo)
v_WriteData_f(' ');
if(shuju < 0) b0 = 0; //判斷正負(fù)數(shù)
shuju=abs(shuju); //取絕對(duì)值
while(xx) //寫(xiě)入5次數(shù)字
{
switch(xx)
{
case 5: i=shuju/10000;break;
case 4: i=shuju%10000/1000;break;
case 3: i=shuju%1000/100;break;
case 2: i=shuju%100/10;break;
case 1: i=shuju%10;
}
if(i||(dian==xx-1)||b1||(xx==1)) //判斷顯示內(nèi)容
{
if(b2) //第一次顯示內(nèi)容
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -