一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 7412|回复: 4

[其他综合] 还是请教HT1621B 上传了程序 和LCD规格书,不知道怎么点亮指定位置

[复制链接]
发表于 2011-9-21 09:29 | 显示全部楼层 |阅读模式
哪位能帮我编一个码 让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
发表于 2011-9-21 17:47 | 显示全部楼层
至少得给电路图吧
回复

使用道具 举报

 楼主| 发表于 2011-9-22 08:10 | 显示全部楼层
现在可以点亮指定的笔画了,
不知道怎么编码
回复

使用道具 举报

发表于 2011-10-18 16:23 | 显示全部楼层
本帖最后由 无尽的海 于 2011-10-18 16:24 编辑

我是这样处理:
1.单片机RAM中先预留显示缓存,例如液晶用了4*18个点,20H-28H  9个字节就作为显示缓存,与1621内的缓存相对应,也就与液晶上的点一一对应。
2.主程序循环中20ms左右(这个时间不要求精确)调用显示程序,将20H-28H这9个字节全部写到1621缓存中
3.程序中要显示液晶上某个点时就将RAM中显示缓存对应的位置1就可以了,当主程序循环到调用显示程序时就显示出来了
4.要显示8字先要象显示数码管那样译码,译码后出来后将需要点亮的a、b、c、d、e、f、g段对应的显示缓存置1就可以了
只用汇编,不会c,不能帮你看程序
回复

使用道具 举报

 楼主| 发表于 2011-10-19 09:05 | 显示全部楼层
回复 4# 无尽的海


    是我的编码有问题,已经找人帮我搞好了,谢谢您。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-5 00:13 , Processed in 0.035270 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表