找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于stc12c5a60s2的ad转换

[复制链接]
跳转到指定楼层
楼主
ID:162935 发表于 2017-2-10 19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint adc_finished;
float a;
uchar shi,ge,bai;
int b;
sfr adc_contr=0xbc;//adc控制寄存器,不可位寻址,用或运算来设置
sfr adc_res=0xbd;//转换结果寄存器,高八位
sfr adc_low2=0xbe;//转换结果寄存器,低两位
sfr p1asf=0x9d;//设置p1的那一口为输入口,不可位寻址.
/*以下都是控制寄存器的各位地址*/
#define adc_power 0x80;//adc电源,第7位
#define adc_flag 0x10;//转换结束标志位,第4位
#define adc_start 0x08;//转换开始,第3位
#define adc_speedll 0x00;//速度位,第5,6位
#define adc_speedl 0x20;
#define adc_speedh 0x40;
#define adc_speedhh 0x60;
#define adc_chs 0x00;//输入通道为第p1.0,1,2,3三位可设置p10-p17
//位定义完成
void adcinit()       //adc初始化函数
{
p1asf=0x01;          //设置p10 为ad转换输入口
adc_contr=0xe0;      //打开电源,设最高速度
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();
adc_contr|=adc_chs;   //设置频道
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();
}
uint huqushuju()                //adc转换函数,数据得到
{
adcinit();
adc_res=0;
adc_low2=0;
adc_contr|=adc_start;//启动ad转换,置1为起动,转换结束后自动置0
_nop_();
_nop_();                         
_nop_();                  
_nop_();
adc_finished=0;
while(adc_finished==0)
{
adc_finished=adc_contr&adc_flag;//检测是否转换结束,没结束一直等
}

adc_contr=adc_contr&0xef;//转换结束标志清零
                          //也可写成
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();
a=adc_res*4+adc_low2;
a=a*5/1023;
a=100-20*a;
a=a*10;
adc_contr|=adc_start;
_nop_();
_nop_();                          //设置好ADC控制寄存器之后要加>4us
_nop_();                  //的延时才能继续正确读取ADC控制寄存器的值
_nop_();

return a;
}
void display(uchar bai,uchar shi,uchar ge)
{
          uint i,t;
        for(i=0;i<3;i++)
        {
                switch(i)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0;P0=table[ge]; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; P0=table[shi];break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0;P0=table[bai]; break;//显示第2位
                                         
                }
                  t=1000;
                  while(t--);
        }
}


void main()
{
   while(1)
   {
     b=(int)a;
     ge=b%10;
         shi=b/10/10;
         bai=b/100;
         display(bai,shi,ge);
   }
}
这是我的程序 但是数码管显示000  模拟信号没问题

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

使用道具 举报

沙发
ID:426595 发表于 2018-11-14 19:17 | 只看该作者
请问有仿真图吗
回复

使用道具 举报

板凳
ID:263426 发表于 2018-11-14 22:25 | 只看该作者
没取到数据,每一个管脚用示波器测试,看看电平是否满足时序
回复

使用道具 举报

地板
ID:47286 发表于 2018-11-14 23:33 | 只看该作者
STC官方手册上有c语言范例
回复

使用道具 举报

5#
ID:213173 发表于 2018-11-15 15:37 | 只看该作者
本帖最后由 wulin 于 2018-11-16 09:23 编辑

??????????????
回复

使用道具 举报

6#
ID:697657 发表于 2020-2-24 21:19 | 只看该作者
数码管没有反应都是000,什么情况
回复

使用道具 举报

7#
ID:697657 发表于 2020-2-24 21:21 | 只看该作者
大师,这个程序是不是数码管显示没写
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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