📄 数字钟的程序.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(); //定时器初始化函数
void Timer_ISR(void* context, alt_u32 id); //定时器中断服务函数
void display(); //数码管显示函数
void KeyDown_ISR(void* context, alt_u32 id); // 按键中断服务函数
void KeyDown_Init(); /按键中断初始化函数
alt_u8 duan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF};
//共阳数码管的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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -