嵌入式课程设计--基于LCD的电子时钟实验 下载本文

内容发布更新时间 : 2024/6/3 23:02:28星期一 下面是文章的全部内容请认真阅读。

河海大学本科课程设计报告

参考文献

[1] 谢自美,电子线路设计、实验、测试,华中理工大学出版社,2003。 [2] 宋春荣,通用集成电路速查手册,山东科学技术出版社,1995。 [3] Arnold Berger,嵌入式系统设计,吕骏 译, 北京:电子工业出版社, 2002 [4] 桑楠. 嵌入式系统原理及应用开发技术,北京:北京航空航天大学出版社, 2002

- 12 -

河海大学本科课程设计报告

附 录

一、源程序:

void c_init() {

wr_circle(123,79,1,1); wr_circle(123,79,2,1); wr_circle(63,139,1,1); wr_circle(63,139,2,1); wr_circle(3,79,1,1); wr_circle(3,79,2,1); wr_circle(63,19,1,1); wr_circle(63,19,2,1);

wr_circle(115,109,1,1); wr_circle(93,131,1,1); wr_circle(33,131,1,1); wr_circle(11,109,1,1); wr_circle(11,49,1,1); wr_circle(33,27,1,1); wr_circle(93,27,1,1); wr_circle(115,49,1,1);

wr_point(c_ox,c_oy,1); wr_circle(c_ox,c_oy,2,1); wr_circle(c_ox,c_oy,62,1); }

void move(unsigned char n) {

line(c_ox,c_oy,sec[2*n],sec[2*n+1],1); }

#define fpclk 2764800 unsigned char min_n; unsigned int hou_n; void rtc_init() {

PREINT=fpclk/32768-1;

PREFRAC=fpclk-(fpclk/32768)*32768; YEAR=2010;

- 13 -

河海大学本科课程设计报告

MONTH=1; DOM=15; HOUR=11; MIN=1; SEC=36; CIIR=0x01; ILR=0x01; CCR=0x01; }

void __irq rtc_int() {

ILR=0x01;

wr_char(9,6,0x10+HOUR/10); wr_char(9,7,0x10+HOUR); wr_char(9,8,0x1a);

wr_char(9,9,0x10+MIN/10); wr_char(9,10,0x10+MIN); wr_char(9,11,0x1a);

wr_char(9,12,0x10+SEC/10); wr_char(9,13,0x10+SEC);

wr_char(11,5,0x10+YEAR/1000);

wr_char(11,6,0x10+YEAR00/100); wr_char(11,7,0x10+YEAR0/10); wr_char(11,8,0x10+YEAR); wr_char(11,9,0xf);

wr_char(11,10,0x10+MONTH/10); wr_char(11,11,0x10+MONTH); wr_char(11,12,0xf);

wr_char(11,13,0x10+DOM/10); wr_char(11,14,0x10+DOM);

if(SEC==0) { line(c_ox,c_oy,sec[59*2],sec[59*2+1],0); line(c_ox,c_oy,sec[0],sec[1],1); } else { line(c_ox,c_oy,sec[SEC*2-2],sec[SEC*2-1],0); line(c_ox,c_oy,sec[SEC*2],sec[SEC*2+1],1); }

if(MIN==0)

- 14 -

河海大学本科课程设计报告

{ line(c_ox,c_oy,min[59*2],min[59*2+1],0); line(c_ox,c_oy,min[0],min[1],1); } else { line(c_ox,c_oy,min[MIN*2-2],min[MIN*2-1],0); line(c_ox,c_oy,min[MIN*2],min[MIN*2+1],1); }

if(HOUR>11) hou_n=((HOUR-12)*60+MIN)/12; else hou_n=(HOUR*60+MIN)/12; if(hou_n==0) { line(c_ox,c_oy,hou[59*2],hou[59*2+1],0); line(c_ox,c_oy,hou[0],hou[1],1); } else { line(c_ox,c_oy,hou[hou_n*2-2],hou[hou_n*2-1],0); line(c_ox,c_oy,hou[hou_n*2],hou[hou_n*2+1],1); }

wr_circle(c_ox,c_oy,2,1); }

void int_init() //中断向量初始化 {

VICIntSelect=0; //设置所有中断为irq中断 VICIntEnable=0x00002000; //中断使能位 VICVectCntl0=0x2d; //中断优先级设置 VICVectAddr0=(int)rtc_int; //中断向量设置 }

int main(void) {

lcd_init(); c_init(); int_init(); rtc_init(); enable_irq(); // move(2);

// line(c_ox,c_oy,min[2],min[3],1); // line(c_ox,c_oy,hou[0],hou[1],1); while(1); }

- 15 -