找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2457|回复: 13
收起左侧

51单片机怎么让温度控制灯亮的个数,求思路

  [复制链接]
ID:861942 发表于 2020-12-17 09:57 | 显示全部楼层 |阅读模式
led时钟旁边有一圈灯,灯里面有光控,如何让温度越高,亮灯的个数越多,温度越低,亮灯的个数越少   求大佬解惑!!
回复

使用道具 举报

ID:844772 发表于 2020-12-17 10:28 | 显示全部楼层
我刚弄了个led旋转钟跟你说的差不多,
回复

使用道具 举报

ID:844772 发表于 2020-12-17 10:34 | 显示全部楼层
void GetADCResult(unsigned char ch,unsigned int *value)
{
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //Must wait before inquiry
    _nop_();
    _nop_();
    _nop_();
    _nop_();                        //Must wait before inquiry
    _nop_();
    while(!(ADC_CONTR & ADC_FLAG));//Wait complete flag
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC

        *value = 0;
        *value = ADC_RES;
        *value = ((*value)*4 + ADC_LOW2);                //Return ADC result
}

void ADC_convert(void)
{
        GetADCResult(0,&temp[0]);
        temp[0] = (unsigned int) ( ( 3950.0 / ( 11.33657 + log( 6.04 * (float)temp[0] / ( 1024.0 - (float)temp[0] ) ) ) - 278.15) * 100 );
}
temp[0]就是温度啊,你按比例去驱动灯亮就行啦。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:453198 发表于 2020-12-17 10:45 | 显示全部楼层
1.写一个led 灯的驱动函数,入口参数是led亮灯个数
2.获取温度值,然后做一个比例换算,换成具体的led亮灯个数
3.调用led驱动函数即可完成。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:223946 发表于 2020-12-17 16:41 | 显示全部楼层
将温度传感器传回来的温度值做为一个变量,再用if去控制:
if(temp<30)
{led1=0;
led2=0;
led3=0;}
else if(temp>30&&temp<=35)
{
led1=1;
led2=1;
led3=0;
}
else
{
led1=1;
led2=1;
led3=1;}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:852300 发表于 2020-12-17 17:04 | 显示全部楼层
首先确定你的温度范围,再确定增加一个灯亮要多少温度,程序也不难了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:836944 发表于 2020-12-18 17:24 | 显示全部楼层
我在想好像也不用走单片机,温度影响电压作用于灯列,电压越高亮灯越多
回复

使用道具 举报

ID:715195 发表于 2020-12-20 10:06 | 显示全部楼层
1.需要一个温度传感器,实现把温度转换为数值,比如18b20  2.在单片机中实现根据温度数值去控制多个LED点亮的逻辑和输出控制(可以是直接输出(如果单片机接口富余),也可以是串行输出或者其他控制数据输出,比如3bit),比如分成若干个阀值区间,每到不同区间,输出不同的控制逻辑  3. 对于直接控制输出,后接相应的驱动放大(需要时)就可以去控制LED啦,对于控制数据输出,后接译码器,再接相应驱动放大去控制LED。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:861942 发表于 2020-12-22 18:39 | 显示全部楼层
glinfei 发表于 2020-12-17 10:34
void GetADCResult(unsigned char ch,unsigned int *value)
{
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL | c ...

比例怎么设置 不太懂 求解!
回复

使用道具 举报

ID:861942 发表于 2020-12-22 18:40 | 显示全部楼层
glinfei 发表于 2020-12-17 10:28
我刚弄了个led旋转钟跟你说的差不多,

我这个中间是lcd时钟 旁边的是led灯
回复

使用道具 举报

ID:844772 发表于 2020-12-22 22:18 | 显示全部楼层
怎么玩嘛 发表于 2020-12-22 18:39
比例怎么设置 不太懂 求解!

就是中间是LCD,一圈LED的钟,你没有原程序吗?不要管温度怎么取得的,看最后temp[0],这就是温度啊。一共60个灯,一个一度,从-15到45度,去驱动灯亮就行啦。它本身有5种亮灯方式,你增加一种呗。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:861942 发表于 2020-12-26 13:45 | 显示全部楼层
glinfei 发表于 2020-12-22 22:18
就是中间是LCD,一圈LED的钟,你没有原程序吗?不要管温度怎么取得的,看最后temp[0],这就是温度啊。一 ...

谢谢      
回复

使用道具 举报

ID:65179 发表于 2020-12-27 11:05 | 显示全部楼层
其实你要的这种思路本论坛上面就有,记得我上次看到有一个例子,夏天用温度控制电风扇自动从低到高,然后温度下降从高到底跟你这思路差不多,你去找找应该找得到。
回复

使用道具 举报

ID:737771 发表于 2021-6-20 12:20 | 显示全部楼层
glinfei 发表于 2020-12-17 10:34
void GetADCResult(unsigned char ch,unsigned int *value)
{
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL | c ...

temp[0] = (unsigned int) ( ( 3950.0 / ( 11.33657 + log( 6.04 * (float)temp[0] / ( 1024.0 - (float)temp[0] ) ) ) - 278.15) * 100 );这个公式怎么的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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