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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2827|回復: 1
打印 上一主題 下一主題
收起左側

用1602單片機設計的可調電子鐘顯示不正確

[復制鏈接]
跳轉到指定樓層
樓主
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0; //定義液晶顯示器控制端口
sbit rw=P2^1;
sbit en=P2^2;
sbit s1=P1^0; //定義按鍵控制
sbit s2=P1^1;
sbit s3=P1^2;
sbit s4=P1^3;
uchar shi,fen,miao,ri,yue,nin;
uchar code table[]={"      clock"};
uchar code table1[]={"    00:00:57"};
uchar num,num1,count;
uint i,sh,ge,s,g;
void delay(uchar time)   //延時
{
   uint j;
   for(;time>0;time--)
   for(j=0;j<125;j++);
  }

void write_com(uchar com)    //寫指令函數
{
  en=0;
  rs=0;
  delay(5);
  P0=com;
  delay(5);
   en=1;
  delay(5);
  en=0;
}
void write_data(uchar dat)   //寫數據函數
{
   en=0;
  rs=1;
  delay(5);
   P0=dat;
  delay(5);
   en=1;
  delay(5);
  en=0;
}
void init()   //初始化
{
     en=0;
     rw=0;
    write_com(0x38);//設置16X2顯示,5X7點陣,8位數據接口
    write_com(0x0c);//設置開顯示,不顯示光標
    write_com(0x06);//寫一個字符后地址指針加1
    write_com(0x01);//顯示清零,數據指針清零

for(i=0;i<(sizeof(table)-1);i++)   //第一行寫
{
    write_com(0x80+i);
    write_data(table[i]);
}


for(i=0;i<(sizeof(table1)-1);i++) //第二行寫
{
       write_com(0x80+0x40+i);
    write_data(table1[i]);
}
miao=56;
fen=59;
shi=23;
TMOD=0x01;    //time0作為定時器工作在模式1下
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;  //開啟總中斷
ET0=1;   //開啟time0中斷
TR0=1;   //啟動time0
}
void write_sfm(uchar add,uchar num)  //時分秒函數
{
    sh=num/10;   //分離出十位
    ge=num;    //分離出個位
   write_com(0x80+0x40+add); //第二行數據指針位置調整
   write_data(0x30+sh);   //更改顯示數據的十位
   write_data(0x30+ge);  //更改顯示數據的個位
}

void timer0() interrupt 1 //time0中斷
{
   TH0=(65536-50000)/256;  //重裝初始值
   TL0=(65536-50000)%6;
   count++;   
if(count==20)  //20次到則滿一秒
  {
     count=0;
     miao++;
   if(miao==60)
    {
        miao=0;
        fen++;
      if(fen==60)
         {
             fen=0;
              shi++;
     if(shi==24)
                {
             shi=0;     
        }
          write_sfm(4,shi);      
          }
     write_sfm(7,fen);
     }   
   write_sfm(10,miao);
  }
}
void keyscan()    //鍵盤掃描
{  if(s1==0) //按下S1      
    {
      delay(5);
     if(s1==0)
       {
             num1++;   
         while(!s1);//等待釋放         
            if(num1==1)
              {
                  TR0=0;
          write_com(0x0e);  //顯示光標,不閃爍
      write_com(0x80+0x40+0x0b);  //數據指針移動到秒的個位處
             write_com(0x0f);//顯示光標,閃爍
                }
                if(num1==2)
                  {
          write_com(0x80+0x40+0x08);  //數據指針移到到分鐘的個位處
                   }
                            if(num1==3)
                              {        
                 write_com(0x80+0x40+0x05);  //數據指針移到到小時的個位處
                               }
                                    if(num1==4)
                                       {
                                         num1=0;    //清零
                                      write_com(0x0c);  //重新顯示
                                       TR0=1;   //重新啟動計時   
                                        }
        }
    }

           if(num1!=0)   //按下S2則選擇時/分/秒加1
          {
             if(s2==0)
              {
                delay(5);
                 if(s2==0)
                  {
                    while(!s2);

               if(num1==1)   
                      {
                  delay(20);
                         miao++;
                       if(miao==60)  
                      miao=0;
                       write_sfm(10,miao);            
        write_com(0x80+0x40+0x0a);
                       }
                           if(num1==2)
                            {
                              fen++;
                             if(fen==60)
                             fen=0;
                          write_sfm(7,fen);            
                     write_com(0x80+0x40+0x07);
                               }
                                  if(num1==3)
                                    {
                                     shi++;
                                    if(shi==24)
                                     shi=0;
                                  write_sfm(4,shi);                       
                         write_com(0x80+0x40+0x04);
                                       }
                    }
              }
          }

     if(num1!=0)
               if(s3==0) //按下S3則選擇時/分/秒 減1
               {
                  delay(5);
                  if(s3==0)
                  {
                  while(!s3);
                     if(num1==1)
                      {
                     delay(20);
                      miao--;
                         if(miao==-1)
                       miao=59;
              write_sfm(10,miao);      
             write_com(0x80+0x40+0x0a);
                       }
                         if(num1==2)
                          {
                               fen--;
                             if(fen==-1)
                           fen=59;
               write_sfm(7,fen);   
               write_com(0x80+0x40+0x07);
                           }
                              if(num1==3)
                               {
                                shi--;
                                if(shi==-1)
                                shi=23;
                             write_sfm(4,shi);         
               write_com(0x80+0x40+0x04);
                               }
                  }
               }

                              if(num1!=0)
            if(s4==0)   //確定按鍵
             {
                                     delay(5);
                                       if(s4==0)
                                         {
                                         while(!s4);
            num1=0;    //清零
                                           write_com(0x0c);  //重新顯示
                                            TR0=1;   //重新啟動計時   
            }
          }

}
void main()
{
    init();
     while(1)
     {
       keyscan();
     }
}

捕獲.PNG (88.34 KB, 下載次數: 39)

捕獲.PNG
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:111634 發表于 2017-11-19 19:19 | 只看該作者
本帖最后由 zl2168 于 2017-11-19 19:20 編輯

給你介紹一個正確有效的案例,自己對照查錯吧!
實例91  具有校正功能的時鐘1302LCD1602顯示)

先Proteus仿真,確認有效。 實例91 帶校正時鐘1302(LCD1602顯示).rar (52.68 KB, 下載次數: 6)
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1,書中電路和程序設計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人二区 | 国产在线一区二区三区 | 日韩欧美理论片 | av在线一区二区三区 | 一区二区三区四区电影视频在线观看 | 亚洲 91| 一本色道精品久久一区二区三区 | 国产91av视频在线观看 | 欧美成人激情 | 高清视频一区二区三区 | 亚洲一二三区精品 | 亚洲精品国产电影 | 欧美一区二区三区在线观看视频 | 亚洲精品视频在线播放 | 亚洲二区视频 | 日韩在线中文字幕 | 在线观看亚洲精品 | 色精品| 蜜桃特黄a∨片免费观看 | 久久久久久成人网 | 91免费在线看 | 乱码av午夜噜噜噜噜动漫 | 成人中文字幕在线观看 | 精品一区电影 | 中文字幕免费 | 国产精品成人一区二区三区夜夜夜 | 一区二区三区四区视频 | 四色永久 | 亚洲综合在线一区 | 亚洲天堂av网 | 亚洲国产精品久久久 | 午夜精品久久久久久久99黑人 | 成人免费视频观看视频 | 国产成人精品综合 | 日韩国产三区 | 国产精品99久久久久久动医院 | 人人种亚洲 | 九九九久久国产免费 | 亚洲综合成人网 | 91综合网| 国产精品亚洲综合 |