本帖最后由 target11 于 2012-5-8 17:15 编辑
以下是c代码,附件里也有:
#include <reg52.h>
#include <intrins.h> //_nop_()
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
//数码管查找显示
uchar code px[4]={0x08,0x04,0x02,0x01};
uchar code sk[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//引脚定义
sbit CLK=P3^4;
sbit DATA=P3^2;
sbit CS=P3^3;
static uint j[4]=0; //存十进制数据
void display(uint *q) //数码显示
{ uint r;
for(r=0;r<4;r++)
{
P0=px[r];
P2=sk[*(q+r)];
}
}
uchar tlc549_ad_read(void) //ad读取
{ uchar i,da1=0x00;
CLK=0;
CS=0;
DATA=1; //置位准备读
i=8; //读8位
while(i!=0)
{ i--;
da1=da1<<1;
_nop_();
CLK=1;
da1|=DATA;
_nop_();
CLK=0;
}
P1=da1; //读到的数据送显示
CLK=1;
CS=1;
return(da1);
}
void timer1() interrupt 3 using 0 //定时采集
{ uchar k,adc_data;
adc_data=tlc549_ad_read();
display(j);
for(k=0;k<4;k++) //转十进制存j【】中
{
j[k]=adc_data%10;
adc_data/=10;
}
}
void main()
{
TMOD|=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
EA=1;
CS=1;
CLK=1;
while(1)
{
display(j); //显示
}
}
我想转十进制显示的,可是怎么会有a出现,电脑看太久,有些晕了
求帮助,求意见啊
前两天做了个电源,出了实验室就没地方测了
0.0手上有个1549,所以想着做个简单的电压表
tlc1549和549差别大吗?
先仿真下tlc549,真是想想容易动手难~~基础做起
逛了很久,很喜欢这个论坛,第一次发帖,给个机会吧
附件里仿真电路图文件是proteus的,别的软件还不会用,0.0,不要嫌弃阿
在我電腦上無法仿真,你這樣改試試,
{
j[k]=adc_data%10;
adc_data/=10;
}
改為以下試試:
{
j[k]=adc_data%10;//取個位
adc_data=adc_data/10%10;//取十位
}
如果一個數為162,16位時就是A2,你用%10取個位得到2,用/=10得到的卻時A,所以顯示就會變成a,需再%10轉換為10進制.
谢谢您呢,刚刚查出来了哦,不是转换的错,是每位显示前没清,所以和前一位数字串了,出现乱码
以下是刚改好的:
#include <reg52.h>
#include <intrins.h> //_nop_()
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
//数码管查找显示
uchar code px[4]={0x08,0x04,0x02,0x01};
uchar code sk[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//引脚定义
sbit CLK=P3^4;
sbit DATA=P3^2;
sbit CS=P3^3;
uint j[4]={0,0,0,0}; //存十进制数据
void tlc549_ad_read(void) //ad读取
{ uint i,da1=0x00;
CLK=0;
CS=0;
DATA=1; //置位准备读
i=8;
while(i>0)
{ i--;
da1<<=1;
CLK=1;
_nop_();
if(DATA)da1++;
CLK=0;
}
P1=da1; //读到的数据送显示
CLK=1;
CS=1;
for(i=0;i<4;i++) //转十进制存j【】中
{
j=da1%10;
da1=da1/10;
}
}
void display(uint *q) //数码显示
{ uint r;
for(r=0;r<4;r++)
{ P2=0xff;
P0=px[r];
P2=sk[*(q+r)];
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void timer1() interrupt 3 using 0 //定时采集
{ TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
display(&j);
tlc549_ad_read();
}
void main()
{
TMOD|=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
EA=1;
CS=1;
CLK=1;
while(1)
{
display(&j); //显示
}
}
这次ok了,流畅显示,小东西也有技巧的。
一周热门 更多>