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

QQ登錄

只需一步,快速開(kāi)始

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

顯示出問(wèn)題了,求大神們幫我看看,就小時(shí)和分鐘顯示出問(wèn)題了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:138194 發(fā)表于 2016-9-30 17:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="0123456789:";
sbit en=P2^5;                                          //使能端
sbit rs=P1^0;                                          //數(shù)據(jù)選擇端
sbit rw=P1^1;                                          //讀寫(xiě)選擇端
sbit key1=P3^4;                                          //功能選擇鍵
sbit key2=P3^5;                                          //時(shí)間加 按鍵
sbit key3=P3^6;                                          //時(shí)間減按鍵
sbit key4=P3^7;                                          //暫停按鍵
sbit dula=P2^6;                                          //申明U1鎖存器的鎖存端
sbit wela=P2^7;                                          //申明U1鎖存器的鎖存端
uint num,num1,shi=0,fen=0,miao=0; //聲明全局變量
void delayms(uint z);

//////////                   定時(shí)器0的使用                         //////////                       
void T0_time() interrupt 1                   //選用定時(shí)器0方式一
{
         TH0=(65536-45872)/256;                   //重裝初值
            TL0=(65536-45872)%256;
         num++;
         if(num>=20)                                   //1秒到
         {
                        miao++;
                        num=0;                                           //重新對(duì)num賦值,重新計(jì)時(shí)
                if(miao==60)
                {
                                   fen++;
                                miao=0;
                        if(fen==60)
                        {
                                    shi++;
                                        fen=0;
                                if(shi==24)
                                        {
                                                shi=0;
                                        }
                        }
                }
         }
}
//////////////                                用1602顯示                                         ////////////
void Wcom(uchar com)                                  //寫(xiě)命令
{
        rs=0;                                                          //選擇數(shù)據(jù)段
        P0=com;                                                          //將要寫(xiě)的命令傳送到數(shù)據(jù)總線
        delayms(5);
        en=1;                                                          //使能端給一高脈沖,將命令送入液晶控制器
        delayms(5);
        en=0;
}
void Wdate(uchar date)                                  //寫(xiě)數(shù)據(jù)
{
        rs=1;                                                          //選擇數(shù)據(jù)段
        P0=date;
        delayms(5);
        en=1;                                                          //使能端給一高脈沖,將數(shù)據(jù)送入液晶控制器
        delayms(5);
        en=0;
}
void init()                                                   //初始化函數(shù)
{
        dula=0;                                                   //關(guān)閉數(shù)碼管
        wela=0;
        rs=0;                                                   //選擇數(shù)據(jù)端
        rw=0;                                                   //選擇讀數(shù)據(jù)端
        en=0;                                                   //使能端給低電平
        Wcom(0x38);                                           //設(shè)置16x2顯示,8位數(shù)據(jù)接口
        Wcom(0x0c);                                           //設(shè)置開(kāi)顯示。不顯示光標(biāo),不閃爍光標(biāo)
        Wcom(0x06);                                           //寫(xiě)一個(gè)字符地址指針加1
        Wcom(0x01);                                           //所有顯示清零
        Wcom(0x80+0x42);
}
void show()                                                   //顯示
{
        uint shi1,shi2,fen1,fen2,miao1,miao2;
        shi1=shi/10;                                   //小時(shí)的十位
        shi2=shi%10;                                   //小時(shí)的個(gè)位
        fen1=fen/10;                                   //分鐘的十位
        fen2=fen%10;                                   //分鐘的個(gè)位
        miao1=miao/10;                                   //秒十位
        miao2=miao%10;                                   //秒個(gè)位
        Wcom(0x80+0x42);
        for(num1=0;num1<8;num1--)
        {
                Wdate(table[shi1]);
                delayms(5);
                Wdate(table[shi2]);
                delayms(5);
                Wdate(table[10]);
                delayms(5);
                Wdate(table[fen1]);
                delayms(5);
                Wdate(table[fen2]);
                delayms(5);
                Wdate(table[10]);
                delayms(5);
                Wdate(table[miao1]);
                delayms(5);
                Wdate(table[miao2]);
                delayms(5);
        }
}
/////////////                                按鍵檢測(cè)                                        /////////////////
void keyscan()
{
                if(key1==0);
                        {
                                shi++;
                                if(shi==24)
                                   shi=0;
                                   while(!key1);
                        }
                if(key2==0);
                        {
                                fen++;
                                if(fen==60)
                                {
                                        fen=0;
                                        shi++;
                                }
                                        while(!key2);
                        }
                if(key3==0)
                        {
                                 miao++;
                                if(miao==60)
                                  {
                                          fen++;
                                    miao=0;
                                  }
                                  while(!key3);
                        }
                 if(key4==0)
                         {
                                TR0=~TR0;
                        }
         
}

void main()
{
        init();
        TMOD=0X01;                                           //設(shè)置定時(shí)器0為工作方式1
        TH0=(65536-45872)/256;                   //賦初值
        TL0=(65536-45872)%256;
        EA=1;                                                   //開(kāi)啟總中斷
        ET0=1;                                                   //開(kāi)啟定時(shí)器0中斷
        TR0=1;                                                   //啟動(dòng)定時(shí)器0
        while(1)
        {
                 keyscan();
                 show();
        }
}

void delayms( uint z)                                  //延時(shí)子程序
{
        uint x,y;
        for(x=z;x>0;x--)
          for(y=110;y>0;y--);
}








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

使用道具 舉報(bào)

沙發(fā)
ID:81249 發(fā)表于 2016-10-1 21:45 來(lái)自手機(jī) | 只看該作者
是鍵掃描不對(duì)還是顯示不對(duì)?
回復(fù)

使用道具 舉報(bào)

板凳
ID:81249 發(fā)表于 2016-10-1 22:01 來(lái)自手機(jī) | 只看該作者
把顯示函數(shù)中的for循環(huán)去了看看
回復(fù)

使用道具 舉報(bào)

地板
ID:140371 發(fā)表于 2016-10-2 07:15 | 只看該作者
keyscan()函數(shù)中的 if(key1==0);  if(key2==0);  有錯(cuò)誤   改成  if(key1==0)    if(key2==0)
回復(fù)

使用道具 舉報(bào)

5#
ID:79544 發(fā)表于 2016-10-7 11:53 | 只看該作者
把按鍵掃描改一下試試,if(key2==0){fen++;if(fen==60)fen=0;
}
回復(fù)

使用道具 舉報(bào)

6#
ID:138194 發(fā)表于 2016-10-7 12:13 | 只看該作者
謝謝,問(wèn)題找到了,是按鍵沒(méi)加延時(shí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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