找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1707|回复: 4
收起左侧

STC12C5A60S2光敏电阻读取无法显示 求帮助

[复制链接]
ID:517020 发表于 2019-5-15 22:07 | 显示全部楼层 |阅读模式
#include <STC12C5A.h>
#include <intrins.h>
unsigned int temp1,result,a,b;
typedef unsigned char u8;
sbit led1=P2^2;
sbit led2=P2^4;
u8 disp[4];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


sbit LSA=P2^5;//数码管定义
sbit LSB=P2^6;//
sbit LSC=P2^7;//



void DELAY_10ms()//Ñóê±
{
        unsigned char a;
        for(a=30;a>0;a--);
}


void datapros()
{
        static u8 i;
        if(i==50)
        {
                i=0;
                temp1=ADC_CONTR; ;                //  光敏
        }
        disp[0]=smgduan[temp1/1000]
        disp[1]=smgduan[temp1%1000/100]
        disp[2]=smgduan[temp1%1000%100/10]
        disp[3]=smgduan[temp1%1000%100%10];               
}

void DigDisplay()
{
        u8 i;
        for(i=0;i<4;i++)
        {
                switch(i)        //位选
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break
                        case(1):
                                LSA=1;LSB=0;LSC=0; break
                        case(2):
                                LSA=0;LSB=1;LSC=0; break
                        case(3):
                                LSA=1;LSB=1;LSC=0; break
                }
                P0=disp[3];
               
                P0=0x00;
        }               
}

void AD_CONV()
{
        do
        {
                temp1=ADC_CONTR;
        }
        while((temp1&0x10)!=0x10);
        ADC_CONTR=0xE8;
        temp1=ADC_RESL;
        result+=temp1;
        temp1=ADC_RES;
        temp1=temp1&0x0003;
        temp1=_irol_(temp1,8);
        result+=temp1;
}        

void main()
{
        P1ASF=1^1;//光敏输入口
        AUXR1=0x04;
        ADC_CONTR=0xE0;
        DELAY_10ms();
        ADC_CONTR=0xE8;
        AD_CONV();
        datapros();
        DigDisplay();
        
        
        while(1);
}



求解下载后数码管为什么不显示,此程序无错误无警告

回复

使用道具 举报

ID:213173 发表于 2019-5-16 06:51 | 显示全部楼层
本帖最后由 wulin 于 2019-5-16 11:43 编辑

楼主声称此程序无错误无警告,只随便看一下,错误比比皆是:7处少了分号,1处多了分号,还有两处是汉字分号。模拟入口竟然错写成 P1ASF=1^1;//光敏输入口。
回复

使用道具 举报

ID:517020 发表于 2019-5-16 18:30 | 显示全部楼层
wulin 发表于 2019-5-16 06:51
楼主声称此程序无错误无警告,只随便看一下,错误比比皆是:7处少了分号,1处多了分号,还有两处是汉字分号 ...

感谢大佬,少了分号可能是我粘贴代码时删去乱码时忘记补上的,输入口我原来写0x01,结果显示输入口未定义
回复

使用道具 举报

ID:213173 发表于 2019-5-16 22:14 | 显示全部楼层
过客795 发表于 2019-5-16 18:30
感谢大佬,少了分号可能是我粘贴代码时删去乱码时忘记补上的,输入口我原来写0x01,结果显示输入口未定义

楼主改这样试试
  1. #include <STC12C5A60S2.H>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. //宏定义ADC的操作命令
  6. #define ADC_POWER   0x80                        //ADC电源控制位
  7. #define ADC_START   0x08                        //ADC启动控制位
  8. #define ADC_FLAG    0x10                        //ADC完成标志位
  9. #define ADC_SPEEDLL 0x00                        //420时钟速度控制位

  10. sbit LSA=P2^5;//数码管定义
  11. sbit LSB=P2^6;//
  12. sbit LSC=P2^7;//

  13. uchar code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  14. uchar disp[4];
  15. uint temp1,result,a,b;

  16. void delayms(uint k)//1T单片机延时
  17. {
  18.         uint i,j;
  19.         for(i=k;i>0;i--)
  20.                 for(j=1150;j>0;j--);
  21. }
  22. /*-----------------------------------------------------------------------------
  23.   InitADC 初始化ADC
  24. -----------------------------------------------------------------------------*/
  25. void InitADC()
  26. {
  27.         P1ASF=0x01;                                                //设置P1的第1通道端口作为模拟输入
  28.         ADC_RES=0;                                                //清除ADC_RES存储器以前的结果
  29.         ADC_RESL=0;                                                //清除ADC_RESL存储器以前的结果
  30.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL;//ADC 开启电源、转换速度 1000 0000
  31.         delayms(1);                                                //上电延时1ms                                                                                       
  32. }
  33. /*----------------------------------------------------------------------------
  34. Get ADC Result(获取ADC结果)
  35. ----------------------------------------------------------------------------*/
  36. uint Read(uchar CHA)                                //获取ADC结果
  37. {
  38.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL|CHA|ADC_START;//启动转换1000 1000
  39.     _nop_();                        //延时确保正确读到ADC_CONTR寄存器的值
  40.     _nop_();
  41.     _nop_();
  42.     _nop_();
  43.         while(!(ADC_CONTR & ADC_FLAG));        //等待ADC转换完成标志置位 1001 1000
  44.         ADC_CONTR &=~ADC_FLAG;                        //关闭ADC
  45.         return(ADC_RES*4+ADC_RESL);                //返回十位ADC结果
  46. }

  47. void datapros()
  48. {
  49.         static uint i=0;
  50.         if(++i>=1000)//大约1秒取样一次
  51.         {
  52.                 i=0;
  53.                 temp1=Read(0); //读取第一通道AD值//光敏
  54.                 disp[0]=smgduan[temp1/1000%10];
  55.                 disp[1]=smgduan[temp1/100%10];
  56.                 disp[2]=smgduan[temp1/10%10];
  57.                 disp[3]=smgduan[temp1%10];               
  58.         }
  59. }

  60. void DigDisplay()
  61. {
  62.         static uchar i=0;
  63.         P0=0x00;                        //消隐
  64.         switch(i)      //位选
  65.         {
  66.                 case(0):LSA=0;LSB=0;LSC=0;break;
  67.                 case(1):LSA=1;LSB=0;LSC=0;break;
  68.                 case(2):LSA=0;LSB=1;LSC=0;break;
  69.                 case(3):LSA=1;LSB=1;LSC=0;break;
  70.         }
  71.         P0=disp[i];
  72.         i++;
  73.         i%=4;           
  74. }

  75. void main()
  76. {
  77.         P1M0 = 0x00;
  78.         P1M1 = 0x01;
  79.         InitADC();
  80.         while(1)
  81.         {
  82.                 datapros();
  83.                 DigDisplay();
  84.                 delayms(1);
  85.         }
  86. }
复制代码
回复

使用道具 举报

ID:517020 发表于 2019-5-21 12:20 | 显示全部楼层
wulin 发表于 2019-5-16 22:14
楼主改这样试试

感谢,问题已解决
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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