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

標題: C51求助 [打印本頁]

作者: 你好耀眼    時間: 2016-5-10 20:41
標題: C51求助
請教高人,我這程序有何問題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);



作者: zl2168    時間: 2016-5-11 17:58
介紹你去看今天本壇51單片機專欄剛上傳的“模擬電子鐘(由80C51定時器產生秒時基)”。6位顯示時分秒,你的只有4位,能同時顯示時分秒嗎?
作者: zl2168    時間: 2016-5-11 17:58
程序層次簡單清晰,每句都有注解,便于理解。電路結構合理(串行輸出),性價比高。仿真演示生動,還可按鍵校正時分秒。
作者: zl2168    時間: 2016-5-11 17:59
完全可以移植到你的89c2051,只需改寫頭文件和定義輸出控制端口。只耗費10個I/O端口,比你少,而且是增加了校時功能。
作者: 390146413    時間: 2016-5-11 22:40
你寫的51程序,沒有自己的風格。。好難看懂
作者: zl2168    時間: 2016-5-12 10:53
你先Proteus仿真一下,看看有否“風格”?再做結論
作者: zl2168    時間: 2016-5-12 21:34
至于“好難看懂”,與鉆進去的深度有關。站在表面,遠遠一瞥,當然難看懂。
作者: zl2168    時間: 2016-5-16 19:47
回復390146413:你說的“沒有自己的風格”,是指本壇51單片機專欄上傳的“模擬電子鐘(由80C51定時器產生秒時基)”嗎?這話裝在別人身上,有50%的可能性。但裝在上述案例身上,就超過100%錯了。你可以在各種網各種書上查找,有相同電路在該案例發布前的,我這里懸賞1000黑幣等你來拿。程序是配電路的,電路不同,程序當然不同。何況上述案例是有校時功能的,我好像沒看到有校時功能的(這一點我有點孤陋寡聞),但相信有,比較少。
作者: qqqq789    時間: 2017-6-15 18:08
移植到你的89c2051,只需改寫頭文件和定義輸出控制端口
作者: 1510280    時間: 2017-6-15 20:20
沒看懂,應該是錯了。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产一区久久 | 日韩毛片网站 | 欧美一级黄色片 | 欧美精品日韩 | 国产全肉乱妇杂乱视频 | 成人福利在线观看 | 中文字幕亚洲欧美 | 综合99| 一级片中文字幕 | 色吧五月天 | 五月激情综合网 | 国产成人精品一区二区三区视频 | 午夜精品福利视频 | 成人免费毛片aaaaaa片 | 亚洲午夜精品一区二区三区 | 欧美一级淫片免费视频黄 | 免费的黄色网址 | 天天躁日日躁狠狠很躁 | 免费视频一区二区 | 日本精品视频在线观看 | 一区二区小视频 | 99热99 | 免费av网站在线观看 | 午夜久久久久久 | 成人在线免费视频观看 | 欧美精品日韩少妇 | 亚洲国产福利 | 亚洲男人的天堂在线观看 | 丰满少妇av | 黄色福利视频 | 欧洲av网站| 亚洲国产精品av | 欧美日韩91 | 日本午夜影院 | 毛片av在线| 性猛交xxxx富婆老太婆 | 懂色av一区二区三区 | a级片在线免费观看 | 黄色三级在线观看 | aaa国产精品 | 男人操女人视频网站 |