|
哪位能帮我编一段编码 让LCD里面的四个8可以像数码管那样加减。
实在不行的话帮我修改一下程序,可以点亮指定段也可以,谢谢。
这是LCD的规格书
点击此处下载 ourdev_678246TK63O7.pdf(文件大小:140K) (原文件名:HD61749 Model (1).pdf)
//---------------------------------------
//日期:20110907
//-----------------------------------------
#include <SH88F2051.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define _nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
#define BIAS 0x24 //0b1000 0010 1010 1/3duty 3com
#define SYSDIS 0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
#define SYSEN 0X01 //0b1000 0000 0010 打开系统振荡器
#define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压
#define LCDON 0X03 //0b1000 0000 0110 打开LCD偏压
#define XTAL 0x28 //0b1000 0010 1000 外部接时钟
#define RC256 0X30 //0b1000 0011 0000 //系统时钟选择为片内RC振荡器
#define TONEON 0X12 //0b1000 0001 0010 打开声音输出
#define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
#define WDTDIS1 0X0A //0b1000 0000 1010 禁止看门狗
#define TIMERDIS 0X08 //时基输出禁能
uchar a[10];
//-------------------------------------库函数声明,管脚定义-----------
sbit DOWN=P1^3; //15pin 减
sbit UP=P1^2; //14pin 加
sbit STOP=P1^1; //13pin 停止
sbit START=P1^0; //12pin 开始
sbit LED=P3^5; //9pin 0 LED OPEN
sbit BUZZ=P4^0; //1pin 0 BUZZ OPEN
sbit KA1=P3^7; //11pin 主控制继电器
sbit KA2=P3^4; //8pin 极性转换A
sbit KA3=P3^3; //7pin 极性转换B
sbit DATA=P1^4;
sbit WRD=P1^5;
sbit CS=P1^6;
void SENDBYTE (uchar dat);
void SENDBIT (uchar dat,uchar bitcnt);
void init()
{
SCON=0x00; //串行控制关
CLKCON=0x00; //系统时钟频率分频器。机器周期fsys=震荡周期fosc,1/4=0.25us
DOWN=1; //15pin 减
UP=1; //14pin 加
STOP=1; //13pin 停止
START=1; //12pin 开始
}
/***************************延时子函数******************************/
void delay1s() //延时1S
{
uchar i;
uint j;
for(i=0;i<10;i++)
for(j=0;j<1300;j++);
}
/*********************************************************/
void SendBit_1621(uchar data1,uchar cnt) //data1的高位cnt位写入HT1621,高位在前
{
uchar i;
for(i=0;i<cnt;i++)
{
if((data1&0x80)==0) DATA=0;//DATA=IO
else DATA=1;
WRD=0;
_nop();
WRD=1;
data1<<=1;
}
}
void SendDataBit_1621(uchar data1,uchar cnt) //data1的低cnt位写入HT1621,低位在前
{
uchar i;
for(i=0;i<cnt;i++)
{
if((data1&0x01)==0) DATA=0;
else DATA=1;
WRD=0;
_nop();
WRD=1;
data1>>=1;
}
}
void SendCmd(uchar command)
{
CS=0;
SendBit_1621(0x80,3);
SendBit_1621(command,9);
CS=1;
}
void Write_1621(uchar addr, uchar data1)
{
CS=0;
SendBit_1621(0xa0,3); //写入标志吗101
SendBit_1621(addr<<2,6); //写入6位addr
SendDataBit_1621(data1,4); //写入data的低4位
CS=1;
}
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
uchar i;
CS=0;
SendBit_1621(0xa0,3); //写入标志吗101
SendBit_1621(addr<<2,6); //写入6位addr
for(i=0;i<cnt;i++,p++) //连续写入数据
{
SendDataBit_1621(*p,8);
}
CS=1;
}
void lcd_init()
{
SendCmd(BIAS);
SendCmd(SYSEN);
SendCmd(LCDON);
}
/*******************************主函数******************************/
main() //主函数
{
init();
LED=1;
lcd_init();
a[0]=0x21;a[1]=0x43;a[2]=0x65;a[3]=0x87;a[4]=0xa9;
Write_1621(0x09,0x09);
WriteAll_1621(0,a,5);
} //main end |
|