找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求大神帮忙修改一下红外摇控C程序

[复制链接]
跳转到指定楼层
楼主
ID:139788 发表于 2016-12-15 00:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下为修正LCD1602时钟C程,键盘操作函数已删除,增加修改为红外摇控操作,

(STC90C51)
以下为红外键值码:

电源开关键:       12H     赋值到IO口动作,LCD1602要显示(ON~OFF)状态
直流电机反转键:   DAH     赋值到IO口动作,
直流电机正转键:   1FH     同上

LCD1602时钟程序

#include<reg51.h>
#include "LCD.h"
#include"ds1302.h"
#include"DS18B20.h"
//温度显示函数
void display(int temp)         
{
           float tp;  
        if(temp< 0)                                //当温度值为负数
          {        LcdWriteCom(0x88+0x40);                //写地址 80表示初始地址
            LcdWriteData('-');                 //显示正
                 //因为读取0的温度是实际温度的补码,所以减1,再取反求出原码
                temp=temp-1;
                temp=~temp;
                tp=temp;
                temp=tp*0.0625*100+0.5;        
                //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
                //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
                //算加上0.5,还是在小数点后面。

          }
        else
          {        LcdWriteCom(0x88+0x40);                //写地址 80表示初始地址
            LcdWriteData('+');                 //显示正               
            tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
                //如果温度是正的那么,那么正数的原码就是补码它本身
                temp=tp*0.0625*100+0.5;        
                //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
                //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
                //算加上0.5,还是在小数点后面。
        }
        TIME[8] = temp / 10000;
        TIME[9] = temp % 10000 / 1000;
    TIME[10] = temp % 1000 / 100 ;
    TIME[11] = temp % 100 / 10;
    TIME[12] = temp % 10;
        LcdWriteCom(0x89+0x40);                  //写地址 80表示初始地址
        LcdWriteData('0'+TIME[8]); //百位
        
        LcdWriteCom(0x8a+0x40);                 //写地址 80表示初始地址
        LcdWriteData('0'+TIME[9]); //十位
        
        LcdWriteCom(0x8b+0x40);                //写地址 80表示初始地址
        LcdWriteData('0'+TIME[10]); //个位
        
        LcdWriteCom(0x8c+0x40);                //写地址 80表示初始地址
        LcdWriteData('.');                 //显示 ‘.’
        
        LcdWriteCom(0x8d+0x40);                 //写地址 80表示初始地址
        LcdWriteData('0'+TIME[11]); //显示小数位
        
        LcdWriteCom(0x8e+0x40);                 //写地址 80表示初始地址
        LcdWriteData('0'+TIME[12]); //显示小数位   
         
}
//时钟显示函数
void LcdDisplay()
{
        LcdWriteCom(0x80+0X40);
        LcdWriteData('0'+TIME[2]/16);                                //时
        LcdWriteData('0'+(TIME[2]&0x0f));                                 
        LcdWriteData('-');
        LcdWriteData('0'+TIME[1]/16);                                //分
        LcdWriteData('0'+(TIME[1]&0x0f));        
        LcdWriteData('-');
        LcdWriteData('0'+TIME[0]/16);                                //秒
        LcdWriteData('0'+(TIME[0]&0x0f));

        LcdWriteCom(0x80);
        LcdWriteData('2');
        LcdWriteData('0');
        LcdWriteData('0'+TIME[6]/16);                        //年
        LcdWriteData('0'+(TIME[6]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[4]/16);                        //月
        LcdWriteData('0'+(TIME[4]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[3]/16);                        //日
        LcdWriteData('0'+(TIME[3]&0x0f));
        LcdWriteCom(0x8D);
        LcdWriteData('0'+(TIME[5]&0x07));        //星期                        
}
//主函数
void main()
{
        Int0Configuration();
        LcdInit();                         //初始化LCD1602
        Delay10ms();
    Ds1302Init();                  //初始化DS1302
        LcdWriteCom(0x8f+0x40);        //写地址 80表示初始地址
        LcdWriteData('C');         
        
        while(1)
        {                  
                  
                 
                 
                 
                 display( Ds18b20ReadTemp());
                  
                 if(SetState==0)
                {
                        Ds1302ReadTime();
                                       
                }
                        else
                        {                 keycontrol();

                        }        
                                                   
                        LcdDisplay();
                                                
        }
}
/*******************************************************************************
* 函数名         : Int0Configuration()
* 函数功能                   : 配置外部中断0
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
//打开外部中断0
void Int0Configuration()
{
        //设置INT0
        IT0=1;//跳变沿触发方式(下降沿)
        EX0=1;//打开INT0的中断允许。
        EA=1;//打开总中断
        
}
//外部中断0执行函数
void Int0() interrupt 0                 
{
        Delay10ms();

        if(K3==0)
        {
                SetState=~SetState;
                SetPlace=0;
            Ds1302Init(); //初始化DS1302        
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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