找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于STC12C5A60S2内部自带AD功能的使用

[复制链接]
跳转到指定楼层
楼主
ID:494791 发表于 2019-5-29 09:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
预期实现功能:在1602上显示电压值,同时用P2口显示ADC结果寄存器中的八位数值
现在好像是一个都不好使
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int  
#define uchar unsigned char
sfr P1ASF=0X9D;                 //P1口模拟功能控制寄存器
sfr        ADC_CONTR=0XBC;        //ADC控制寄存器
sfr        ADC_RES=0XBD;        //AD转换结果存放
sfr        ADC_RESL=0XBE;        //AD转换结果存放
sfr        AUXR1=0XA2;               
//sfr        IE=0XA8;               
//sfr        IPH=0XB7;        //中断优先级控制寄存器高
//sfr        IP=0XB8;        //中断优先级控制寄存器低
sbit k1=P3^1;

sbit rs=P2^6;         
sbit rw=P2^5;        
sbit en=P2^7;

uchar temp;

unsigned int result=0,resulth=0;

void delay1ms(unsigned int d)   //误差 0us
{
    unsigned char a,b,c;
    for(c=d;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}
void lcd_wcom(uchar com)                  
{
    rs=0;            
    rw=0;            
    P0=com;         
    delay1ms(5);        
    en=1;           
    en=0;
}
void lcd_wdat(uchar dat)            
{
    rs=1;        
    rw=0;        
    P0=dat;         
    delay1ms(5);      
    en=1;      
    en=0;
}
void lcd_init()                 
{
    lcd_wcom(0x38);      
    lcd_wcom(0x0c);   
    lcd_wcom(0x06);   
    lcd_wcom(0x01);     
}
void ADinit()
{
   P1ASF=0x01;        //P1^0口作为AD输入口
   ADC_CONTR=0x20;          //P1^0口作为AD输入口,360个时钟周期转换一次
   AUXR1=0x00;        //高八位存放于ADC_RES,低二位存放于ADC_RESL
   IE=0XA0;                      //开总中断允许AD中断
}
void ADser() interrupt 5
{
     lcd_wcom(0x80+0x40);
         lcd_wdat(0x31);
     _nop_();
         _nop_();
         _nop_();         
         _nop_();                                 //延时4个时钟周期,使其趋于稳定
     temp=ADC_CONTR|0x10<<4; //此时ADC_FLAG的值被移入CY位;
         if(CY)
         {
           ADC_CONTR=0xC0;        //转换完成,将ADC_FLAG清零
       resulth=ADC_RES;       //读取高8位值
           P2=ADC_RES;            //把ADC_RES的值以点亮小灯的形式显示出来P2口接有八个共阳极的led
           result=(unsigned int)(resulth*5/256);
           lcd_wcom(0x80);
           lcd_wdat(result/100+0x30);
           lcd_wdat(result%100/10+0x30);
           lcd_wdat(result%10+0x30);
         }
}
void main()
{
       ADinit();
        lcd_init();
        while(1)
        {
           ADC_CONTR=0XA8;;//开始AD转换
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           delay1ms(1000);
           ADC_CONTR=0X20;;//关闭AD转换        
        }
}                                                                 

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

使用道具 举报

沙发
ID:88606 发表于 2019-5-29 14:16 | 只看该作者
看看STC官方例程
回复

使用道具 举报

板凳
ID:330198 发表于 2019-5-29 16:51 | 只看该作者
你程序上明明用的P1口。
P1ASF=0x01;        //P1^0口作为AD输入口
仔细看看吧。
回复

使用道具 举报

地板
ID:285175 发表于 2019-8-10 22:32 | 只看该作者
我最近也在学这个单片机ad转换,你的搞定没有,方便分享一下程序吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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