找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1233|回复: 1
打印 上一主题 下一主题
收起左侧

谁帮我看下我这个电压表程序哪里错了 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:488382 发表于 2019-3-16 17:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5黑币
用的ADC0832 八位,0-5V,用proteus仿真 显示0000 或者 -.-.-.-.


#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char
sbit CS =P2^0;            
sbit DI =P2^3;              
sbit DO =P2^3;            
sbit CLK =P2^2;           
sbit S_1 = P3^0;
sbit S_2 = P3^1;
sbit S_3 = P3^2;
sbit S_4 = P3^3;                                                                                                                 
unsigned char led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//unsigned char led[10]={0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//unsigned char yd[]={0x40,0x79,0x024,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//
// ===========????????=================
void delay_ms(unsigned int x)
{
        unsigned int i,j;
        for(i=0;i<x;i++)
             for(j=0;j<123;j++);              //???1ms
}
/*=============??ADC0832????=============*/
/*=============?????????=================*/
unsigned int Adc0832(unsigned char channel)  //AD???????????
{
    uchar i=0;   
                uchar j;
                uint dat=0;            //????????????
                uchar ndat=0;       //????????????
//****************?????????**************
                if(channel==0)channel=2;     //10B???SGL/DIF=1??ODD/EVEN=0
                if(channel==1)channel=3;     //11B???SGL/DIF=1??ODD/EVEN=1
//****************д???????????????д??ADC0832**************
           DI=1; _nop_();_nop_();     //?????λ??????1??1λ??
                 CS=0;_nop_();_nop_();     //????CS?????ADC0832???
                 CLK=1;_nop_();_nop_();   //????CLK???DI???????????ADC0832??????·??λ?????
                 CLK=0;_nop_();_nop_();    //????CLK??,?γ??????1?????????????
                 CLK=1;    //????CLK???????????????????DI?????????????λ
                                         //???????????λ????λ??????????
                        DI=channel&0x1;_nop_();_nop_(); //?????????0????10&01=0????SGL/DIF=0??????????2λ??
                        CLK=0;_nop_();_nop_();    //????CLK??,?γ??????2,???????????
                        CLK=1;                                //????CLK??
                        DI=(channel>>1)&0x1;_nop_();_nop_();  //?????????0????01&01=1??ODD/EVEN=1????????0
            CLK=0;                                 //????CLK??,?γ??????3
                        DI=1;_nop_();_nop_();        //???????????
                        dat=0;
                //*************??????????AD?????????DO?????****************
                        for(i=0;i<8;i++)   //????CLK?????????λ???????????λ
                        {
                                 dat|=DO;    //?????????|??λ?????2λ?????λ?1???????1???????0
                                 CLK=1;_nop_();_nop_();
                                 CLK=0;_nop_();_nop_();      //?γ???????????
                                 dat<<=1;
                                 if(i==7)dat|=DO;
                        }
                        
                        for(i=0;i<8;i++)  //????CLK?????????λ???????????λ
                        {
                                 j=0;
                                 j=j|DO;    //??????
                                 CLK=1;_nop_();_nop_();
                                 CLK=0;_nop_();_nop_();    //?γ???????????
                                 j=j<<7;
                                 ndat=ndat|j;
                                 if(i<7)ndat>>=1;
                        }
//*********************????AD??????????????????***********************
                        CS=1;     //????CS??
                        CLK=0;   //????CLK??
                        DO=1;     //?????????,????????
                        dat<<=8;
                        dat|=ndat;
                        return(dat);            //????????
                        }
                                                //============????????????==========================
                                                 void display(uint p)                  //????????????
        {
        uchar S1,S2,S3,S4;

        S1=(p/255*5000)/1000;                     //??λ
        S2=(p/255*5000)%1000/100;        //???λ
        S3=(p/255*5000)%100/10;        //???λ
        S4=(p/255*5000)%10;              //???λ     
               
        //??λ
        P3=0x01;                 //??????????
        
        P1=led[S1];             //??????С?????????
        delay_ms(5);               //???
        S_1 = 0;                        //??????
               
  //???λ
        P3=0x10;          //???????????  
                          
      
        P1=led[S2];              //????????С?????????
  delay_ms(5);
        S_2 = 0;                    //??????
        
  //???λ
       P3=0x04;                                          //???????????
        P1=led[S3];                //????????С?????????
        delay_ms(5);  
  S_3= 0;                       //??????
  //???λ
        P3=0x80;                 //??????????
      
       P1=led[S4];                //????????С?????????
       delay_ms(5);
       S_4= 0;                                   //??????
        }
int main(void)
{
        while(1)                    //???
        display(Adc0832(0));
  }//????????  

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:96682 发表于 2019-3-17 03:48 | 只看该作者
把两行段码都拉进去显示能正常么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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