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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數字鐘為什么在實物上會閃爍,應該改哪??

[復制鏈接]
跳轉到指定樓層
樓主
ID:60515 發表于 2016-2-14 14:23 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
/****共陽數碼管0--9+全滅段碼****/
uchar code led[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0xff};
uchar a[6];//數碼管顯示
uchar b[6]={0xFB,0XF7,0XEF,0XDF,0XBF,0X7F};//數碼管位碼
/****子函數聲明****/
void delay_ms(uint z);//帶參數ms級延時子函數
void init();//初始化函數
void timechuli();//時間處理
void key();//按鍵函數
void display();//顯示函數
/****變量定義****/
uint num;  // 記錄毫秒為秒的變量
uchar hour=23;
uchar minite=59;
uchar second=56;
uchar hour1=0;
uchar minite1=1;
uchar second1=0;
uchar k;
uchar flag;//更新時間的4種模式加上正常模式
uchar S_flag;//閃爍標志位
/****位定義****/
sbit beep=P3^6; //蜂鳴器
sbit led0=P1^0; //整點報時顯示
sbit led1=P1^7; //鬧鐘報時顯示
sbit key1=P3^2;//模式切換鍵1正常模式 2時鐘時調整 3時鐘分調整 4鬧鐘時調整 5鬧時鐘分調整
sbit key2=P3^3;//加1
sbit key3=P3^4;//減1
sbit key4=P3^5; //復位鍵
void main()
{
    init();
while(1)
{
key();
     display();
}
}
void display()
{
switch(flag)
{
case 0:  //時鐘顯示模式
{
a[5]=led[hour/10];
a[4]=led[hour%10];
a[3]=led[minite/10];
a[2]=led[minite%10];
a[1]=led[second/10];
a[0]=led[second%10];
}
break;
   case 1:  // 時鐘 時調整模式
{
if(S_flag==1)  //標志位為1
{
a[5]=led[hour/10];//調整時鐘的時
a[4]=led[hour%10];
}
else
{
a[5]=led[11];//關閉顯示
a[4]=led[11];
}
a[3]=led[minite/10];
a[2]=led[minite%10];
a[1]=led[second/10];
a[0]=led[second%10];
}
break;
case 2:  //時鐘 分調整模式
{
a[5]=led[hour/10];
a[4]=led[hour%10];
if(S_flag==1)  
{
a[3]=led[minite/10];
a[2]=led[minite%10];
}
else
{
a[3]=led[11];
a[2]=led[11];
}
a[1]=led[second/10];
a[0]=led[second%10];
}
break;
   case 3:  // 鬧鐘 時調整模式
{
if(S_flag==1)
{
a[5]=led[hour1/10];
a[4]=led[hour1%10];
}
else
{
a[5]=led[11];
a[4]=led[11];
}
a[3]=led[minite1/10];
a[2]=led[minite1%10];
a[1]=led[11];
a[0]=led[11];
}
break;
case 4:
{
a[5]=led[hour1/10];
a[4]=led[hour1%10];
if(S_flag==1)// 鬧鐘 分調整模式
{
a[3]=led[minite1/10];
a[2]=led[minite1%10];
}
else
{
a[3]=led[11];
a[2]=led[11];
}
a[1]=led[11];
a[0]=led[11]; ///
}
break;
}
}
void init()
{
    beep=0;//關閉蜂鳴器
    flag=0;//正常時鐘顯示模式
    S_flag=0;//閃爍標志位
    TMOD=0X01;//定時器T0 方式1
    TH0=(65536-50000)/256;//重裝初值
    TL0=(65536-50000)%256;
    EA=1;//開總中斷
    ET0=1;//開啟定時器T0
    TR0=1;
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;//重裝初值
TL0=(65536-50000)%256;
num++;
if(num==20)//1S到
{
num=0;
timechuli();//時間處理函數
}
if(hour1==hour&&minite1==minite&&second<5)//鬧鐘時間到
{
beep=!beep;
led1=!led1;
}
else//鬧鐘提醒時間到后 關閉蜂鳴器和指示燈
{
beep=0;
led1=1;
}
if((minite==0)&&(second==0)) //整點到
{
led0=!led0;
}
else  //關閉LED指示
led0=1;
if(num%20==0) //1S取反一次
    S_flag=!S_flag;     //閃爍標志位取反
for(k=0;k<6;k++)
{
P2=b[k];  //送位碼
P0=a[k];  //送段碼
delay_ms(2);
P2=0xff;//消影
}
}
void key()
{
if(key1==0)//模式切換鍵按下
{
delay_ms(10);
if(key1==0)
{
  flag++;
  if(flag==5)
  {
flag=0;
  }
}
while(!key1) ; //等待按鍵釋放
}
if(flag!=0)
{
switch(flag)
{
case 1:   //時鐘時調整
{
if(key2==0)  //時鐘時加1
{
delay_ms(10);
if(key2==0)
{
if(hour<23) hour++;
else hour=0;
}
while(!key2);
}
if(key3==0)  //時鐘時減1
{
delay_ms(10);
if(key3==0)
{
       if(hour> 0) hour--;
else hour=23;
}
while(!key3) ;
}
}  
break;
case 2:   //時鐘分調整
{
if(key2==0)  //時鐘分加1
{
delay_ms(10);
if(key2==0)
{
if(minite<59) minite++;
else minite=0;
}
while(!key2);
}
if(key3==0)  //時鐘分減1
{
delay_ms(10);
if(key3==0)
{
       if(minite> 0)minite--;
else minite=59;
}
while(!key3);
}
}  
break;
case 3:   //鬧鐘時調整
{
if(key2==0)  //鬧鐘時加1
{
delay_ms(10);
if(key2==0)
{
if(hour1<23) hour1++;
else hour1=0;
}
while(!key2);
}
if(key3==0)  //鬧鐘時減1
{
delay_ms(10);
if(key3==0)
{
       if(hour1> 0) hour1--;
else hour1=23;
}
while(!key3);
}
}  
break;
case 4:   //鬧鐘分調整
{
if(key2==0)  //鬧鐘分加1
{
delay_ms(10);
if(key2==0)
{
if(minite1<59) minite1++;
else minite1=0;
}
while(!key2) ;
}
if(key3==0)  //鬧鐘分減1
{
delay_ms(10);
if(key3==0)
{
       if(minite1> 0)minite1--;
else minite1=59;
}
while(!key3);
}
}  
break;
}
}
if(key4==0)//復位鍵
{
delay_ms(10);
if(key4==0)
{
   flag=0;
hour=0;
minite=0;
second=0;
}
while(!key4);
}
}
void delay_ms(uint z)  
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void timechuli()
{
second++;
   if(second==60)
   {
   second=0;
   minite++;
   }
   if( minite==60)
   {
    minite=0;
    hour++;
   }
   if(hour==24)
   hour=0;
}
  
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:96682 發表于 2016-2-14 14:49 | 只看該作者
LZ  真幽默。出題考學生們也該換個馬甲嘛!這樣不是穿幫了嘛!
回復

使用道具 舉報

板凳
ID:60515 發表于 2016-2-14 16:04 來自手機 | 只看該作者
wc86110 發表于 2016-2-14 14:49
LZ  真幽默。出題考學生們也該換個馬甲嘛!這樣不是穿幫了嘛!

做出來的實物就出現這個情況,時間有點準,幾個籹
回復

使用道具 舉報

地板
ID:60515 發表于 2016-2-14 16:06 來自手機 | 只看該作者
wc86110 發表于 2016-2-14 14:49
LZ  真幽默。出題考學生們也該換個馬甲嘛!這樣不是穿幫了嘛!

幾個數碼管同時都在閃。學的不精才求你助。
回復

使用道具 舉報

5#
ID:80352 發表于 2016-2-15 11:50 | 只看該作者
給你一個提示,數碼管動態掃描時間
回復

使用道具 舉報

6#
ID:60515 發表于 2016-2-15 14:13 來自手機 | 只看該作者
情緒空123 發表于 2016-2-15 11:50
給你一個提示,數碼管動態掃描時間

知道是動態問題,就是沒改成功。
P2=b[k];  //送位碼
P0=a[k];  //送段碼
delay_ms(2);     改了這個都沒成功
P2=0xff;//消影
回復

使用道具 舉報

7#
ID:96682 發表于 2016-2-15 21:43 | 只看該作者
就算完全修改正常了,還是有一點不好的是掉電后,時間又得要重新設置。
回復

使用道具 舉報

8#
ID:19198 發表于 2016-2-16 01:46 | 只看該作者
你可以試試把消影放到前面
回復

使用道具 舉報

9#
ID:60515 發表于 2016-2-16 13:58 來自手機 | 只看該作者
wc86110 發表于 2016-2-15 21:43
就算完全修改正常了,還是有一點不好的是掉電后,時間又得要重新設置。

調是沒事的,關健是解決不了我提的問題閃爍,仿真是不閃爍,到了實物就出現這問題。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区国产 | 欧美日韩亚洲三区 | 一区二区三区精品视频 | 欧美久久久久 | yiren22 亚洲综合 | 久久51 | 一级毛片观看 | 欧洲一级毛片 | 成人小视频在线观看 | 亚洲精彩视频在线观看 | 国产免费一级片 | 欧美精品第一区 | 欧美成视频 | 操一草| 免费观看av| 亚洲欧美综合 | 亚洲a视频 | 在线观看免费国产 | 尤物视频在线免费观看 | 久久国内精品 | 99久久久久久久 | 在线观看视频91 | 亚洲精品欧美一区二区三区 | 亚洲精品免费视频 | 久草在线青青草 | 国产精品福利一区二区三区 | 在线中文字幕亚洲 | 亚洲狠狠丁香婷婷综合久久久 | 操一草| www.国产91| 亚洲一级毛片 | 国产一区二区免费在线 | 国产精品久久久久久一区二区三区 | 狠狠爱视频 | 亚洲国产成人av好男人在线观看 | 不卡一区| 综合久久久 | 综合久久综合久久 | 国产美女高潮 | 伊人精品在线视频 | 久久一 |