找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3034|回复: 0
收起左侧

求大神帮忙赋值LCD1602程序

[复制链接]
ID:139788 发表于 2016-12-14 00:51 | 显示全部楼层 |阅读模式
以上是一个可调的时钟程序,栅去了键盘控制涵数程序,想在程序中加入其它赋值程序操作,
已知摇控键值:
12H     作电源开关赋值操作
OAH     作电机反转赋值操作
1FH      作电机正转赋值操作

    要求电源开关操作时切换LCD1602显视(电源关或电源开)OFF~ON


          单片机1602时钟程序
#include<reg51.h>
#include "LCD.h"
#include"ds1302.h"
#include"DS18B20.h"
//
时钟键盘
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;
sbit beep=P1^5;        
typedef unsigned int u16;         //
对数据类型进行声明定义
typedef unsigned char u8;
char num=0;
unsigned char SetState,SetPlace;

//
外部中断
void Int0Configuration();

void Delay10ms(void)   //
误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
       for(b=38;b>0;b--)
           for(a=130;a>0;a--);
}

//
温度显示函数
void display(int temp)         
{
           floattp;  
        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();
                                             
        }


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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