钻石会员
  
主题
帖子
积分23852
阅读权限50
注册时间2008-11-13
最后登录1970-1-1
在线时间 小时
|
求助【点阵屏第十六行一闪一闪的问题】
为了看问题方便清楚,特地字模取反,下面2个图就是第十六行一闪一闪的效果图。
谢谢先!!
#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;
}
} |
|