zoukankan      html  css  js  c++  java
  • LCD1602动态显示按键设置数据99倒数

    一、程序源码:

    #include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
    
    
    #define uint unsigned int    //定义常用数据类型替代码
    #define uchar unsigned char
    #define dat P0                        //定义LCD1602的数据口为P0
    
    sbit k0=P2^0;                        //定义K0按键为P20
    sbit k1=P2^1;                        //定义K0按键为P21
    sbit k2=P2^2;                        //定义K0按键为P22
    sbit k3=P2^3;                        //定义K0按键为P23
    sbit rs=P1^4;                        //定义RS口为P14
    sbit rw=P1^5;                        //定义RW口为P15
    sbit e=P1^6;                        //定义E口为P16
    
    uchar busy;                         //1602判忙标志
    uchar table0[16]={"0123456789"};
    uchar table1[16]={"Begin:"};
    
    uint i=0;
    uint j=0;
    uint temp;
    uchar key_mode=0;
    
    int k=99;
    
    void delay(unsigned int i)            
    {
        while(i--);
    }
    
    void delay_1ms(void)                //延时程序
    {
        uchar i,j;
        for(i=0;i<10;i++)
        for(j=0;j<20;j++); 
    }
    
    void busy_1602(void)                //查询忙碌标志信号程序
    {
        do
        {
            e=0;
            rw=1;
            rs=0;
            e=1;
            busy=dat;
            e=0;    
            delay_1ms();
        } while(busy&&0x10==1);
    }
    
    void com_1602(uchar a)                //写指令到LCM程序
    {
           busy_1602();
           e=0;
           rw=0;
           rs=0;
           e=1;
           dat=a;
           e=0;
    }
    
    void dat_1602(uchar a)                //写数据到LCM程序
    {
           busy_1602();
           e=0;
           rw=0;
           rs=1;
           e=1;
           dat=a;
           e=0;
    }
    
    void int_1602(void)                    //启动LCM程序
    {
           com_1602(0x38); 
           com_1602(0x0c);
           com_1602(0x06);
           com_1602(0x01);
    }
    
    void displaySet(int d)            
    {
        uchar rev_data[16]={"-Count Reform!- "};
        com_1602(0x80);//第一行
        for(i=0;i<16;i++)                
        {
            dat_1602(rev_data[i]);
        } 
        com_1602(0xc0);    //发送数据第二行
        for(i=0;i<6;i++)                
        {
            dat_1602(table1[i]);
        }
        com_1602(0xc6);
        dat_1602(table0[d/10]);
        dat_1602(table0[d%10]);
    }
    
    void displayStatic99(int d)            
    {
        uchar rev_data[16]={"-99 Countdown!- "};
        com_1602(0x80);//第一行
        for(i=0;i<16;i++)                
        {
            dat_1602(rev_data[i]);
        } 
        com_1602(0xc0);    //发送数据第二行
        for(i=0;i<6;i++)                
        {
            dat_1602(table1[i]);
        }
        com_1602(0xc6);
        dat_1602(table0[d/10]);
        dat_1602(table0[d%10]);
    }
    
    void displayStatic00()            
    {
        uchar rev_data[16]={"-99 Countdown!- "};
        com_1602(0x80);//第一行
        for(i=0;i<16;i++)                
        {
            dat_1602(rev_data[i]);
        } 
        com_1602(0xc0);    //发送数据第二行
        for(i=0;i<6;i++)                
        {
            dat_1602(table1[i]);
        }
        com_1602(0xc6);
        dat_1602('0');
        dat_1602('0');
    }
    
    void displayDynamic(int d)            
    {
        uchar rev_data[16]={"-99 Countdown!- "};
        com_1602(0x80);//第一行
        for(i=0;i<16;i++)                
        {
            dat_1602(rev_data[i]);
        } 
        com_1602(0xc0);    //发送数据第二行
        for(i=0;i<6;i++)                
        {
            dat_1602(table1[i]);
        }
        com_1602(0xc6);
        while(d>=0)
        {
            dat_1602(table0[d/10]);
            dat_1602(table0[d%10]);
            delay(50000);
            d--;
            com_1602(0xc6);
        }
    }
    
    void keypros()
    {
        if(k0==0)          //检测按键K1是否按下
        {    
            delay(1000);   //消除抖动 一般大约10ms
            if(k0==0)     //再次判断按键是否按下
            {
                key_mode=1;              
            }
            while(!k0);     //检测按键是否松开        
        }
        if(k3==0)          //检测按键K1是否按下
        {    
            delay(1000);   //消除抖动 一般大约10ms
            if(k3==0)     //再次判断按键是否按下
            {
                key_mode=0;                          
            }
            while(!k3);     //检测按键是否松开        
        }
        if(k1==0)          //检测按键K1是否按下
        {    
            delay(1000);   //消除抖动 一般大约10ms
            if(k1==0)     //再次判断按键是否按下
            {
                key_mode=2;
                if(k<99)
                {
                    k+=1;
                }      
            }
            while(!k1);     //检测按键是否松
        }
        if(k2==0)          //检测按键K1是否按下
        {
            delay(1000);   //消除抖动 一般大约10ms
            if(k2==0)     //再次判断按键是否按下
            {
                key_mode=2;
                k-=1;     
            }
            while(!k2);     //检测按键是否松
        }    
    }
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能         : 主函数
    * 输    入       : 无
    * 输    出         : 无
    *******************************************************************************/
    void main()
    {
        int_1602();    
        while(1)
        {
            keypros();
            if(key_mode==0)
            {
                displayStatic99(k);
            }
            if(key_mode==1)
            {
                displayDynamic(k);
                key_mode=3;    
            }
            if(key_mode==2)
            {
                displaySet(k);    
            }
            if(key_mode==3)
            {
                displayStatic00();    
            }
        }        
    }

    二、视频展示:https://www.bilibili.com/video/BV1c5411W744/

  • 相关阅读:
    网络编程
    Ant path 匹配原则
    Android Html.fromhtml
    android AsyncTask
    Android 系统联系人相关URI
    Android 学习心得体会
    中国天气网api(json格式)
    android:textAppearance
    Android COLLATE LOCALIZED ASC
    Android 快递接口
  • 原文地址:https://www.cnblogs.com/wlei5206/p/13048614.html
Copyright © 2011-2022 走看看