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

標題: 用1602單片機設計的可調電子鐘顯示不正確 [打印本頁]

作者: Rerborn    時間: 2017-11-19 16:17
標題: 用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)    //寫指令函數(shù)
{
  en=0;
  rs=0;
  delay(5);
  P0=com;
  delay(5);
   en=1;
  delay(5);
  en=0;
}
void write_data(uchar dat)   //寫數(shù)據(jù)函數(shù)
{
   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位數(shù)據(jù)接口
    write_com(0x0c);//設置開顯示,不顯示光標
    write_com(0x06);//寫一個字符后地址指針加1
    write_com(0x01);//顯示清零,數(shù)據(jù)指針清零

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ù)
{
    sh=num/10;   //分離出十位
    ge=num;    //分離出個位
   write_com(0x80+0x40+add); //第二行數(shù)據(jù)指針位置調整
   write_data(0x30+sh);   //更改顯示數(shù)據(jù)的十位
   write_data(0x30+ge);  //更改顯示數(shù)據(jù)的個位
}

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);  //數(shù)據(jù)指針移動到秒的個位處
             write_com(0x0f);//顯示光標,閃爍
                }
                if(num1==2)
                  {
          write_com(0x80+0x40+0x08);  //數(shù)據(jù)指針移到到分鐘的個位處
                   }
                            if(num1==3)
                              {        
                 write_com(0x80+0x40+0x05);  //數(shù)據(jù)指針移到到小時的個位處
                               }
                                    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, 下載次數(shù): 39)

捕獲.PNG

作者: zl2168    時間: 2017-11-19 19:19
本帖最后由 zl2168 于 2017-11-19 19:20 編輯

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

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





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 蜜桃视频一区二区三区 | 国产一区二区av | 99久久精品一区二区成人 | 欧美一级www片免费观看 | 欧洲免费毛片 | 亚洲成av片人久久久 | 男人的天堂avav | 日本一区二区不卡 | 欧美成视频 | 中文字幕视频在线免费 | 午夜影院在线免费观看视频 | 夜夜操操操 | 韩日在线观看视频 | 日韩精品国产精品 | 亚洲天堂中文字幕 | 国产不卡视频 | 欧美中文字幕一区二区三区亚洲 | www.国产91| aaaaa毛片| 久精品久久 | 99热精品在线观看 | 综合二区| 七七婷婷婷婷精品国产 | 亚洲91| 99久久精品免费看国产免费软件 | 一级黄色生活视频 | 国产伦精品一区二区三区精品视频 | 美女视频一区二区三区 | 亚洲一区三区在线观看 | 爱爱爱av | 久在线 | 国产免费一区二区三区免费视频 | 91www在线观看| 成人网视频 | 国产成人精品久久二区二区91 | 中国一级大毛片 | 99日韩| 91视频在线观看 | 久久不卡 | a级片在线| 久久机热 |