微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求救求救!各位大佬,这是什么原因啊!编译无误,但没有实现功能?(程序如下)

求救求救!各位大佬,这是什么原因啊!编译无误,但没有实现功能?(程序如下)

时间:10-02 整理:3721RD 点击:
#include "UART.H"   // 包含IAP15W4K58S4寄存器定义文件
#define VCC 5.06  // 存放用万用表实测的单片机供电电压

sbit up=P2^1;
sbit dn=P2^2;
sbit key=P2^3;
unsigned int dat=39,addr=0;
void DAC(unsigned char addr,bit rng,unsigned char dat);
void init_5620();
unsigned int ADC_P11()
{
        unsigned int i;                    // 用于软件延时程序
        unsigned char status;        // 用于判断AD转换结束的标志
        unsigned int AD_Dat=0;  // 10位AD转换值
        unsigned char Tmp;            // 临时变量用于将AD转换出来的2个字节合成一个字节               
        ADC_CONTR|=0x80;              // 开AD转换电源,第一次使用时要打开内部模拟电源
    for (i=0;i<10000;i++);  // 适当延时等待AD转换供电稳定,一般延时1ms以内即可,为了缩短AD
                            // 调用时间,可把这2行剪切到主程序中去。
        P1ASF|=0x02;                        // 选择P1.1作为AD转换通道,0x02= 0000 0010       
        ADC_CONTR=0xE1;         // 选择P1.1作为AD转换通道,最高转换速度,清转换完成标志。
        for (i=0;i<1000;i++);   // 如果是多通道模拟量进行AD转换,则更换AD转换通道后要适当延时,
        ADC_CONTR|=0x08;        // 启动 A/D 转换,ADC_START=1。
        status=0;
        while(status==0)              // 等待AD转换结束。
        {
            status=ADC_CONTR&0x10;   // 判断ADC_FLAG是否等于1,0x10=0001 0000B。
        }
        ADC_CONTR&=0xE7;             // 将ADC_FLAG清0, 0xE7=1110 0111B,ADC_FLAG=0,ADC_START=0。       
        AD_Dat = ADC_RES;                // 默认高字节高8位。
        AD_Dat <<= 2;
        Tmp = ADC_RESL;         // 默认低字节低2位。
        Tmp &= 0x03;            // 屏蔽无关位
        AD_Dat |= Tmp;                // 高低字节拼接成一个10位数。
        return AD_Dat;
}
unsigned int scan()
{
                if(up==0)
                {
                        dat+=1;
                        if(dat>=255)
                         dat=255;
                         while(!up);
                }
                if(dn==0)
                {
                        dat-=1;
                        if(dat<=1)
                        {
                         dat=1;       
                         }       
                        while(!dn);
                }
        return dat;
}         
unsigned int zidong()
{
        float vo;
        unsigned  int temp;
        temp=ADC_P11();
        vo=VCC*temp/1023;
        printf("%.3f     ",vo);
        vo=(int)vo;
        if(vo==2)
        {
                dat=78;
        }
        if(vo==3)
        {
                dat=117;
        }
        if(vo>5)
        {
                dat=1;
        }
        return dat;
}
void main(void)
{        
        unsigned int s=0;
        UART_init();                                   // 串口初始化9600/22.1184MHz
        init_5620();                   //初始化5620
        while(1)
        {         
                if(key==0)
                {
                        s=s+1;
                        if(s==2)
                        {s=0;}
                }
                switch(s)
                {
                        case 0:DAC(0,0,zidong()); break;
                        case 1:DAC(0,0,scan());        break;
                        default:s=0;break;
                }
                delay500ms();
        }                           
}

这种类似模块化的程序且自定义H文件别人看不明白,自己慢慢找问题吧。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top