ATmega128(time 0)

2020-12-17 電子產品世界
//atmega128的利用定時器0實現999s加1計數功能,每1s加1

//定時器用普通模式,溢出中斷,加1計數
//定時器初值計算,定時10ms,1024分頻為例,(FF-X)*F_CPU/1024=0.01s
//秒表在數碼管上顯示
//編譯環境 AVR Studio 4.17/AVR GCC,優化度-0s
//系統時鐘7.3728MHZ,設置熔絲位為外部高頻石英晶體振蕩,啟動時間4.1ms
//***********************************************************************
//包含文件
//***********************************************************************

本文引用地址:http://www.eepw.com.cn/article/201611/317438.htm

#include
#include
#define F_CPU7372800// 單片機主頻為7.3728MHz,用於延時子程序和計算定時器初始值
#include
#include
#include
#include //中斷信號頭文件

//***********************************************************************
//定義變量區
//***********************************************************************
#define f_count 183 //定時器初值,定時器加一計數
#define timer_clk 0x07//時鐘1024分頻
#define delay_us(x) _delay_us(x) //AVR GCC延時函數 x(us)
#define delay_ms(x) _delay_ms(x) //AVR GCC延時函數 x(ms)

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long


#define Data_IO PORTA //數碼管數據口
#define Data_DDR DDRA //數碼管數據口方向寄存器
#define D_LE0 PORTD &= ~(1 << PD4) //數碼管段控制位為0,鎖存埠數據
#define D_LE1 PORTD |= (1 << PD4) //數碼管段控制位為1,鎖存器輸出與埠一致
#define W_LE0 PORTD &= ~(1 << PD5) //數碼管位控制位為0
#define W_LE1 PORTD |= (1 << PD5) //數碼管位控制位為1

//***********************************************************************
//共陰數碼管顯示的斷碼錶0~F
//***********************************************************************

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};


uchar time_1s_count=0;
//volatile uchar time_1s_flag;
uint second;
uint A1,A2,A3;


//***********************************************************************
//IO埠初始化
//***********************************************************************

void system_init()
{
Data_IO=0xFF; //數據口為輸出
Data_DDR=0xFF;

PORTD=0xFF; //74HC573的控制口,設置為輸出
DDRD=0xFF;
PORTB=0XFF;
DDRB=0XFF;
}


//*************************************************************************
//定時器0初始化子程序
//*************************************************************************

void timer0_init() //定時器初始化
{
TCCR0=0x07; //普通模式,OC0不輸出,1024分頻
TCNT0=f_count; //初值,定時為10ms
TIFR=0x01; //清中斷標誌位
TIMSK=0x01; //使能定時器0溢出中斷
}

//*************************************************************************
//數據處理函數
//*************************************************************************
void data_do(uint temp_d)
{
uchar A2t;
A1=temp_d/100; //分出百,十,和個位
A2t=temp_d%100;
A2=A2t/10;
A3=A2t%10;
}

//*************************************************************************
//74HC573控制數碼管動態掃描顯示函數,顯示採集到的溫度
//*************************************************************************

void Display_Timer0(void)
{
uchar i,j;
system_init();
j=0x01; //此數據用來控制位選
for(i=0;i<5;i++) //用後3位數碼管來顯示
{
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=0x00;
D_LE0;
delay_ms(1);
}
D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A1];
D_LE0;
delay_ms(1);

D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A2];
D_LE0;
delay_ms(1);

D_LE1;
W_LE1;
Data_IO=~j;
W_LE0;
j=(j<<1);
Data_IO=table[A3];
D_LE0;
delay_ms(1);

D_LE1;
W_LE1;
Data_IO=0xff;
W_LE0;

}


//*************************************************************************
//定時器0中斷服務子程序
//*************************************************************************
ISR(SIG_OVERFLOW0) //中斷服務程序
{

TCNT0=f_count; //定時器賦初值,非自動重裝模式
if(time_1s_count!=100)
{
time_1s_count++; //定時器定時10ms,計數100次為1s
// time_1s_flag=0; //未到1s,標誌位為0
}
else
{
if(second!=999) //最大計時999s
{
second++;
}
else
second=0; //到999s則清0
time_1s_count=0;
// time_1s_flag=1;
data_do(second); //將秒轉化為BCD碼,供顯示
}
}


//*************************************************************************
//主程序
//*************************************************************************

int main(void)
{
system_init(); //系統初始化
timer0_init(); //定時器0初始化,完成定時器相關配置
time_1s_count=0; //計數值清0
SREG|=0x80; //開啟全局中斷
while(1)
{

Display_Timer0(); //顯示計數值

}
}

相關焦點

  • China has 1,128 time-honored brands: MOFCOM
    There are 1,128 time-honored brands in China with an average history of around 140 years, according to statistics issued by the Ministry of Commerce (MOFCOM).
  • 採用Atmega8作為紅外發射編碼和接收解碼晶片設計
    圖2b所示的射極輸出電路可以解決這個問題,兩個二極體把三級管基極電壓鉗位在1.2V左右,因此三級管發射極電壓固定在0.6V左右,發射極電流IE基本不變,根據IE≈IC,所以流過LED的電流也基本不變,這樣保證了當電池電壓降低時還可以保證一定的遙控距離。
  • 基於ATmega128編碼器控制步進電機的平衡系統
    對於這個系統,我是用128的外部中斷的下降沿觸發方式來捕捉編碼器的脈衝的,硬體連接方面電機驅動和主控晶片一定要注意地線的連接。
  • TimescaleDB 1.2.0 發布,首次使用 TIMESCALE 許可
    TimescaleDB 1.2.0 發布了,TimescaleDB 是基於 PostgreSQL 開發的一款時序資料庫,以插件化的形式打包提供
  • TimescaleDB 2.0.0 發布,基於 PostgreSQL 的時序資料庫
    TimescaleDB 2.0.0 現已發布。TimescaleDB 是基於 PostgreSQL 開發的一款時序資料庫,以插件化的形式打包提供。
  • TimescaleDB 0.9.0 發布,基於 PgSQL 的時序資料庫
    TimescaleDB 0.9.0 已發布,TimescaleDB 是基於 PostgreSQL 資料庫開發的一款時序資料庫,以插件化的形式打包提供
  • 入門市場新貴 臺電極速128GB SSD評測
    入門市場新貴 臺電極速128GB SSD評測    這款臺電極速128GB SSD外殼採用金屬鋁拉絲,邊角經過鑽石切割處理,顏色為極少見的藏青色。臺電極速128GB SSD ATTO隊列深度測試    臺電極速128GB SSD在ATTO DiskBench測試中,最大讀取速度達到549.0MB
  • xk-time 0.0.4 發布,Java 時間工具包
    xk-time 0.0.4 發布了,更新如下:1.相同月日比較判斷方法, 比如用於生日,節日等周期性的日期比較判斷和推算
  • TimescaleDB 1.6.0 發布 基於 PostgreSQL 的時序資料庫
    為連續聚合添加了一個參數 timescaledb.ignore_invalidation_older_than,該參數接受時間間隔(例如 1 個月),如果設置,它將限制處理無效的時間。因此,如果為timescaledb.ignore_invalidation_older_than = 『1 month』,則對自修改時間到當前時間戳的 1 個月以上的數據的任何修改都不會導致連續聚合被更新。
  • PHP中用set_time_limit(0)長連接的實現
    PHP中用set_time_limit(0)長連接的實現 每次我們訪問PHP腳本的時候,都是當所有的PHP腳本執行完成後,我們才得到返回結果。
  • 固態也不可貌相 測東芝128GB mSATA SSD
    1東芝THNSNF128GMCS固態硬碟簡介    受SATA3.0接口速率限制的影響,各大SSD廠商似乎都沒有打算推出新的旗艦產品的計劃,而將目光投向了便攜設備身上,在這股浪潮當中東芝也推出了旗下的
  • Transition time與slew time的聯繫與區別
    思考:在開始正文內容之前先提出以下幾個問題,大家可以先思考一下:Slew time和Transition time是否一樣?Slew time和Transition time是什麼關係?因此,.lib庫中都會基於特定閾值來定義slew,即Slew的值依賴於.lib裡面指定的測量閾值,對於之前比較老的工藝(比如0.25um/0.18um或者更老),它們一般使用10%和90%作為slew或者transition time測量的閾值,此時slew和transition的值是一樣的。如下圖所示為某Foundary 0.18um工藝對Slew閾值與derate的定義:
  • 為什麼int8的範圍是[-128,127]
    1-1 = 1+(-1) = 0 因此計算機可以只有加法沒有減法。我們先看原碼,十進位的表達式:1-1=0‍可以發現,如果使用反碼計算減法,結果的真值的部分是正確的,但是引發了新的問題,雖然在理解上 +0 和 -0 是一樣的,但是 0 帶符號是沒有任何意義的。
  • Byte字節的最小值為什麼是-128?
    字節是我們在開發中使用的除了bit以外最小粒度的單位,但是關於字節的最小值是-128我一直都沒搞懂究竟是為什麼,按照我的理解一個字節最小值應該是-127,那怎麼來的-128呢?在計算機系統中,最小單位是1位,也就是1bit。
  • ATmega128(ICC7.22 「delay.h「)
  • ToughProxy V1.0.0.1 發布,面向運營的代理伺服器軟體
    ToughProxy 開源代理伺服器首個版本 V1.0.0.1 發布了。
  • Excel時間函數hour,minute,second,time,timevalue
    ,timevalueExcel時間函數hour,minute,second,time,timevalue今天給大家介紹幾個Excel時間函數hour,minute,second,time,timevalue函數功能說明:
  • ATmega8l引腳圖及用74HC573擴展其io的方法
    atmega8l直接驅動筆段式lcd驅動程序 #include"include.h"uchar
  • 128核心CPU問世:12通道DDR5+PCIe5.0、性能超頂級Intel至強
    2016年才成立的斯洛伐克創業公司Tachyum今天拋出一枚重磅炸彈,宣布了全新的128核心Prodigy處理器,號稱「性能可超越Intel最快的至強,同時功耗僅有十分之一」。最新的頂級型號為Prodigy T6128,單路單晶片集成128個物理核心,亂序執行架構,每時鐘周期4條指令,支持64位尋址、512位矢量操作、AI/ML矢量和矩陣乘法加速、虛擬化、高級RAS,運行頻率最高4GHz。