找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个单片机程序为什么运行不了的 做不了仿真我用实物做的 用stc90c58ad做ad590的测温

[复制链接]
跳转到指定楼层
楼主
ID:751319 发表于 2020-5-14 00:23 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实物就这么接的因为仿真里没有stc90c58ad 这种内部转换的 实物要怎么验证呢 放大器出来ad转换口我直接了一个还是没反应。求大神指导啊
#include <reg52.H>
//定义与ADC有关的特殊功能寄存器
sfr ADC_CONTR =0xC5;
sfr ADC_DATA  =0xC6;
sfr ADC_LOW2  =0xBE;
sfr P1M0  =0x91;
sfr P1M1  =0x92;

sbit P24 = P0^0; //个位
sbit P25 = P0^1; //十位
sbit P26 = P0^2; //百位
sbit P27 = P0^3; //千位
sbit P07 = P2^7; //小数点

int DATA_LED[11] =
{
        0X3F,/*0*/
        0X06,/*1*/
        0X5B,/*2*/
        0X4F,/*3*/
        0X66,/*4*/
        0X6D,/*5*/
        0X7D,/*6*/
        0X07,/*7*/
        0X7F,/*8*/
        0X6F,/*9*/

        0xFF
};

void delay(int timer)                           //延时函数
{
        while(timer--);
}

void led(int n)                                                 //数码管显示及数据处理程序
{
//        P2 = 0x39;                                                 //C
        P2 = DATA_LED[n % 10];                  //个位         
        P07=0;
        P27 = 1;
        delay(500);
        P27 = 0;
  
        P2 = 0xFF;
        P2 = DATA_LED[n / 10 % 10];                //十位
        P07=0;
        P26 = 1;
        delay(500);
        P26 = 0;
  
        P2 = 0xFF;
        P2 = DATA_LED[n / 100 % 10];        //百位
        P07=1;
        P25 = 1;
        delay(500);
        P25 = 0;
  
        P2 = 0xff;
        P2 = DATA_LED[n / 1000 % 10];        //千位         
        P07=0;
        P24 = 1;
        delay(500);
        P24 = 0;
}

int Ad_Change(char channel)                     //AD转换
{
        int AD_Result_Temp = 0 ;
        P1 = 0xff;                                         //将P1口置高,为A/D转换作准备
        ADC_CONTR = ADC_CONTR|0x80;                 //1000,0000打开A/D转换电源
        P1M0 = 0x03;                                //0000,0011用于A/D转换的P1.x口,先设为开漏
        P1M1 = 0x03;                                //0000,0011P1.0--P1.1先设为开漏。断开内部上拉电阻
        delay(20);                             //20

        ADC_CONTR = ADC_CONTR&0xE0;                 //1110,0000 清ADC_FLAG,ADC_START位和低3位
        ADC_CONTR = ADC_CONTR|(channel);        //设置当前通道号

        delay(1);                    //延时使输入电压达到稳定
        ADC_DATA = 0;                                      //清A/D转换结果寄存器
        ADC_LOW2 = 0;
        ADC_CONTR = ADC_CONTR|0x08;                 //0000,1000ADCS = 1,启动转换

        do { ; }   
        while((ADC_CONTR & 0x10)==0);           //0001,0000等待A/D转换结束

        ADC_CONTR = ADC_CONTR&0xE7;                 //1110,0111清ADC_FLAG位,停止A/D转换
        AD_Result_Temp = 0 ;
        AD_Result_Temp = ((AD_Result_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03);
                                                                                //保存返回AD转换的 结果
        delay(1);                            //
        return AD_Result_Temp;
}
main()
{
        int ADC_result;
        while(1)
        {
                ADC_result = Ad_Change(0);                 //通道P1.0
                ADC_result = ADC_result*4.6 ;         //显示数值。AD转换系数:原公式是ADC_result/(2^10)*5000mV
                led(ADC_result);led(ADC_result);led(ADC_result);
                led(ADC_result);led(ADC_result);led(ADC_result);
        }

}

2536B2FB-E7C7-4ED5-A754-6FFF998F6402.png (46.24 KB, 下载次数: 77)

2536B2FB-E7C7-4ED5-A754-6FFF998F6402.png

6C35CCF8-923C-4FA1-95E6-0B7B54FF1F69.jpeg (91.73 KB, 下载次数: 83)

6C35CCF8-923C-4FA1-95E6-0B7B54FF1F69.jpeg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-5-14 09:47 | 只看该作者
实物做的没看到你的12V和5V是怎么处理的,而且P1口为啥要并联 ?
回复

使用道具 举报

板凳
ID:751319 发表于 2020-5-14 11:27 来自手机 | 只看该作者
12v 5v用电源模块给电 然后传感器输出电流信号串联个电阻转换成电压信号,并联接一个运算放大器使得后面的放大信号电路不影响前面的传感器信号转换电路
回复

使用道具 举报

地板
ID:751319 发表于 2020-5-14 11:58 来自手机 | 只看该作者
这个为什么实物做不出呢
回复

使用道具 举报

5#
ID:751319 发表于 2020-5-16 19:42 来自手机 | 只看该作者
man1234567 发表于 2020-5-14 09:47
实物做的没看到你的12V和5V是怎么处理的,而且P1口为啥要并联 ?

12v 5v电源该怎么处理
回复

使用道具 举报

6#
ID:751319 发表于 2020-5-16 19:43 来自手机 | 只看该作者
man1234567 发表于 2020-5-14 09:47
实物做的没看到你的12V和5V是怎么处理的,而且P1口为啥要并联 ?

你怎么联系 我想问你一些问题拜托了
回复

使用道具 举报

7#
ID:213173 发表于 2020-5-16 21:37 | 只看该作者
楼主这个测温设备有什么特殊要求?测温范围,精度指标。既使用高等级的传感器ad590,又使用普通运放LM358,以及10位AD的stc90c58ad芯片,感觉档次不搭配。你这程序确实有问题,不知你从哪里找到的参考资料。对比STC官方示例差距不小。由于手上没有这种老芯片,无法验证你的程序。从你的原理图看,虽然图中错误不少,但可以看出其功能挺简单的。只是一个数显温度计。如果不是做高档特殊设备,建议采用普通NTC热敏电阻+STC8系列芯片。
回复

使用道具 举报

8#
ID:213173 发表于 2020-5-16 22:02 | 只看该作者
昨天发给你的参考资料不知什么原因被和谐掉了。另外发一个应用实例给你参考。 -30~150度数码管温度计(对分查表).zip (31.12 KB, 下载次数: 16)

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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