久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3084|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

想用按鍵來控制LCD1602屏的參數(shù),就是說往屏幕里的某個(gè)單元里寫入?yún)?shù),這5個(gè)按鍵....

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:939423 發(fā)表于 2021-7-22 09:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
是89C52的單片機(jī),我還是初級(jí)者,剛接觸單片機(jī)不到半年。求指導(dǎo)。拜托了!!!

改懵逼的LCD1602液晶.7z

18.73 KB, 下載次數(shù): 7

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2021-7-22 10:22 | 只看該作者
1、你先設(shè)計(jì)出一組參數(shù),再給出一個(gè)顯示的方案。
例如:A決定行,B決定列,C決定……,形成一個(gè)協(xié)議。
2、根據(jù)ABC……進(jìn)行顯示。
3、根據(jù)按鍵修改ABC……的值。
大功造成。
回復(fù)

使用道具 舉報(bào)

板凳
ID:939423 發(fā)表于 2021-7-22 11:07 | 只看該作者
yzwzfyz 發(fā)表于 2021-7-22 10:22
1、你先設(shè)計(jì)出一組參數(shù),再給出一個(gè)顯示的方案。
例如:A決定行,B決定列,C決定……,形成一個(gè)協(xié)議。
2 ...


#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "lcd.h"

typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
------------------------------------------------------------------
sbit k1=P2^4;
sbit k2=P2^5;
sbit k3=P2^6;
sbit beep=P2^4;
sbit k4=P2^7;
------------------------------------------------------------------
------------------------------------------------------------------
u8 Disp[]="0123456789: zns";//z正常,n鬧鐘,s設(shè)置
u8 s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16;
u8 ss1,ss2,ss3,ss4,ss5,ss6,ss7,ss8,ss9,ss10,ss11,ss12,ss13,ss14,ss15,ss16;
u8 nz1,nz2,nz3,nz4,nz5,nz6,nz7,nz8,nz9,nz10,nz11;
u8 nzz1,nzz2,nzz3,nzz4,nzz5,nzz6;
u8 hw;
u8 msxz,msxz1,zns;//模式選擇
u8 kg;//k1繼電器
u8 fm;
u8 tsec; //秒
u8 tmin; //分
u8 thour;//時(shí)
u16  dat,dat1;
u16  tt1,ssbz,hh,tt2;
/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能                   : 延遲
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}
//-----------------------------
void  displays()
{
        /*第一行*/
    hh=1;
        LcdInit();          
        LcdWriteData(Disp[ss1]);       
        LcdWriteData(Disp[ss2]);          
        LcdWriteData(Disp[10]);         
        LcdWriteData(Disp[ss4]);       
        LcdWriteData(Disp[ss5]);       
        LcdWriteData(Disp[10]);       
        LcdWriteData(Disp[ss7]);       
        LcdWriteData(Disp[ss8]);       
        LcdWriteData(Disp[11]);
        LcdWriteData(Disp[msxz1]);                       
}
/*******************************************************************************
* 函 數(shù) 名         : nzxs
* 函數(shù)功能                   : 鬧鐘顯示
*******************************************************************************/
void nzxs()
{
        /*第一行*/
    hh=1;
        LcdInit();          
        LcdWriteData(Disp[nzz1]);       
        LcdWriteData(Disp[nzz2]);          
        LcdWriteData(Disp[10]);         
        LcdWriteData(Disp[nzz3]);       
        LcdWriteData(Disp[nzz4]);       
        LcdWriteData(Disp[10]);       
        LcdWriteData(Disp[nzz5]);       
        LcdWriteData(Disp[nzz6]);       
        LcdWriteData(Disp[11]);
        LcdWriteData(Disp[msxz1]);
}

/*******************************************************************************
* 函 數(shù) 名         : key1
* 函數(shù)功能                   : 設(shè)置,顯示光標(biāo)
*******************************************************************************/

void key1()                //設(shè)置,顯示光標(biāo)
{
if(k1==0)
{
  delay(100);
  if(k1==0)
  {
  while(!k1);
   kg++;
  if(kg==3)
  {
   kg=0;
   hw=0;  
  }
   
  }
}
}

/*******************************************************************************
* 函 數(shù) 名         : key2
* 函數(shù)功能                   : 換位
*******************************************************************************/

void key2()                //換位
{

if(k2==0)
{
  delay(100);
  if(k2==0)
  {
    while(!k2);
    hw++;
  }
  if(hw>=6)
  hw=0;
}
}

/*******************************************************************************
* 函 數(shù) 名         : key3
* 函數(shù)功能                   : 加數(shù)
*******************************************************************************/

void key3()                //加數(shù)
{
if(k3==0)
{
  delay(100);
  if(k3==0)
  {
   while(!k3);
   if(kg==2)        //s設(shè)置模式
   {
   if(hw==0)
    {
        thour=thour+10;
        if(thour>=24)thour=thour%10;
        }
   if(hw==1)
    {
        thour=thour+1;
        if(thour>=24)thour=0;       
        }
   if(hw==2)
    {
        tmin=tmin+10;
        if(tmin>=60)tmin=0;
        }
   if(hw==3)
    {
    tmin=tmin+1;
        if(tmin>=60)tmin=0;
        }
   if(hw==4)
    {
    tsec=tsec+10;
        if(tsec>=60)tsec=0;
        }
   if(hw==5)
    {
        tsec=tsec+1;
        if(tsec>=60)tsec=0;
        }
   if(hw==6)
    {
         msxz=msxz+1;
         if(msxz>=15)msxz=12;
        }
        }

        }
       
        if(kg==1)//n鬧鐘模式
   {
   if(hw==0)
    {
        nz1=nz1+1;
        if(nz1>=2)nz1=0;
        }
   if(hw==1)
    {
        nz2=nz2+1;
        if(nz2>=9)nz2=0;       
        }
   if(hw==2)
    {
        nz3=nz3+1;
        if(nz3>=6)nz3=0;
        }
   if(hw==3)
    {
    nz4=nz4+1;
        if(nz4>=9)nz4=0;
        }
   if(hw==4)
    {
    nz5=nz5+1;
        if(nz5>=6)nz5=0;
        }
   if(hw==5)
    {
        nz6=nz6+1;
        if(nz6>=9)nz6=0;
        }
   if(hw==6)
    {
         msxz=msxz+1;
         if(msxz>=15)msxz=12;
        }
        }
  
  }
}
//-----------------------------------------------------------------------------
void Timer0Init()
{
        TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。

        TH0=(65535-49751)/256;        //給定時(shí)器賦初值,定時(shí)50ms
        TL0=(65535-49751)%256;       
        //ET0=1;//打開定時(shí)器0中斷允許
        EA=1;//打開總中斷
        TR0=1;//打開定時(shí)器                       
}

void Timer0() interrupt 1
{
        //static u16 i;
        TH0=(65535-49751)/256;        //給定時(shí)器賦初值,定時(shí)50ms
        TL0=(65535-49751)%256;
        tt1++;
        if(tt1>=20)
        {
          tt1=0;
          ssbz=~ssbz;
    // tsec++;
        }       
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void Timer1Init()
{
        TMOD|=0X10;//選擇為定時(shí)器1模式,工作方式1,僅用TR1打開啟動(dòng)。

        TH1=(65535-49751)/256;        //給定時(shí)器賦初值,定時(shí)50ms
        TL1=(65535-49751)%256;       
        ET1=1;//打開定時(shí)器1中斷允許           //2021
        EA=1;//打開總中斷
        TR1=1;//打開定時(shí)器                       
}
/**************************************************************************************/
void Timer1() interrupt 3
{
        //static u16 i;
        TH1=(65535-49751)/256;        //給定時(shí)器賦初值,定時(shí)50ms
        TL1=(65535-49751)%256;
        tt2++;
        if(tt2>=20)
        {
        tt2=0;
        tsec++;
        }       
}

void  ssfz()
  {
        if(ssbz==0)
        {
        if(hw==0)
           ss1=11;
        if(hw==1)
           ss2=11;
        if(hw==2)
           ss4=11;
        if(hw==3)
           ss5=11;
        if(hw==4)
           ss7=11;
        if(hw==5)
           ss8=11;
        if(hw==6)
           msxz1=11;               
        }
        else{
             ss1=s1;
                 ss2=s2;
                 ss3=s3;
                 ss4=s4;
                 ss5=s5;
                 ss6=s6;                 
                 ss7=s7;
                 ss8=s8;

            }                       
  }
void  ssfz1()
  {
        if(ssbz==0)
        {
        if(hw==0)
           nzz1=11;
        if(hw==1)
           nzz2=11;
        if(hw==2)
           nzz3=11;
        if(hw==3)
           nzz4=11;
        if(hw==4)
           nzz5=11;
        if(hw==5)
          nzz6=11;               
        }
        else{
          nzz1=nz1;
          nzz2=nz2;
          nzz3=nz3;
          nzz4=nz4;
          nzz5=nz5;
          nzz6=nz6;

            }                       
  }
/*-------------------------------------------------------------------------------*/
void clockdisplay()
{
  if(tsec>=60)
  {
  tsec=0;
  tmin++;
  }
  if(tmin>=60)
  {
  tmin=0;
  thour++;
  }
  if(thour>=24)
  {
   thour=0;
  }
  s7=(tsec)/10;
  s8=(tsec)%10;
  s4=(tmin)/10;
  s5=(tmin)%10;
  s1=(thour)/10;
  s2=(thour)%10;
}


      
/*******************************************************************************
* 函 數(shù) 名         : fmkg
* 函數(shù)功能                   : 蜂鳴繼電器
*******************************************************************************/
void fmkg()
{
if(fm==1)
{
  beep=~beep;
  delay(10);
}
if(k4==0)
{
  delay(100);
  {
  while(!k4);
   if(k4==0)
   fm++;
   if(fm==2)fm=0;  
  }
}
}
   
/*******************************************************************************
* 函 數(shù) 名         : bee
* 函數(shù)功能                   : 蜂鳴判斷程序
*******************************************************************************/  
void bee()
{
if(ss1==nz1)
{
  if(ss2==nz2)
  {          
   if(ss4==nz3)
   {
    if(ss5==nz4)
        {
         if(ss7==nz5)
         {
          if(ss8==nz6)
          {
       fm++;
          }
     }
    }
   }
  }
}
}  
/*******************************************************************************
* 函 數(shù) 名         : fmkg
* 函數(shù)功能                   : 蜂鳴繼電器
*******************************************************************************/
/*
void fmkg()
{
if(fm==1)
{
  beep=~beep;
  delay(10);
}
if(k4==0)
{
  delay(100);
  {
  while(!k4);
   if(k4==0)
   fm++;
   if(fm==2)fm=0;  
  }
}
} */  
/*******************************************************************************
* 函 數(shù) 名         : main
* 函數(shù)功能                   : 主程序
*******************************************************************************/
void main(void)
{
kg=0;
fm=0;
Timer0Init();
Timer1Init();
ssbz=0;
ET0=1;
while(1)
{ //displays();
/*  bee();                   /////////////
if(fm==1)
{
  beep=~beep;
  delay(10);
}
if(fm>=2)fm=0;
  
if(k4==0)
{
  delay(100);
  {
   if(k4==0)fm++;
   delay(100);
  }
}
  // fmkg();       
  
        msxz1=zns;
    key1();
        if(kg==1)
        {
          msxz=13;
          msxz1=msxz;
          ssfz1();
          nzxs();

      key2();       
      key3();
     
          ET0=1;
          ET1=1;
          nzz1=nz1;
          nzz2=nz2;
          nzz3=nz3;
          nzz4=nz4;
          nzz5=nz5;
          nzz6=nz6;
        }
        if(kg==2)
        {
         msxz=14;
         msxz1=msxz;
         clockdisplay();
          ssfz();
         displays();         
      key2();       
      key3();
     // ssfz();
          ET0=1;
          ET1=0;
          ss1=s1;
                 ss2=s2;
                 ss3=s3;
                 ss4=s4;
                 ss5=s5;
                 ss6=s6;
                 ss7=s7;
                 ss8=s8;       
        } */
//        if(kg==0)
        {
         msxz=12;
         msxz1=msxz;
         clockdisplay();
         displays();
          ET0=0;
         // ET1=1;
             ss1=s1;
                 ss2=s2;
                 ss3=s3;
                 ss4=s4;
                 ss5=s5;
                 ss6=s6;
                 ss7=s7;
                 ss8=s8;       
        }
   //displays();
   
}
                                       
}
這是我剛才修改的,但是這個(gè)只能顯示一行時(shí)鐘,不知道哪里出問題了
回復(fù)

使用道具 舉報(bào)

地板
ID:939710 發(fā)表于 2021-7-22 11:17 | 只看該作者
總共就16*2  32個(gè)字符。。怎么整也能整明白吧
回復(fù)

使用道具 舉報(bào)

5#
ID:939423 發(fā)表于 2021-7-22 17:02 | 只看該作者
lishengaha 發(fā)表于 2021-7-22 11:17
總共就16*2  32個(gè)字符。。怎么整也能整明白吧

能,但是我想讓屏幕的第二行顯示年月日,怎么實(shí)現(xiàn)?
回復(fù)

使用道具 舉報(bào)

6#
ID:161164 發(fā)表于 2021-7-22 17:36 | 只看該作者
lhpsnd 發(fā)表于 2021-7-22 17:02
能,但是我想讓屏幕的第二行顯示年月日,怎么實(shí)現(xiàn)?

標(biāo)題不要寫得太長(zhǎng),后面都被省略了

你用了LcdInit(); 來清屏,所以永遠(yuǎn)由第一行開始
打開lcd.h,嘗試了解一下每句代碼的含義
百度一下LCD1602的命令,找出第二行第一位的地址

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:939423 發(fā)表于 2021-7-23 10:04 | 只看該作者
lkc8210 發(fā)表于 2021-7-22 17:36
標(biāo)題不要寫得太長(zhǎng),后面都被省略了

你用了LcdInit(); 來清屏,所以永遠(yuǎn)由第一行開始

感謝,我慢慢弄吧,對(duì)于一個(gè)初級(jí)者來說有點(diǎn)難呀!不太好理解。
回復(fù)

使用道具 舉報(bào)

8#
ID:955647 發(fā)表于 2021-7-28 21:14 | 只看該作者
例如本程序,將eeprom滑動(dòng)變阻器阻值讀出通過k3鍵確認(rèn)輸入lcd1602
#include<reg52.h>         
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar key[]="7777";  //初始密碼
#define I2CDelay() {_nop_();_nop_();_nop_();_nop_();}

sbit DOUT = P3^7;          
sbit CLK  = P3^6;          
sbit DIN  = P3^4;          
sbit CS   = P3^5;         //eeprom定義
sbit lcden=P2^7;
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
sbit key1=P3^1;
sbit key2=P3^0;
sbit key3=P3^2;
uchar code table[]="012345789";
uint bai,num,keynum1,d1,d2,d3,d4;
void delay(uint i)
{
        while(i--);       
}

void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void SPI_Write(uchar dat)
{
        uchar i;
        CLK = 0;
        for(i=0; i<8; i++)
        {
                DIN = dat >> 7;         
                dat <<= 1;
                CLK = 0;                       
                CLK = 1;
        }
}
uint SPI_Read(void)
{
        uint i, dat=0;
        CLK = 0;
        for(i=0; i<12; i++)               
        {
                dat <<= 1;
                CLK = 1;
                CLK = 0;
                dat |= DOUT;
        }
        return dat;       
}
uint Read_AD_Data(uchar cmd)
{
        uchar i;
        uint AD_Value;
        CLK = 0;
        CS  = 0;
        SPI_Write(cmd);
        for(i=6; i>0; i--);        
        CLK = 1;         
        _nop_();
        _nop_();
        CLK = 0;
        _nop_();
        _nop_();
        AD_Value=SPI_Read();
        CS = 1;
        return AD_Value;       
}
void write_com(uint com)
{
        lcdrs=0;
        P0=com;
        lcden=0;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;
}
void write_date(uint date)
{
        lcdrs=1;
        P0=date;
        lcden=0;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;
}
void init_lcd()
{
        lcden=0;
        lcdrw=0;
        write_com(0x38);
        write_com(0x0c);       
        write_com(0x06);
        write_com(0x01);
}
void datapros()
{
        uint temp;
        static uchar i;
        if(i==10)
        {
                i=0;
                temp = Read_AD_Data(0x94);       
        }
        i++;
}
void display()
{
        uint temp;
        bai=temp%1000/100;
         write_com(0x80);
         write_date(table[bai]);
}
void compare()
{
        if(d1==key[0]&&d2==key[1]&&d3==key[2]&&d4==key[3])
        {
                write_com(0x80+4);
                write_date('1');
         }
else
        {
                write_com(0x80+5);
                write_date('0');
        }
}
void keypro()
{
       
       
        if(key2==0)
        {
                delayms(5);
                if(key2==0)
                {
                        compare();
                }
                while(!key2);
        }
        if(key3==0)
        {
                delayms(5);
                if(key3==0)
                {
                        keynum1++;
                        while(!key3);
                        if(keynum1==1)
                        {
                         write_com(0x80+0x40);
                         write_date(table[bai]);
                                d1=table[bai];
                               
                        }
                                if(keynum1==2)
                        {
                                write_com(0x80+0x40+1);
                           write_date(table[bai]);
                                d2=table[bai];
                        }
                       
                        if(keynum1==3)
                        {
                                write_com(0x80+0x40+2);
                           write_date(table[bai]);
                                d3=table[bai];
                        }
                       
                        if(keynum1==4)
                        {
                                write_com(0x80+0x40+3);
                           write_date(table[bai]);
                                d4=table[bai];
                        }               
                }
        }
}       
void main()
{       
        init_lcd();
        while(1)
        {
                keypro();
                datapros();
                display();
        }               
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲人成人一区二区在线观看 | 91视频播放 | 日日干天天操 | 国产精品毛片一区二区三区 | 99热成人在线 | 一级欧美| 国产亚洲精品久久久久动 | 国产九九九 | 一本色道精品久久一区二区三区 | 国产精品亚洲欧美日韩一区在线 | 亚洲一区影院 | 女女爱爱视频 | 99re在线视频 | 玖玖视频免费 | www国产成人免费观看视频,深夜成人网 | 国产一级片久久久 | 国产伦精品一区二区三区在线 | 午夜网站视频 | 欧美在线视频一区二区 | 亚洲国产成人av好男人在线观看 | 日韩精品a在线观看图片 | 91一区| 中文在线一区 | 国产精品一级 | 91超碰在线| 亚洲网站在线播放 | 成人亚洲| 久久国产精品视频 | 日本精品久久久久久久 | 久久黄色精品视频 | 久久a久久 | 日本一区二区在线视频 | 天天色综 | 国产精品欧美一区二区三区 | 99精品国产一区二区青青牛奶 | 成人精品一区二区三区中文字幕 | 国产精品综合一区二区 | 亚洲一区二区免费视频 | 99视频免费看 | 美国av毛片 | 国产一区二区三区在线视频 |