标题: 51单片机怎么让温度控制灯亮的个数,求思路 [打印本页]

作者: 怎么玩嘛    时间: 2020-12-17 09:57
标题: 51单片机怎么让温度控制灯亮的个数,求思路
led时钟旁边有一圈灯,灯里面有光控,如何让温度越高,亮灯的个数越多,温度越低,亮灯的个数越少   求大佬解惑!!

作者: glinfei    时间: 2020-12-17 10:28
我刚弄了个led旋转钟跟你说的差不多,
作者: glinfei    时间: 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]就是温度啊,你按比例去驱动灯亮就行啦。

作者: zailushang...    时间: 2020-12-17 10:45
1.写一个led 灯的驱动函数,入口参数是led亮灯个数
2.获取温度值,然后做一个比例换算,换成具体的led亮灯个数
3.调用led驱动函数即可完成。
作者: 18956649856    时间: 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;}
作者: 6620680    时间: 2020-12-17 17:04
首先确定你的温度范围,再确定增加一个灯亮要多少温度,程序也不难了

作者: minileo5    时间: 2020-12-18 17:24
我在想好像也不用走单片机,温度影响电压作用于灯列,电压越高亮灯越多
作者: 2536411418    时间: 2020-12-20 10:06
1.需要一个温度传感器,实现把温度转换为数值,比如18b20  2.在单片机中实现根据温度数值去控制多个LED点亮的逻辑和输出控制(可以是直接输出(如果单片机接口富余),也可以是串行输出或者其他控制数据输出,比如3bit),比如分成若干个阀值区间,每到不同区间,输出不同的控制逻辑  3. 对于直接控制输出,后接相应的驱动放大(需要时)就可以去控制LED啦,对于控制数据输出,后接译码器,再接相应驱动放大去控制LED。
作者: 怎么玩嘛    时间: 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 ...

比例怎么设置 不太懂 求解!
作者: 怎么玩嘛    时间: 2020-12-22 18:40
glinfei 发表于 2020-12-17 10:28
我刚弄了个led旋转钟跟你说的差不多,

我这个中间是lcd时钟 旁边的是led灯
作者: glinfei    时间: 2020-12-22 22:18
怎么玩嘛 发表于 2020-12-22 18:39
比例怎么设置 不太懂 求解!

就是中间是LCD,一圈LED的钟,你没有原程序吗?不要管温度怎么取得的,看最后temp[0],这就是温度啊。一共60个灯,一个一度,从-15到45度,去驱动灯亮就行啦。它本身有5种亮灯方式,你增加一种呗。
作者: 怎么玩嘛    时间: 2020-12-26 13:45
glinfei 发表于 2020-12-22 22:18
就是中间是LCD,一圈LED的钟,你没有原程序吗?不要管温度怎么取得的,看最后temp[0],这就是温度啊。一 ...

谢谢      
作者: chweji123    时间: 2020-12-27 11:05
其实你要的这种思路本论坛上面就有,记得我上次看到有一个例子,夏天用温度控制电风扇自动从低到高,然后温度下降从高到底跟你这思路差不多,你去找找应该找得到。
作者: qazchzhping    时间: 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 );这个公式怎么的





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1