一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 4616|回复: 19
收起左侧

求助【点阵屏第十六行一闪一闪的问题】

  [复制链接]
发表于 2010-7-25 00:06 | 显示全部楼层 |阅读模式
求助【点阵屏第十六行一闪一闪的问题】
为了看问题方便清楚,特地字模取反,下面2个图就是第十六行一闪一闪的效果图。
谢谢先!!

闪耀图.jpg
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#include"CODE.h"
#include"DS18B20.H"
sbit R1=P2^4;  //位定义   
sbit R2=P2^5;
sbit CLK=P2^6;
sbit STB=P2^7;
uchar j,time,wendu_shi,wendu_ge;  //数据变量定义
char dat;
void WriteByte();  //上半屏写一个字节数据函数
void init_timer0();   //中断初始化
/*-------------------------------------------*/
void main()
{
  init_timer0();     //中断初始化
  while(1)
  {
   if(time>=50)     //每2.5秒刷新一次温度数据
   {
    time=0;
    tempchange();     //温度转换命令
    wendu_shi=get_temp()/100;
    wendu_ge=get_temp()%100/10;
     
   }      
         
   for(j=0;j<16;j++)   //行扫描
     {     
         
    dat=wendu[j][0];    //温
    WriteByte();
    dat=wendu[j][1];   
    WriteByte();
    dat=wendu[j+16][0];  //度  
    WriteByte();
    dat=wendu[j+16][1];   
    WriteByte();
   
    dat=table[wendu_shi][j];   //温度十位
    WriteByte();      //温度个位
    dat=table[wendu_ge][j];
    WriteByte();
    dat=wendu[j+32][0];    //℃  
    WriteByte();
    dat=wendu[j+32][1];   
    WriteByte();
         
    P1=j;  //放上面会错乱 消影
    STB=1;  //下降沿,上升沿显示错乱
    STB=0;
                                
    delay(2);
   
   }
  }   
}
void init_timer0()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
time++;
}      
void WriteByte()   //上半屏写一个字节的数据
{
uchar k;
for(k=0;k<8;k++)  //循环8次把编码传给锁存器
  {
    dat=dat<<1;
    R1=CY;
    R2=1;
    CLK=0;       //上升沿有效
    CLK=1;   
  }
}
发表于 2010-7-25 00:40 | 显示全部楼层
for(j=0;j<16;j++)   //行扫描
>>

for(j=0;j<15;j++)   //行扫描
 楼主| 发表于 2010-7-25 01:05 | 显示全部楼层
for(j=0;j>

for(j=0;j
狗狗百里游 发表于 2010-7-25 00:40 https://www.yleee.com.cn/images/common/back.gif



    谢谢回复,这个方法我试验过了,不解决问题。
发表于 2010-7-25 07:43 | 显示全部楼层
把温度更新的那一部分程序注释掉看看还闪不闪。
发表于 2010-7-25 07:45 | 显示全部楼层
把温度更新的那一部分程序注释掉看看还闪不闪。

还有把下面两个换换?
P1=j;  //放上面会错乱 消影
    STB=1;  //下降沿,上升沿显示错乱
    STB=0;
发表于 2010-7-25 08:14 | 显示全部楼层
是温度更新的时候闪吗?
发表于 2010-7-25 09:09 | 显示全部楼层
本帖最后由 狗狗百里游 于 2010-7-25 09:19 编辑

呀,我想错了。
for(j=0;j<16;j++)   //行扫描这是17个循环。
>>
for(j=0;j<15;j++)   //行扫描,这个才是16个循环。
不过你的P1是什么呢?如果P1是c51的P1端口,它是怎么实现十六选一的呢。你想清楚P1跟点阵屏的硬件连接先。
如果你的P1没有跟其他功能共用,觉得P1=15,十六行会常显示,就用P1=15测试是否会跳动。


    P1=j;  //放上面会错乱 消影
    STB=1;  //下降沿,上升沿显示错乱
    STB=0;
发表于 2010-7-25 10:33 | 显示全部楼层
p1应该是abcd吧。
估计是温度更新引起的
 楼主| 发表于 2010-7-25 10:40 | 显示全部楼层
根据各位朋友提示,试验后
回复:狗狗百里游
1】如果for(j=0;j<15;j++) 闪耀位就在第十五行了。P1=j;  STB=1;  STB=0,随便怎么换没有用。

回复:litchiate 【p1是abcd】。
2】如果注释掉//if(time>=50)    不闪耀了,但是第十六行常亮。这样不知道原来【 每2.5秒刷新一次温度数据】现在对温度值显示会不会有什么问题。

回复:hexj0123【是温度更新的时候闪】
3】如果改变if(time>=50)为if(time>=100) 闪耀间隔时间就长一点。
发表于 2010-7-25 10:43 | 显示全部楼层
根据各位朋友提示,试验后    ...
shqi2003 发表于 2010-7-25 10:40 https://www.yleee.com.cn/images/common/back.gif

沈兄,今天起得好早!?   

本版积分规则

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

GMT+8, 2025-4-28 19:08 , Processed in 0.052026 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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