搜索
bottom↓
回复: 5

简单数字电压表、tlc549仿真程序加图

[复制链接]

出0入0汤圆

发表于 2012-5-8 16:44:16 | 显示全部楼层 |阅读模式
本帖最后由 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,不要嫌弃阿

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-5-8 16:47:00 | 显示全部楼层
哪位大侠空了,帮我看看吧我转的十进制错了,怎么改好

出0入0汤圆

 楼主| 发表于 2012-5-8 19:19:35 | 显示全部楼层
给点点意见吧,我真心喜欢电子

出0入0汤圆

 楼主| 发表于 2012-5-9 19:04:04 | 显示全部楼层
咦~~一天了还没个回复,桑心类

出0入0汤圆

发表于 2012-5-9 19:33:57 | 显示全部楼层
本帖最后由 liweiqiang668 于 2012-5-9 19:40 编辑

在我電腦上無法仿真,你這樣改試試,       
                        {
                        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進制.

出0入0汤圆

 楼主| 发表于 2012-5-9 21:02:27 | 显示全部楼层
本帖最后由 target11 于 2012-5-10 17:43 编辑
liweiqiang668 发表于 2012-5-9 19:33
在我電腦上無法仿真,你這樣改試試,       
                        {
                        j[k]=adc_data%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了,流畅显示,小东西也有技巧的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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