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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

AVR單片機(jī)電子鐘C程序

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年05月25日   【字體:
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
#define setb(val,bitn) (val|=(1<<(bitn)))//設(shè)置某IO口某位為1
#define clr(val,bitn) (val&=~(1<<(bitn)))//設(shè)置某IO口某位為0
#define get(val,bitn) (val&(1<<(bitn)))//讀取某位狀態(tài)
uchar shi=20,fen=39,miao,a=0xff,num;
#pragma interrupt_handler zhong:9//它所對(duì)應(yīng)的位置
#pragma data:code//定義程序存在ROM里面
const uchar table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e
};
/***********************************************/
/*******************延時(shí)子程序******************/
/***********************************************/
void delay(uchar z)
{
   uchar x,y;
  for(x=0;x<255;x++)
  for(y=0;y<z;y++);
}
/***********************************************/
/*******************響一聲子程序****************/
/***********************************************/
void bbtt()
{
   DDRA|=BIT(1);
  clr(PORTA,1);
  delay(250);
  setb(PORTA,1);
  delay(250);
}
/***********************************************/
/*******************顯示子程序******************/
/***********************************************/
void xian(uchar shia,uchar fena)
{
  PORTB=table[shia/10];//小時(shí)十位
  clr(PORTC,3);
  delay(2);
  setb(PORTC,3);
  if(a==0)//如果標(biāo)志位等于0xff,則關(guān)閉小時(shí)個(gè)位數(shù)碼管
  PORTB=table[shia%10]|0x80;//小時(shí)個(gè)位
  else//否則
  PORTB=table[shia%10]&0x7f;//小時(shí)個(gè)位數(shù)碼管強(qiáng)行點(diǎn)亮
  clr(PORTC,2);
  delay(2);
  setb(PORTC,2);
  PORTB=table[fena/10];//分鐘十位
  clr(PORTC,1);
  delay(2);
  setb(PORTC,1);
  PORTB=table[fena%10];//分鐘個(gè)位
  clr(PORTC,0);
  delay(2);
  setb(PORTC,0);
}
/***********************************************/
/*****************按鍵處理子程序****************/
/***********************************************/
void sk()
{
  uchar k;//定義一個(gè)變量來(lái)存數(shù)
    DDRD&=0Xf0;//設(shè)置PD IO口為輸入方式,高4位不管
 PORTD|=0X0f;//設(shè)置IO口低4位為輸入方式且?guī)侠娮瑁锤唠娖?/***********************************************/
/****************主功能鍵產(chǎn)生鍵值***************/
/***********************************************/
 if(!get(PIND,0))//如果鍵值為0則說(shuō)明有按鍵按下了
 {
   delay(1);//消抖一下
  if(!get(PIND,0))//再次判斷一下
  {
    bbtt();//調(diào)用鈴聲
    num++;//鍵值標(biāo)志加1
   a=0x00;//標(biāo)志位變?yōu)?
   if(num==4)//如果標(biāo)志位為4則清0
   {
     num=0;
    TIMSK|=BIT(2);//打開定時(shí)器中斷
    a=0x00;
   }
  }
  while(!get(PIND,0));//按鍵松手檢測(cè),即如果鍵值處理程序

為1則說(shuō)明有鍵按下,
 }
/***********************************************/
/*****************鍵值判斷控制******************/
/***********************************************/
 switch(num)
 {
/*****************如果鍵值等于1時(shí)******************/
   case 1:
  TIMSK&=~BIT(2);//關(guān)閉定時(shí)器中斷
  break;
/*****************如果鍵值等于2時(shí)******************/
  case 2:
  if(!get(PIND,1))//如果鍵值為0則說(shuō)明有按鍵按下了
  {
      delay(1);//消抖一下
    if(!get(PIND,1))//再次判斷一下
    {
        bbtt();
        shi++;//將小時(shí)加1
     if(shi==24)
     shi=0;
       while(!get(PIND,1));//按鍵松手檢測(cè),

即如果鍵值處理程序?yàn)?則說(shuō)明有鍵按下,
    }
  }
  if(!get(PIND,2))//如果鍵值為0則說(shuō)明有按鍵按下了
  {
      delay(1);//消抖一下
    if(!get(PIND,2))//再次判斷一下
    {
        bbtt();
        shi--;//將小時(shí)減1
     if(shi==(0-1))
     shi=23;
       while(!get(PIND,2));//按鍵松手檢測(cè),

即如果鍵值處理程序?yàn)?則說(shuō)明有鍵按下,
    }
  }
  break;
/*****************如果鍵值等于3時(shí)******************/
  case 3:
  if(!get(PIND,1))//如果鍵值為0則說(shuō)明有按鍵按下了
  {
      delay(1);//消抖一下
    if(!get(PIND,1))//再次判斷一下
    {
        bbtt();
        fen++;//分鐘加1
     if(fen==60)
     shi=59;
       while(!get(PIND,1));//按鍵松手檢測(cè),

即如果鍵值處理程序?yàn)?則說(shuō)明有鍵按下,
    }
  }
  if(!get(PIND,2))//如果鍵值為0則說(shuō)明有按鍵按下了
  {
      delay(1);//消抖一下
    if(!get(PIND,2))//再次判斷一下
    {
        bbtt();
        fen--;//分鐘減1
     if(fen==(0-1))
     shi=59;
       while(!get(PIND,2));//按鍵松手檢測(cè),

即如果鍵值處理程序?yàn)?則說(shuō)明有鍵按下,
    }
  }
  break;
 }
}
/***********************************************/
/*******************主程序*********************/
/***********************************************/
void main()
{
    DDRB=0XFF;//設(shè)置PA口為輸出方式
 DDRC|=0x0f;//設(shè)置兩位為輸出方式
 TCCR1B=0X04;//設(shè)置256分頻 6M晶體=6000000/256分頻-65535化成16

進(jìn)制
 TCNT1H=0XD2;//給它高位賦值
 TCNT1L=0X38;//給它低位賦值
 TIMSK|=BIT(2);//打開定時(shí)器中斷
 SREG|=BIT(7);//打開總中斷
 
 while(1)
 {
   sk();//按鍵調(diào)用
   xian(shi,fen);//顯示調(diào)用
 }
}
/***********************************************/
/*****************中斷服務(wù)子程序***************/
/***********************************************/
void zhong()
{
  TCNT1H=0XD2;//給它高位賦值
 TCNT1L=0X38;//給它低位賦值
 miao++;//將變量加1
 a=~a;//將標(biāo)志位取反,小數(shù)點(diǎn)閃爍標(biāo)志位
 if(miao==120)
 {
   miao=0;
  fen++;
  if(fen==60)
  {
    fen=0;
   shi++;
   if(shi==24)
   shi=0;
  }
 }
 
}

完整代碼下載地址:http://www.zg4o1577.cn/f/dzza.rar

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 97精品视频在线 | 一级a性色生活片久久毛片波多野 | 九九九久久国产免费 | 亚洲第一网站 | 麻豆changesxxx国产 | 国产一区2区 | 国产精品激情 | 国产精品视频在线播放 | 毛片免费看的 | 天天干夜夜操 | 亚州一区二区三区 | 亚洲第一在线视频 | 在线亚洲电影 | 国产精品日本一区二区不卡视频 | 亚洲高清视频在线 | www.久久久.com | 99久久免费精品国产男女高不卡 | 五月天国产视频 | 国产成人精品一区二区三区四区 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 日本成人中文字幕 | 亚洲视频在线播放 | 国产高清在线精品 | 日韩在线观看一区二区三区 | 久久精品福利 | 在线国产99| 国内精品视频在线观看 | 97国产精品视频人人做人人爱 | 国产欧美一区二区三区另类精品 | 亚洲a在线观看 | 亚洲国产精品成人 | 国产精品久久久久久久久久了 | 91看国产| 亚洲综合一区二区三区 | 国精产品一品二品国精在线观看 | 久久的色 | 欧美成人精品一区二区三区 | 国产精品日韩欧美一区二区三区 | 91在线看片 | 天堂资源视频 | 精品一区电影 |