标题:
数码管显示出错,求大神指导单片机程序
[打印本页]
作者:
haoyang123
时间:
2019-5-19 12:29
标题:
数码管显示出错,求大神指导单片机程序
请求大神指出错误。(数码管与程序里都是共阴极的。)
@XGD)U9DE~TKQRJ8ACU~2.png
(55.57 KB, 下载次数: 34)
下载附件
2019-5-19 12:25 上传
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^0;
sbit scl=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f, //"0"
0x06, //"1"
0x5b, //"2"
0x4f, //"3"
0x66, //"4"
0x6d, //"5"
0x7d, //"6"
0x07, //"7"
0x7f, //"8"
0x6f, //"9"
};
void _nop_() //5us
{;;}
void delay1(uint z)//1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void display(uchar value)
{
uchar bai,shi,ge;
bai=value/100;
shi=value%100/10;
ge=value%100%10;
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay1(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay1(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay1(1);
}
void start()
{
scl=1;
_nop_();
sda=1;
delay();
sda=0;
delay();
scl=0;
_nop_();
}
void stop()
{
scl=1;
_nop_();
sda=0;
delay();
sda=1;
delay();
}
void respons()
{
scl=1;
_nop_();
sda=0;
delay();
scl=0;
_nop_();
}
void norespons()
{
scl=1;
_nop_();
sda=1;
delay();
}
void init()
{
scl=1;
_nop_();
sda=1;
_nop_();
}
void write_byte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=0;i<8;i++)
{
scl=0;
_nop_();
if((temp&0x80)==0x80)
sda=1; //д1
else
sda=0; //д0
scl=1;
_nop_();
temp<<=1;
}
scl=0;
_nop_();
}
uchar read_byte()
{
uchar dat,i;
sda=1;
_nop_();
scl=0;
_nop_();
for(i=0;i<8;i++)
{
scl=1;
_nop_();
if(sda)
dat|=0x01;
if(i<7)
dat<<=1;
scl=0;
_nop_();
}
return dat;
}
void DAC_write(uchar dat)
{
start();
write_byte(0x90);
respons();
write_byte(0x40);
respons();
write_byte(dat);
respons();
stop();
}
uchar ADC_read(uchar com)
{
uchar dat;
dat=com;
start();
write_byte(0x90);
respons();
write_byte(com);
respons();
start();
write_byte(0x91);
respons();
dat=read_byte();
norespons();
stop();
return dat;
}
void main()
{
uchar i=0,ad_value;
init();
while(1)
{
ad_value=ADC_read(0x42);
display(ad_value);
DAC_write(i);
i++;
delay1(1);
}
}
作者:
haoyang123
时间:
2019-5-19 16:24
为什么还在审核呀?
作者:
yaole1314
时间:
2019-5-19 19:43
小白一个 求教 可以讨论一下
作者:
47okey
时间:
2019-5-19 22:50
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay1(1);
段和位控制先后顺序换一下,其它位也一样处理。当年玩过,记得是这样。这个是GTX的例子吧,仿真的代码这样处理才可以正常显示
作者:
wulin
时间:
2019-5-20 11:25
数码管动态驱动程序改这样:
void display(uchar value)
{
static uchar j=0;
uchar bai,shi,ge;
bai=value/100%10;
shi=value/10%10;
ge =value%10;
P0=0x00;//消隐
switch(j)
{
case 0:
P0=0xfe;
wela=1;
wela=0;
P0=table[bai];
dula=1;
dula=0;
break;
case 1:
P0=0xfd;
wela=1;
wela=0;
P0=table[shi];
dula=1;
dula=0;
break;
case 2:
P0=0xfb;
wela=1;
wela=0;
P0=table[ge];
dula=1;
dula=0;
break;
}
j++;
j%=3;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1