📄 timer.c
字号:
#include "alt_types.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "system.h"
#include "sys/alt_irq.h"
#include "altera_avalon_pio_regs.h"
#include "count_binary.h"
#include "lcd.h"
//volatile int edge_capture;
void LCD_Init()
{
//LCD初始化
lcd_write_cmd(LCD_16207_0_BASE,0x38);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x0C);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x01);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x06);
usleep(2000);
lcd_write_cmd(LCD_16207_0_BASE,0x80);
usleep(2000);
}
void LCD_Show_Text(char* Text)
{
//LCD输出格式
int i;
for(i=0;i<strlen(Text);i++)
{
lcd_write_data(LCD_16207_0_BASE,Text[i]);
usleep(2000);
}
}
void LCD_Line1()
{
//向LCD写命令
lcd_write_cmd(LCD_16207_0_BASE,0x80);
usleep(2000);
}
void LCD_Line2()
{
//向LCD写命令
lcd_write_cmd(LCD_16207_0_BASE,0xC0);
usleep(2000);
}
static void handle_button_interrupts(void* context,alt_u32 id)
{
volatile int* edge_capture_ptr=(volatile int*)context;
//存储按钮的值到边沿捕获寄存器
*edge_capture_ptr=
IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE);
//复位边沿捕获触发器
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0);
}
//初始化button_pio
static void init_button_pio()
{
void* edge_capture_ptr=(void*)&edge_capture;
//开放全部4个按钮的中断
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xf);
//复位边沿捕获触发器
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x0);
//登记中断源
alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_button_interrupts);
}
void delay(unsigned int x)
{
while(x--);
}
int check_month(int month)
{
if((month==1)||(month==3)||(month==5)||(month==7)
||(month==8)||(month==10)||(month==12))
return 1;
if((month==4)||(month==6)||(month==9)||(month==11))
return 0;
if(month==2)
return 2;
}
int check_year(int year)
{
if(((year%400)==0)||(((year%4)==0)&&(year%100!=0)))
return 1;
else return 0;
}
int main(void)
{
int screen=1;
int pos=0;
int year,month,day,hour,minute,second;
unsigned long sum;
char date[16];
char time[16];
int year1=7;
int year2=0;
int year3=0;
int year4=2;
int month1=2;
int month2=1;
int day1=9;
int day2=0;
int hour4,hour3,hour2,hour1,minute2,minute1,second2,second1;
unsigned int screenflag;
hour=0;minute=0;second=0;year=2006;month=1;day=1;
init_button_pio();
LCD_Init();
while(1)
{
if(pos>3) pos=0;
if(screen>=2) screen=0;
//na_LED8->np_piodata=1<<pos;
if(screen==0) screenflag=8;
else screenflag=0;
IOWR_ALTERA_AVALON_PIO_DATA(LED_GREEN_BASE,(1<<pos)|screenflag);
usleep(1000000);
if(second<59) second++;
else{
second=0;
if(minute<59) minute++;
else{
minute=0;
if(hour<23) hour++;
else{
hour=0;
if(check_month(month)==0&&day<30)
day++;
else if(check_month(month)==1&&day<31)
day++;
else if(check_month(month)==2&&check_year(year)&&day<29)
day++;
else if(check_month(month)==2&&!check_year(year)&&day<28)
day++;
//{
//if(check_year(year))
//{
// if(day<29) day++;
// else if(day<28) day++;
//}
//}
//if(day<30) day++;
else{
day=1;
if(month<12) month++;
else{
month=1;
if(year<9999) year++;
else year=2007;
}
}
}
}
}
switch(edge_capture)
{
case 0x08:
{
pos=pos+1;
if(pos==3)
{
screen+=1;
//pos=0;
}
//{
//pos=pos+1;
// switch(edge_capture)
//{
//case 0x08:screen=screen+1;break;
//case 0x04:pos=pos+1;break;
// case 0x02:break;
//}
break;
}
case 0x02:
if(pos==0)
{
if(screen==0)
{
if(day>1)day--;
else
{
if(check_month(month)==0)day=30;
if(check_month(month)==1)day=31;
if(check_month(month)==2)
{
if(check_year(year)) day=29;
else day=28;
}
}
}
if(screen==1)
{
if(second>0) second--;
else second=59;
}
}
if(pos==1)
{
if(screen==0)
{
if(month>1) month--;
else month=12;
}
if(screen==1)
{
if(minute>0) minute--;
else minute=59;
}
}
if(pos==2)
{
if(screen==0)
{
if(year>0) year--;
else year=2007;
}
if(screen==1)
{
if(hour>0) hour--;
else hour=23;
}
}
break;
case 0x04:
if(pos==0)
{
if(screen==0)
{
if(check_month(month)==0)
{
if(day<30) day++;
else day=1;
}
if(check_month(month)==1)
{
if(day<31) day++;
else day=1;
}
if(check_month(month)==2)
{
if(check_year(year))
{
if(day<29) day++;
else day=1;
}
else
{
if(day<28) day++;
else day=1;
}
}
}
if(screen==1)
{
if(second<59) second++;
else second=0;
}
}
if(pos==1)
{
if(screen==0)
{
if(month<12) month++;
else month=1;
}
if(screen==1)
{
if(minute<59) minute++;
else minute=0;
}
}
if(pos==2)
{
if(screen==0)
{
if(year<9999) year++;
else year=2007;
}
if(screen==1)
{
if(hour<23) hour++;
else hour=0;
}
}
break;
//case 0x01:screen++;break;
}
edge_capture=0;
{
year4=year/1000;
year3=(year-year4*1000)/100;
year2=(year-year4*1000-year3*100)/10;
year1=year%10;
month2=month/10;
month1=month%10;
day2=day/10;
day1=day%10;
LCD_Line1();
//while(screen==1&&pos==0)
//{
date[0]=' ';date[1]=' ';
date[2]=year4+0x30;date[3]=year3+0x30;
date[4]=year2+0x30;date[5]=year1+0x30;
date[6]=' ';date[7]=' ';
date[8]=month2+0x30;date[9]=month1+0x30;
date[10]=' ';date[11]=' ';
date[12]=day2+0x30;date[13]=day1+0x30;
date[14]=' ';date[15]=' ';
LCD_Show_Text(date);
if(screen==0&&pos==0)
{
LCD_Line1();
date[0]=' ';date[1]=' ';
date[2]=year4+0x30;date[3]=year3+0x30;
date[4]=year2+0x30;date[5]=year1+0x30;
date[6]=' ';date[7]=' ';
date[8]=month2+0x30;date[9]=month1+0x30;
date[10]=' ';date[11]=' ';
date[12]=day2+0x30;date[13]=day1+0x30;
date[14]=' ';date[15]=' ';
LCD_Show_Text(date);
usleep(200000);
LCD_Line1();
date[0]=' ';date[1]=' ';
date[2]=year4+0x30;date[3]=year3+0x30;
date[4]=year2+0x30;date[5]=year1+0x30;
date[6]=' ';date[7]=' ';
date[8]=month2+0x30;date[9]=month1+0x30;
date[10]=' ';date[11]=' ';
date[12]=' ';date[13]=' ';
date[14]=' ';date[15]=' ';
LCD_Show_Text(date);
usleep(100000);
}
if(screen==0&&pos==1)
{
LCD_Line1();
date[0]=' ';date[1]=' ';
date[2]=year4+0x30;date[3]=year3+0x30;
date[4]=year2+0x30;date[5]=year1+0x30;
date[6]=' ';date[7]=' ';
date[8]=month2+0x30;date[9]=month1+0x30;
date[10]=' ';date[11]=' ';
date[12]=day2+0x30;date[13]=day1+0x30;
date[14]=' ';date[15]=' ';
LCD_Show_Text(date);
usleep(200000);
LCD_Line1();
date[0]=' ';date[1]=' ';
date[2]=year4+0x30;date[3]=year3+0x30;
date[4]=year2+0x30;date[5]=year1+0x30;
date[6]=' ';date[7]=' ';
date[8]=' ';date[9]=' ';
date[10]=' ';date[11]=' ';
date[12]=day2+0x30;date[13]=day1+0x30;
date[14]=' ';date[15]=' ';
LCD_Show_Text(date);
usleep(100000);
}
if(screen==0&&pos==2)
{
LCD_Line1();
date[0]=' ';date[1]=' ';
date[2]=year4+0x30;date[3]=year3+0x30;
date[4]=year2+0x30;date[5]=year1+0x30;
date[6]=' ';date[7]=' ';
date[8]=month2+0x30;date[9]=month1+0x30;
date[10]=' ';date[11]=' ';
date[12]=day2+0x30;date[13]=day1+0x30;
date[14]=' ';date[15]=' ';
LCD_Show_Text(date);
usleep(200000);
LCD_Line1();
date[0]=' ';date[1]=' ';
date[2]=' ';date[3]=' ';
date[4]=' ';date[5]=' ';
date[6]=' ';date[7]=' ';
date[8]=month2+0x30;date[9]=month1+0x30;
date[10]=' ';date[11]=' ';
date[12]=day2+0x30;date[13]=day1+0x30;
date[14]=' ';date[15]=' ';
LCD_Show_Text(date);
usleep(100000);
}
}
{
hour4=0;hour3=0;
hour2=hour/10;
hour1=hour%10;
minute2=minute/10;
minute1=minute%10;
second2=second/10;
second1=second%10;
time[0]=' ';time[1]=' ';
time[2]=' ';time[3]=' ';
time[4]=hour2+0x30;;time[5]=hour1+0x30;
time[6]=':';time[7]=minute2+0x30;
time[8]=minute1+0x30;time[9]=':';
time[10]=second2+0x30;time[11]=second1+0x30;
time[12]=' ';time[13]=' ';
time[14]=' ';time[15]=' ';
LCD_Line2();
LCD_Show_Text(time);
if(screen==1&&pos==0)
{
time[0]=' ';time[1]=' ';
time[2]=' ';time[3]=' ';
time[4]=hour2+0x30;;time[5]=hour1+0x30;
time[6]=':';time[7]=minute2+0x30;
time[8]=minute1+0x30;time[9]=':';
time[10]=second2+0x30;time[11]=second1+0x30;
time[12]=' ';time[13]=' ';
time[14]=' ';time[15]=' ';
LCD_Line2();
LCD_Show_Text(time);
usleep(200000);
time[0]=' ';time[1]=' ';
time[2]=' ';time[3]=' ';
time[4]=hour2+0x30;;time[5]=hour1+0x30;
time[6]=':';time[7]=minute2+0x30;
time[8]=minute1+0x30;time[9]=':';
time[10]=' ';time[11]=' ';
time[12]=' ';time[13]=' ';
time[14]=' ';time[15]=' ';
LCD_Line2();
LCD_Show_Text(time);
usleep(100000);
}
if(screen==1&&pos==1)
{
time[0]=' ';time[1]=' ';
time[2]=' ';time[3]=' ';
time[4]=hour2+0x30;;time[5]=hour1+0x30;
time[6]=':';time[7]=minute2+0x30;
time[8]=minute1+0x30;time[9]=':';
time[10]=second2+0x30;time[11]=second1+0x30;
time[12]=' ';time[13]=' ';
time[14]=' ';time[15]=' ';
LCD_Line2();
LCD_Show_Text(time);
usleep(200000);
time[0]=' ';time[1]=' ';
time[2]=' ';time[3]=' ';
time[4]=hour2+0x30;;time[5]=hour1+0x30;
time[6]=':';time[7]=' ';
time[8]=' ';time[9]=':';
time[10]=second2+0x30;time[11]=second1+0x30;
time[12]=' ';time[13]=' ';
time[14]=' ';time[15]=' ';
LCD_Line2();
LCD_Show_Text(time);
usleep(100000);
}
if(screen==1&&pos==2)
{
time[0]=' ';time[1]=' ';
time[2]=' ';time[3]=' ';
time[4]=hour2+0x30;;time[5]=hour1+0x30;
time[6]=':';time[7]=minute2+0x30;
time[8]=minute1+0x30;time[9]=':';
time[10]=second2+0x30;time[11]=second1+0x30;
time[12]=' ';time[13]=' ';
time[14]=' ';time[15]=' ';
LCD_Line2();
LCD_Show_Text(time);
usleep(200000);
time[0]=' ';time[1]=' ';
time[2]=' ';time[3]=' ';
time[4]=' ';;time[5]=' ';
time[6]=':';time[7]=minute2+0x30;
time[8]=minute1+0x30;time[9]=':';
time[10]=second2+0x30;time[11]=second1+0x30;
time[12]=' ';time[13]=' ';
time[14]=' ';time[15]=' ';
LCD_Line2();
LCD_Show_Text(time);
usleep(100000);
}
}
//sum=year4*0x10000000+year3*0x1000000+year2*0x100000+year1*0x10000;
//sum+=month2*0x1000+month1*0x100+day2*0x10+day1;
//sum=minute2*0x10000000+minute1*0x1000000+second2*0x100000+second1*0x10000;
sum=month2*0x10000000+month1*0x1000000+day2*0x100000+day1*0x10000;
sum+=hour2*0x1000+hour1*0x100+minute2*0x10+minute1;
IOWR_ALTERA_AVALON_PIO_DATA(SEG7_DISPLAY_BASE,sum);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -