?? 數(shù)字鐘的程序.c
字號:
#include "system.h"
#include "altera_avalon_timer_regs.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
#include "sys/alt_alarm.h"
#include "unistd.h"
#define seg *(volatile unsigned char *) SM_SEG_BASE
#define bit *(volatile unsigned char *) SM_BIT_BASE
#define key *(volatile unsigned char *) KEY_BASE
void Timer_Init(); //定時器初始化函數(shù)
void Timer_ISR(void* context, alt_u32 id); //定時器中斷服務(wù)函數(shù)
void display(); //數(shù)碼管顯示函數(shù)
void KeyDown_ISR(void* context, alt_u32 id); // 按鍵中斷服務(wù)函數(shù)
void KeyDown_Init(); /按鍵中斷初始化函數(shù)
alt_u8 duan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF};
//共陽數(shù)碼管的0到9的段碼
alt_u8 num[8] = {0,0,0,0,0,0,0,0}; //時,分,秒初始化
alt_u8 second,min,hour; //秒,分,時
void KeyDown_ISR(void* context, alt_u32 id)
{
if(key==0x0e) { second = 0; while(key == 0x0e){display();} }
if(key==0x0d) {min++;if(min==60) min=0;while(key == 0x0d){display();}}
if(key==0x0b) {hour++;if(hour == 24) hour=0;while(key == 0x0b){display();}}
if(key==0x07){min--;if(min==0)min=60;while(key==0x07){display();}}
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE, 0x00);
}
void KeyDown_Init()
{
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE, 0x0f);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE, 0x00);
alt_irq_register(KEY_IRQ,0,KeyDown_ISR);
}
void Timer_Init()
{
alt_irq_register(TIMER_IRQ,0,Timer_ISR);
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, 7);
}
void Timer_ISR(void* context, alt_u32 id)
{
second++;
if(second == 60) { min++; second = 0;}
if(min == 60) { hour++; min = 0;}
if(hour == 24) { hour = 0;}
if(second % 2) duan[10] = 0xff;
else duan[10] = 0xbf;
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
}
void display()
{
alt_u8 j;
num[0] = second % 10;
num[1] = second / 10;
num[2] = 10;
num[3] = min % 10;
num[4] = min / 10;
num[5] = 10;
num[6] = hour % 10;
num[7] = hour / 10;
for(j=0; j<8; j++)
{
bit = ~(0x01 << j);
seg = duan[num[j]];
sleep(500);
}
}
int main(void)
{
Timer_Init();
KeyDown_Init();
while(1)
{
display();
}
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -