找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3753|回復(fù): 6
收起左側(cè)

1602數(shù)字顯示

[復(fù)制鏈接]
ID:137499 發(fā)表于 2017-7-15 09:43 | 顯示全部樓層 |閱讀模式
1黑幣
用1602顯示一個可變的數(shù)字,初始為0,K1按下時數(shù)字加1,K2按下時數(shù)字減1

回復(fù)

使用道具 舉報

ID:219388 發(fā)表于 2017-7-15 15:34 | 顯示全部樓層
這可以通過改變1602的寫入數(shù)據(jù)來實現(xiàn),按鍵按下時,數(shù)據(jù)加一,再將新的數(shù)據(jù)放入1602寫入數(shù)據(jù)里就可以了
回復(fù)

使用道具 舉報

ID:164602 發(fā)表于 2017-7-16 10:32 | 顯示全部樓層
按照你的要求,我寫了一個程序:
#include<reg51.h>       

#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

sbit k1=P3^1;
sbit k2=P3^0;


unsigned char sz[12]="computation:",BUF[12]="0123456789+-";

void Lcd1602_Delay1ms(uint c)
{
    uchar a,b;
        for (; c>0; c--)
        {
                 for (b=50;b>0;b--)
                 {
                          for(a=1;a>0;a--);
                 }      
        }

}

void Delay15ms()
{
        unsigned char i, j;

        i = 30;
        j = 43;
        do
        {
                while (--j);
        } while (--i);
}

void LcdWriteCom(uchar com)
{
        LCD1602_E = 0;
        LCD1602_RS = 0;
        LCD1602_RW = 0;
       
        LCD1602_DATAPINS = com;
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;       
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}

void LcdWriteData(uchar dat)
{
        LCD1602_E = 0;
        LCD1602_RS = 1;
        LCD1602_RW = 0;

        LCD1602_DATAPINS = dat;
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}

void LcdInit()
{
        LcdWriteCom(0x38);
        LcdWriteCom(0x0c);
        LcdWriteCom(0x06);
        LcdWriteCom(0x01);
        LcdWriteCom(0x02);
        LcdWriteCom(0x80);
}

void LCDreturn()
{
        Delay15ms();
        LcdWriteCom(0x38);
        Delay15ms();
        LcdWriteCom(0x38);
        Delay15ms();
        LcdWriteCom(0x38);
        LcdWriteCom(0x08);
        LcdWriteCom(0x01);
        LcdWriteCom(0x02);
        LcdWriteCom(0x38);
        LcdWriteCom(0x0c);
        LcdWriteCom(0x06);
        LcdWriteCom(0x80);
}

void main(void)
{
        unsigned char i;
        char j=0,k;
        LCDreturn();
        LcdInit();
        for (i=0;i<12;i++)
        {
                LcdWriteData(sz[i]);
        }
        while(1)
        {
                if (k1==0)
                {
                        Delay15ms();
                        if (k1==0)
                        {
                                j++;
                                if (j>125)
                                {
                                        j=-125;
                                }
                        }
                        for (i=0;((i<20)&&(k1==0));i++)
                        {
                                Delay15ms();
                        }
                }
                if (k2==0)
                {
                        Delay15ms();
                        if (k2==0)
                        {
                                j--;
                                if (j<-125)
                                {
                                        j=125;
                                }
                        }
                        for (i=0;((i<20)&&(k2==0));i++)
                        {
                                Delay15ms();
                        }
                }
                LcdWriteCom(0x8c);
                if (j<0)
                {
                        LcdWriteData(BUF[11]);
                        k=-j;
                }
                else
                {
                        LcdWriteData(BUF[10]);
                        k=j;
                }
                LcdWriteData(BUF[k/100]);//多位結(jié)果只能一次一次地找位
                LcdWriteData(BUF[(k%100)/10]);
                LcdWriteData(BUF[(k%10)/1]);
        }                               
}

單片機:STC89C52RC,其它電路如圖所示。
1.jpg
2.jpg
回復(fù)

使用道具 舉報

ID:137499 發(fā)表于 2017-7-17 09:12 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-7-16 10:32
按照你的要求,我寫了一個程序:
#include       

拜謝大神,那要是按完k1按k2數(shù)字加一,然后按完k2按k1數(shù)字減一要怎么改
回復(fù)

使用道具 舉報

ID:918467 發(fā)表于 2021-9-28 20:21 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-7-16 10:32
按照你的要求,我寫了一個程序:
#include       

請問  LcdWriteCom(0x02);  這條指令是什么作用
回復(fù)

使用道具 舉報

ID:918467 發(fā)表于 2021-9-28 20:23 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2017-7-16 10:32
按照你的要求,我寫了一個程序:
#include       

不好意思,我還想請問一下  void LCDreturn()  這一段的作用是什么,謝謝啦
回復(fù)

使用道具 舉報

ID:415064 發(fā)表于 2021-9-30 17:54 | 顯示全部樓層
lqh_fairy 發(fā)表于 2021-9-28 20:23
不好意思,我還想請問一下  void LCDreturn()  這一段的作用是什么,謝謝啦

感覺是多次初始化 預(yù)防初始化失敗
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表