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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4366|回復: 5
收起左側

LCD數碼電子鐘

[復制鏈接]
ID:46855 發表于 2012-11-29 14:50 | 顯示全部樓層 |閱讀模式
請教高人,我這程序有何問題

QQ:619493038,用89C2051,P1口輸出外接反相器,作為SEG驅動口,P3口為掃描信號,其它,按鍵

#include <reg51.h>
unsigned char code seg_code[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
//unsigned char code seg_code[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,};
unsigned char set=0;
unsigned char hour=0,min=0,sec=0;
unsigned char base5ms=0;   
unsigned char alarm_h=0,alarm_m=0;
bit flash05s=0;
bit Alarm=0;

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;

sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_7=P3^7;

void init_t0();
void scan_key();
void count_time();
void disp_time();
void check_alarm();
void clock();
void delay(unsigned int k);
void alarm_on_off();
void adj_time();
void adj_alarm();
void disp_alarm();

void timer0 (void) interrupt 1  
{
 TH0=60736/256;  // 重新裝初值
 TL0=60736%256;
 base5ms++;     //全局變量+1,代表一個5ms
}

void main()
{
 init_t0();
 while(1)
 {
    if(P3_4==0)
   scan_key();
  switch(set)
  {
   case 0: clock(); break;
   case 1: adj_time();break;
   case 2: adj_alarm();break;
   case 3: alarm_on_off(); break;
   default:break;
      }
   }
}
void init_t0()
{
 TMOD=0x01;   // 定時器T0,方式一,16位定時器
 TH0=60736/256;  //裝初值  12M晶振 4.8ms溢出一次,加上裝初值的時間,中斷保存現場的時間,
 TL0=60736%256;     //應該大約是5ms
 IE=0x82;     //開總中斷,開定時器T0中斷
 TR0=1;     //啟動定時器
}

void scan_key()
{             
 delay(1);      //延時1ms,軟件去除按鍵抖動 (注:1ms是不是有點短啊,實際測試為準吧)
 if(P3_4==0)
 set++;
 if(set>=4)
 set=0;
 while(P3_4==0){;}
}
void clock()
{
 count_time();
 disp_time();
 check_alarm();
}
void count_time()
{
 if(base5ms<=100)
  flash05s=0;
 else
  flash05s=1;
 if(base5ms>=200)
 {
  sec++;
     base5ms=0;
 }
 if(sec==60)
 {
  min++;
  sec=0;
 }
 if(min==60)
 {
  hour++;
  min=0;
 }
 if(hour==24)
 {
  hour=0;
    }
}
void disp_time()
{
 P1=seg_code[hour/10];
 P3&=0xf7;    //P3.3=0;
 delay(1);
 P1=seg_code[hour%10];
 P3&=0xfb;      //p3.2=0;
 delay(1);
 if(flash05s==1)     //沒間隔0.5S,小數點閃爍一次
 {
    if(P3_2==0)
   P1_7=0;
    else
   P1_7=1;
   }
 delay(1);
 P1=seg_code[min/10];
 P3&=0xfd;          //p3.1=0;
 delay(1);
 if(Alarm==1)
 {
  if(P3_1==0)
   P1_7=0;
  else
   P1_7=1;
  delay(1);
 }
 P1=seg_code[min%10];
 P3&=0xfe;    //p3.0=0;
 delay(1);
}
void check_alarm()
{
 if(Alarm==1)
 {
     if(hour==alarm_h)
  {
       if(min==alarm_m)
        if(P3_0==0)
     {
      P1_7=0;
     delay(1);
     }
       else
     P1_7=1;
  }
  if(P3_5==0||P3_7==0)
  {
   delay(1);
   if(P3_5==0||P3_7==0)
   Alarm=0;
  }
   }
}
void alarm_on_off()
{
 unsigned char i;
    if(P3_5==0)
 Alarm=1;
    for(i=0; i<30; i++)
 {
     disp_alarm();
  P1=seg_code[alarm_m/10];
  P3=0xfd;
  delay(1);
  if(P3_1==0)
  {
   if(Alarm==1)
   P1_7=0;
  }
  else
   P1_7=1;
   delay(1);
 }

 if(P3_7==0){
  delay(1);
 if(P3-7==0)
  Alarm=0;
 for(i=0;i<30;i++)
 {
  disp_alarm();
  P1=seg_code[alarm_m/10];
  P3=0xfd;
  delay(1);
  if(P3_1==0)
  {
   if(Alarm==1)
    P1_7=0;
   else P1_7=1;
  }
  delay(1);
 }
}
}


void delay(unsigned int k)   //延時k ms
{
 unsigned int i,j;
 for(i=0; i<k; i++)
  for(j=0; j<300; j++);
 
}

 void adj_time()
{
  unsigned char i;
    if(P3_5==0)
 {
     delay(1);
     if(P3_5==0)
  hour++;
     if(hour==24)
  hour=0;
     for(i=0; i<30; i++)
  {
      disp_time();
      if(P3_2==0)
    P1_7=0;
      else
    P1_7=1;
      delay(1);
     }
 }
 if(P3_7==0)
 {
       delay(1);
    if(P3_7==0)
    min++;
    if(min==60)
    min=0;
    for(i=0; i<30; i++)
    {
      disp_time();
      if(P3_2==0)
    P1_7=0;
     else
    P1_7=1;
      delay(1);
    }
     }
}
void adj_alarm()
{
 unsigned char i;
 if(P3_5==0)
 {
  delay(1);
  if(P3_5==0)
  alarm_h++;
  if(alarm_h==24)
  alarm_h=0;
  for(i=0;i<30;i++)
  {
   disp_alarm();
  }
 }
 if(P3_7==0)
 {
  delay(1);
  if(P3_7==0)
  alarm_m++;
  if(alarm_m==60)
  alarm_m=0;
  for(i=0;i<30;i++)
  {
   disp_alarm();
  }
 }
}
void disp_alarm()

 P1=seg_code[alarm_h/10];
 P3=0xf7;
 delay(1);
 if(P3_3==0)
 P1_7=0;
 else
 P1_7=1;
 delay(1);
 P1=seg_code[alarm_h%10];
 P3=0xfd;
 delay(1);
 P1=seg_code[alarm_m/10];
    P3=0xfd;
 delay(1); 未命名.jpg

}

[此貼子已經被作者于2012-11-30 12:05:14編輯過]
回復

使用道具 舉報

ID:46855 發表于 2012-11-29 20:25 | 顯示全部樓層
看來高人都挺忙的!
回復

使用道具 舉報

ID:7485 發表于 2012-11-29 23:29 | 顯示全部樓層
你遇到了什么問題?
回復

使用道具 舉報

ID:46855 發表于 2012-11-30 11:24 | 顯示全部樓層
程序不能正常運行
回復

使用道具 舉報

ID:46855 發表于 2012-11-30 12:07 | 顯示全部樓層

敬請高人指點!不勝感激!

QQ:619493038

回復

使用道具 舉報

ID:7485 發表于 2012-12-1 19:07 | 顯示全部樓層

硬件中沒看到你說的“LCD”。

沒有仔細看你的程序,但是,不知道你的程序是哪來的?自己寫的?

 

“ TH0=60736/256;  // 重新裝初值
 TL0=60736%256;”

 

 這樣的寫法沒見過。如果是51,應該是“TH0=65536/256;  // 高位  TL0=65536%256;//低位

 

從這里可以感覺到。。。。。。。。。。。。。。。。。。。。。。。。。。。。

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文一区二区视频 | 久久成人国产精品 | 国产高清精品一区二区三区 | 中文字幕乱码一区二区三区 | 色综合久久久久 | 欧美精品啪啪 | 日韩一区中文字幕 | 国产999精品久久久 精品三级在线观看 | 美女黄色在线观看 | 久久久国产一区 | 久久一区二区三区四区 | 久久亚洲精品国产精品紫薇 | 亚洲一区视频在线 | 日韩中文一区二区三区 | 成人国产精品色哟哟 | 亚洲久久 | av中文字幕网| 国产小视频在线 | 日日摸夜夜爽人人添av | 亚洲一区二区精品视频 | av激情在线| www.天天操| 久久综合一区二区三区 | 日韩高清国产一区在线 | 91视频大全| 欧美色a v | 91视视频在线观看入口直接观看 | 久久精品国产亚洲夜色av网站 | 国产精品美女久久久久aⅴ国产馆 | 精品国产乱码久久久久久果冻传媒 | 在线观看中文字幕视频 | 91综合在线视频 | av在线播放免费 | 夜夜夜夜夜夜曰天天天 | 国产亚洲人成a在线v网站 | 欧美亚洲日本 | 自拍偷拍av | 国产韩国精品一区二区三区 | 精品一区二区三区91 | 精品综合久久 | 日韩日韩日韩日韩日韩日韩日韩 |