?? main.c
字號:
/*****************************************
* 基于T/C0的定時(shí)器設(shè)計(jì) *
* 功 能:定時(shí)器 *
* 時(shí)鐘頻率:外部7.3728M *
* 設(shè) 計(jì):莫錦攀 *
* 修改日期:2007年07月30日 *
* 編譯環(huán)境:ICC-AVR6.31 *
* 實(shí)驗(yàn)環(huán)境:M16學(xué)習(xí)板 *
* 使用端口:LCD:PC6,PC7,PA4~PA7 *
*使用1M頻率時(shí)不夠精確所以用外部7.3728M的 *
*了,注意要使用T/C0定時(shí)功能前的初始化工作 *
*****************************************/
#include <iom16v.h>
#include "1602.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
uchar data[5]={0,0,0,0,0};//顯示的初始值:0,0,0,0
uint cnt=0; //初始計(jì)數(shù)值:0
uchar timer[2]={0,0};//初始時(shí)間00:00
//********計(jì)數(shù)值處理函數(shù)******************//
void process(uchar *i,uchar *p)
{p[0]=i[0]/10+48;//分的高位
p[1]=i[0]%10+48;//分的低位
p[2]=i[1]/10+48;//秒的高位
p[3]=i[1]%10+48;//秒的低位
//注意這里加48是因?yàn)锳SCII碼中數(shù)字都要加48的原因
}
//************液晶顯示函數(shù)******************//
void lcd(void)
{
LCD_write_string(2,0,"Timer by MJP");
LCD_write_char(6,1,data[0]);
LCD_write_char(7,1,data[1]);
LCD_write_char(8,1,':');
LCD_write_char(9,1,data[2]);
LCD_write_char(10,1,data[3]);
}
//************T/C0中斷服務(wù)函數(shù)******************//
#pragma interrupt_handler Timer0:10
void Timer0(void)
{cnt++;
if(cnt==450)//450*64*256=7372800
{cnt=0;
timer[1]++;//秒加1
if(timer[1]==60){timer[1]=0;timer[0]++;}//分加1
if(timer[0]==60){timer[0]=0;}//計(jì)數(shù)達(dá)到最高,重新開始
}
}
//************初始化函數(shù)******************//
void init(void)
{
LCD_init();//液晶初始化
SEI();//開全局中斷
TCCR0=0x03;//系統(tǒng)時(shí)鐘64分頻
TCNT0=0x00;//tcnt清零
TIMSK=0x01;//打開T/C中斷屏蔽寄存器
}
void main(void)
{init();//初始化
while(1)
{
process(timer,data);//計(jì)數(shù)值處理
lcd();//顯示
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -