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

AVR 1-99秒1602啟停顯示

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年10月29日   【字體:
#include <iom16.h>
#include <intrinsics.h>
#define uchar unsigned char
#define uint unsigned int
uint sec=0;           //秒變量
uint cnt=0;          //計(jì)數(shù)變量
uint on=0;            //啟停狀態(tài)變量
uchar str1[16]="The time:   sec";          //這里所有字符串長(zhǎng)度一定 ,以便消除不確定顯示碼指針跑偏導(dǎo)致顯示異常
uchar start[16]="     start     ";
uchar stop[16]="      stop     ";
#include "1602.h"
void port_init()
{
  PORTA=0xff;
  DDRA=0xff;
  PORTB=0xff;
  DDRB=0xff;
  PORTD=0xff;
  DDRD=0xff;
}
void init()
{
  MCUCR=0x0a;
  GICR=0xc0;
  SREG=0x80;
}

void time0_init()
{
  TCCR0=0x03;
  TIMSK=0x01;
  TCNT0=0x83;
}
void showtime(uint time)
{
  displayonechar(10,0,(time/10)+48);
  displayonechar(11,0,(time%10)+48);
}

 
void main()
{
 
  port_init();
  //1602設(shè)備初始化
   delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x80);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
delay(500);
  //初始化結(jié)束

      init();
  time0_init();
  while(1)
  {
  
   displaychar(0,0,str1);
   showtime(sec);                //顯示時(shí)間值(秒)  重復(fù)覆蓋這2位 達(dá)到顯示效果
   delay(20);
  }
}

#pragma vector = 0x24            //定時(shí)器0 溢出 (定時(shí)秒)
__interrupt void time0()
{
 TCNT0=0x83;
 if(on==1)                 //啟動(dòng)標(biāo)志
 {
 cnt++;
 if(cnt==1000)
 {
   sec++;cnt=0;
 }
 if(sec>100)sec=0;
}
}
#pragma vector = 0x04           //INT0中斷服務(wù)程序
__interrupt void int0()
{
  on=1;
 writecmd(0x01);                 // 清屏
 displaychar(0,1,start);         //顯示啟動(dòng)字符
 displaychar(0,0,str1);          //顯示原來(lái)字符
   showtime(sec);
 
}
#pragma vector = 0x08          //INT1中斷服務(wù)程序
__interrupt void int1()
{
  on=0;
  writecmd(0x01);                 //清屏
  displaychar(0,1,stop);          //顯示停止字符
  displaychar(0,0,str1);          //顯示原來(lái)字符
   showtime(sec);
 
}
關(guān)閉窗口

相關(guān)文章