钻石会员 
 
主题
回帖0
积分11561
阅读权限50
注册时间2008-12-31
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
哪位能帮我编一个码 让LCD里面的四个8可以想数码管那样加减。 
实在不行的话帮我修改一下程序,可以点亮指定段也可以,谢谢。 
 
HD61749 Model (1).pdf
(140.21 KB, 下载次数: 710)
这是LCD的规格书 
 
 
//--------------------------------------- 
//日期: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 |   
 
 
 
 |