• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

学习STC单片机控制1621B驱动液晶显示问题请教

这个逻辑图到底怎么编辑显示数组啊?

下面是原理图

下面是网上找的代码,运行后液晶可以显示,就是不知道怎么做到显示自己要的显示值

#include 
clude 
sbit BL = P5^4;//原来代码没有这个IO口操作,就是液晶背光源
//sbit CS = P3^5;
#include                        /* standard I/O .h-file              */
#include                       /* standard library .h-file          */
#include                        /* character functions            */
#define uchar unsigned char
#define uint unsigned int
#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
#define BIAS 0x52 	 //1/3偏压,4背极1000 0101 0010
#define SYSDIS 0X00   //关闭系统时钟和偏压发生器
#define SYSEN 0X02 	    //打开系统时钟
#define LCDOFF 0X04 
#define LCDON 0X06 
#define XTAL 0x28 
#define RC256 0X30 	//系统时钟选择为片内RC振荡器
#define TONEON 0X12 	//打开音频输出
#define TONEOFF 0X10 	    //关闭音频输出  
#define WDTDIS 0X0A     //禁止WDT溢出标志输出

sbit HT1621_DAT=P3^7; 
sbit HT1621_CS=P3^5; 
sbit HT1621_WR=P3^6; 

//sbit cs_sda = P3^5;    //dog
//const char num[]={0x};
uchar code
Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//delay us
void Delay(uchar us) //5,7,9
{
while(--us);
}
void DelayMS(uint iMs)
{
uint i,j;
for(i=0;i
	

全部回复(10)
正序查看
倒序查看
wqjk
LV.2
2
2015-10-14 01:17
你看一下是不是看门狗程序,你贴的后边的注释应该是喂狗程序
0
回复
Rachelmi
LV.9
3
2015-10-14 13:51
@wqjk
你看一下是不是看门狗程序,你贴的后边的注释应该是喂狗程序
黑喂狗
0
回复
fzhlpp
LV.7
4
2015-10-14 20:24
@wqjk
你看一下是不是看门狗程序,你贴的后边的注释应该是喂狗程序
我开始主要的问题是问怎么写操作1621的程序达到控制我上面LCD显示数字,这部分已经搞定了,原来也很简单,只是从来没做过LCD程序开始有点迷茫,现在控制显示可以自如了,现在又开始琢磨输出PWM调节占空比控制LED亮度,做了一个15点几K的频率的,还想试试100HZ的不知道怎么弄,是不是必须用T0做PCA源,怎么做到100HZ这么低的频率呢,不用软件PWM。请大侠支个招,谢谢!
0
回复
Rachelmi
LV.9
5
2015-10-15 10:01
@fzhlpp
我开始主要的问题是问怎么写操作1621的程序达到控制我上面LCD显示数字,这部分已经搞定了,原来也很简单,只是从来没做过LCD程序开始有点迷茫,现在控制显示可以自如了,现在又开始琢磨输出PWM调节占空比控制LED亮度,做了一个15点几K的频率的,还想试试100HZ的不知道怎么弄,是不是必须用T0做PCA源,怎么做到100HZ这么低的频率呢,不用软件PWM。请大侠支个招,谢谢!
帮顶起~~~
0
回复
fzhlpp
LV.7
6
2015-10-15 19:26
@Rachelmi
帮顶起~~~

100Hz频率已经搞定,确实使用T0做时钟源方式可以很灵活调节到各种频率PWM,那么接下来试试控制遥控了,没做过,什么解码什么的,试试。。。

说起PWM调光,这次使用100Hz频率驱动LED用手机拍摄光抖动的厉害,不知道大家有没有遇到这问题,看来还是要15K的了。

0
回复
fzhlpp
LV.7
7
2015-10-24 21:13
@fzhlpp
100Hz频率已经搞定,确实使用T0做时钟源方式可以很灵活调节到各种频率PWM,那么接下来试试控制遥控了,没做过,什么解码什么的,试试。。。说起PWM调光,这次使用100Hz频率驱动LED用手机拍摄光抖动的厉害,不知道大家有没有遇到这问题,看来还是要15K的了。

走偏了,开始以为调光很简单的,一直弄了近一个礼拜了还没搞定,就是调光调色温这么简单的事情,几个变量搞得头昏脑胀。

网上还没找到这样的实例,一个8位寄存器要分成100级和140级然后分别和255级对应调节。。。

郁闷。。。。。。。。。。。。。。。。。

/********************************色温调节***********************************************/
 void  colour_press(void)
  {
      uint xi,BR;
	 static uchar Aold,Bold; //定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平 
     static uchar st;//定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态 
	 BR=(h*100+j*10+k);	    
	if(Cadd&&Csub) 
	st = 1;// 
	if(st) //如果st为1执行下面的步骤 
	   { 
		if(Cadd==0&&Csub==0)//如果当前编码开关的两个引脚都为底电平执行下面的步骤 
	   {
/******++++++++++++++++++++++++++++下面代码是色温增加++++++++++++++++++++++++++++++++++++++***********/
	if(Bold)//为高说明编码开关在向加大色温的方向转 	 //colour++
 	   { 
		st = 0;
		if((a!=5)|(b!=6)|(c!=0))
	  	{
		c++;
		if(c==10)
		  {
		  c=0;b++;
		  }
		if(b==10)
		  {
		  b=0;a++;
		  }
		  xi=(a*100+b*10+c);
/*****+++++++++++++++++++++++++++++++-------------------------------------------*******/
	     if((xi>534)&(xi<561))	//////////////////////////25*1+115*2
		 	{		   
		 	if(BR<255)CCAP2H++;/////////////////25
		 	}
		 if((xi>419)&(xi<535))
		 	{
		 	if(BR<255)
		 	{
		 	if(BR==254)CCAP2H=255;
		 	else CCAP2H=CCAP2H+2;//////////////115
			}
		 	}
/***************************************************/
		  if((xi>364)&(xi<420))//////////////////////45*2+55*3
		 	{
	 		if(BR>0){if(CCAP1H<3)CCAP2H=0;else CCAP1H=CCAP1H-3;}//////////////55		
		 	}
		 if((xi>320)&(xi<365))
		 	{
			if(BR>0){if(CCAP1H==1)CCAP2H=0;else CCAP1H=CCAP1H-2;}//////////////45
		 	}	 
	  	}
		}
/******-------------------------------下面代码是色温减小------------------------------********/				 
	if(Aold)//为高说明编码开关在向减小色温的方向转 		//colour--
		{
		st = 0; 
		if((a!=3)|(b!=2)|(c!=0))
    	{
		c--;if(c>9){c=9;b--;}if(b>9){b=9;if(a>0)a--;}
		xi=(a*100+b*10+c);
/*****++++++++++--------------++++++++++++------------++++++++++++++++-------++++++++-----------*******/
		 if((xi>534)&(xi<560))		   //25*1+115*2
		 	{		   
		 	if(CCAP2H>0)CCAP2H--;/////////////////////25
		 	}
		 if((xi>419)&(xi<535))
		 	{
		 	if(CCAP2H>0){if(CCAP2H==1)CCAP2H=0;
		 	else CCAP2H=CCAP2H-2;}//////////////115
		 	}
/***************************************************/
		 if((xi>364)&(xi<420))//45*2+55*3
		 	{ 
			if(BR<255)
			{
			if(BR>=253)CCAP1H=255;
		 	else CCAP1H=CCAP1H+3;
		 	}//////////////55
		 	}
		 if((xi>319)&(xi<365))
		 	{ 
		 	if(BR<255) {if(CCAP1H==254)CCAP1H=255;
		 	else CCAP1H=CCAP1H+2;}//////////////45
		 	}
		}
		}}}	 
	Aold = Cadd;// 储存A口的当前状态
	Bold = Csub;//	储存B口的当前状态 
//	CCAP1H=C_H; CCAP2H=C_L;
	//CCAP1H=(C_H|R_H); CCAP2H=(C_L|R_L);
 } 
/*************************************亮度调节**********************************************************/  
  void  brightness_press(void)
  {
	 static uchar Cold,Dold; //定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平 
     static uchar BRst;//定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态 
	 if(BRadd&&BRsub) 
	 BRst = 1;// 
     if(BRst) //如果BRst为1执行下面的步骤 
	   { 
		if(BRadd==0&&BRsub==0)//如果当前编码开关的两个引脚都为底电平执行下面的步骤 
	   {
/*******++++++++++++++++++++++++++++++下面代码是亮度增加++++++++++++++++++++++++++++++++****/
	if(Dold)//为高说明编码开关在向加大亮度的方向转 	 //brightness++
 	  { 
		BRst = 0;
	  {
  	 if(flicker)
	  {
	 if(flicker==1){g++;if(g>9)g=0;}
	 else if(flicker==2){f++;if(f>9)f=0;}
	 else if(flicker==3){e++;if(e>9)e=0;}
	  }
	 else 
	  {
	 if((h!=2)|(j!=5)|(k!=5))
     {
	 k++;if(k==10){k=0;j++;}if(j==10){j=0;h++;}
	 if(CCAP1H>0)CCAP1H--; 
	 if(CCAP2H>0)CCAP2H--;
	 }}}}     	 
/******------------------------------下面是亮度减小----------------------------------------------******/	 	  			 
   if(Cold)//为高说明编码开关在向减小亮度的方向转 		//brightness--
	 { 
	  BRst = 0; 
	 {
      if(flicker)
     {
    if(flicker==1){g--;if(g>9)g=9;}
    else if(flicker==2){f--;if(f>9)f=9;}
    else if(flicker==3){e--;if(e>9)e=9;}
    }
    else
    {
    if((j!=0)|(h!=0)|(k!=0))
	{
	 k--;if(k>9){k=9;j--;}if(j>9){j=9;if(h>0)h--;}
	if(CCAP1H<255)CCAP1H++; 
	if(CCAP2H<255)CCAP2H++;
	}}}}}}   	 
	Cold = BRadd;// 储存A口的当前状态
	Dold = BRsub;//	储存B口的当前状态
	//CCAP1H=R_H; CCAP2H=R_L;//
 } 

0
回复
fzhlpp
LV.7
8
2015-10-25 14:05
@fzhlpp
走偏了,开始以为调光很简单的,一直弄了近一个礼拜了还没搞定,就是调光调色温这么简单的事情,几个变量搞得头昏脑胀。网上还没找到这样的实例,一个8位寄存器要分成100级和140级然后分别和255级对应调节。。。郁闷。。。。。。。。。。。。。。。。。[图片]/********************************色温调节***********************************************/voidcolour_press(void){uintxi,BR;staticucharAold,Bold;//定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平staticucharst;//定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态BR=(h*100+j*10+k);if(Cadd&&Csub)st=1;//if(st)//如果st为1执行下面的步骤{if(Cadd==0&&Csub==0)//如果当前编码开关的两个引脚都为底电平执行下面的步骤{/******++++++++++++++++++++++++++++下面代码是色温增加++++++++++++++++++++++++++++++++++++++***********/if(Bold)//为高说明编码开关在向加大色温的方向转//colour++{st=0;if((a!=5)|(b!=6)|(c!=0)){c++;if(c==10){c=0;b++;}if(b==10){b=0;a++;}xi=(a*100+b*10+c);/*****+++++++++++++++++++++++++++++++-------------------------------------------*******/if((xi>534)&(xi9){b=9;if(a>0)a--;}xi=(a*100+b*10+c);/*****++++++++++--------------++++++++++++------------++++++++++++++++-------++++++++-----------*******/if((xi>534)&(xi0)CCAP2H--;/////////////////////25}if((xi>419)&(xi0){if(CCAP2H==1)CCAP2H=0;elseCCAP2H=CCAP2H-2;}//////////////115}/***************************************************/if((xi>364)&(xi319)&(xi9)f=0;}elseif(flicker==3){e++;if(e>9)e=0;}}else{if((h!=2)|(j!=5)|(k!=5)){k++;if(k==10){k=0;j++;}if(j==10){j=0;h++;}if(CCAP1H>0)CCAP1H--;if(CCAP2H>0)CCAP2H--;}}}}/******------------------------------下面是亮度减小----------------------------------------------******/if(Cold)//为高说明编码开关在向减小亮度的方向转//brightness--{BRst=0;{if(flicker){if(flicker==1){g--;if(g>9)g=9;}elseif(flicker==2){f--;if(f>9)f=9;}elseif(flicker==3){e--;if(e>9)e=9;}}else{if((j!=0)|(h!=0)|(k!=0)){k--;if(k>9){k=9;j--;}if(j>9){j=9;if(h>0)h--;}if(CCAP1H

看代码头晕,我还是把思路用图展示出来,大家帮我分析一下有什么问题。

0
回复
Rachelmi
LV.9
9
2015-10-30 10:44
@fzhlpp
走偏了,开始以为调光很简单的,一直弄了近一个礼拜了还没搞定,就是调光调色温这么简单的事情,几个变量搞得头昏脑胀。网上还没找到这样的实例,一个8位寄存器要分成100级和140级然后分别和255级对应调节。。。郁闷。。。。。。。。。。。。。。。。。[图片]/********************************色温调节***********************************************/voidcolour_press(void){uintxi,BR;staticucharAold,Bold;//定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平staticucharst;//定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态BR=(h*100+j*10+k);if(Cadd&&Csub)st=1;//if(st)//如果st为1执行下面的步骤{if(Cadd==0&&Csub==0)//如果当前编码开关的两个引脚都为底电平执行下面的步骤{/******++++++++++++++++++++++++++++下面代码是色温增加++++++++++++++++++++++++++++++++++++++***********/if(Bold)//为高说明编码开关在向加大色温的方向转//colour++{st=0;if((a!=5)|(b!=6)|(c!=0)){c++;if(c==10){c=0;b++;}if(b==10){b=0;a++;}xi=(a*100+b*10+c);/*****+++++++++++++++++++++++++++++++-------------------------------------------*******/if((xi>534)&(xi9){b=9;if(a>0)a--;}xi=(a*100+b*10+c);/*****++++++++++--------------++++++++++++------------++++++++++++++++-------++++++++-----------*******/if((xi>534)&(xi0)CCAP2H--;/////////////////////25}if((xi>419)&(xi0){if(CCAP2H==1)CCAP2H=0;elseCCAP2H=CCAP2H-2;}//////////////115}/***************************************************/if((xi>364)&(xi319)&(xi9)f=0;}elseif(flicker==3){e++;if(e>9)e=0;}}else{if((h!=2)|(j!=5)|(k!=5)){k++;if(k==10){k=0;j++;}if(j==10){j=0;h++;}if(CCAP1H>0)CCAP1H--;if(CCAP2H>0)CCAP2H--;}}}}/******------------------------------下面是亮度减小----------------------------------------------******/if(Cold)//为高说明编码开关在向减小亮度的方向转//brightness--{BRst=0;{if(flicker){if(flicker==1){g--;if(g>9)g=9;}elseif(flicker==2){f--;if(f>9)f=9;}elseif(flicker==3){e--;if(e>9)e=9;}}else{if((j!=0)|(h!=0)|(k!=0)){k--;if(k>9){k=9;j--;}if(j>9){j=9;if(h>0)h--;}if(CCAP1H
实在晕
0
回复
fzhlpp
LV.7
10
2015-10-30 22:35
@Rachelmi
实在晕

军长看图吧,调色温程序基本上差不多了,就是不知道离标准答案差多少,所以我在色温调到4200K的时候把高色温和低色温的寄存器强制相等了。if(colour==4200)C_H=C_L;

原来没有这句的时候当调到4200K的时候两路PWM宽度不一样,一路多出几个uS的宽度。那样就色温偏差了。不知道大家是怎么处理4200-5600这140级转化8位寄存器数据的。我尝试了好多种方法,最后确定了用强制法,但是离开4200的时候这个偏差就保证不了了。元芳你怎么看。。。

0
回复
fzhlpp
LV.7
11
2015-10-31 00:35
@fzhlpp
军长看图吧,调色温程序基本上差不多了,就是不知道离标准答案差多少,所以我在色温调到4200K的时候把高色温和低色温的寄存器强制相等了。if(colour==4200)C_H=C_L;原来没有这句的时候当调到4200K的时候两路PWM宽度不一样,一路多出几个uS的宽度。那样就色温偏差了。不知道大家是怎么处理4200-5600这140级转化8位寄存器数据的。我尝试了好多种方法,最后确定了用强制法,但是离开4200的时候这个偏差就保证不了了。元芳你怎么看。。。[图片]

出这个问题了,4K就超出文件大小被自动截取掉了。。。

载的时候就出现这个:

0
回复