当前位置:文档之家› 基于fpga的LCD显示万年历..

基于fpga的LCD显示万年历..

基于fpga的LCD显示万年历..
基于fpga的LCD显示万年历..

接着我的上一篇博文,终于完善好了,前几天太忙了,没有及时上传,呵呵,今天晚上刚比较早刚好凌晨,及时上传一下,实现了从0000---9999年的时钟,其实万年历和十万年历,都是差不多,等到地球能转到9999年再改代码也不迟,哈哈!!

我这里有顶层和底层文件,顶层主要是调用模块和做按键处理,具体按键防抖动原理,参见偶的以前的博文,我写完这个万年历的代码,还没来得及优化,占用了太多了逻辑门,可以进一步优化。

大致思路是:第一次按下KEY1 的时候,所有计时停止,再按KEY1,年就闪烁,按下KEY2和KEY3 进行加减。再按KEY1,月就闪烁,按下KEY2和KEY3 进行加减........依次为调年-月-日-星期-时分秒,再次按一下KEY1,进入正常运行模式。

好了先上顶层模块

module LCD

(

rst,

clk,

rw,

rs,

en,

data,

key1,key2,key3

);

input clk,rst;

input key1,key2,key3;

output rs,en,rw;

output [7:0] data;

reg key1_out,key2_out,key3_out;

wire clk,rst;

wire rs,en,rw;

wire [7:0] data;

disp U1

(

.clk(clk),

.rst(rst),

.rs(rs),

.en(en),

.rw(rw),

.data(data),

.key1(key1_out),

.key2(key2_out),

.key3(key3_out)

);

//=============key1,key2,key3 按键防抖动================// reg key1_reg1,key1_reg2;

reg key2_reg1,key2_reg2;

reg key3_reg1,key3_reg2;

reg [31:0] count;

always @(posedge clk)

begin

count<=count+1;

if(count==500000)

begin

count<=0;

key1_reg1<=key1;

key2_reg1<=key2;

key3_reg1<=key3;

end

key1_reg2<=key1_reg1;

key2_reg2<=key2_reg1;

key3_reg2<=key3_reg1;

key1_out <= key1_reg2 & (!key1_reg1);

key2_out <= key2_reg2 & (!key2_reg1);

key3_out <= key3_reg2 & (!key3_reg1);

end

endmodule

底层模块:

module disp

(

rst,

clk,

rw,

rs,

en,

data,

key1,key2,key3

);

input clk,rst;

input key1,key2,key3;

output rs,en,rw;

output [7:0] data;

reg rs,en_sel;

reg [7:0] data;

reg [14:0] year;

reg [7:0] shi,fen,miao,month,dat;

reg [31:0]count,count1; //LCD CLK 分频计数器reg lcd_clk;

//2行32个数据寄存器

reg [7:0]

one_1,one_2,one_3,one_4,one_5,one_6,one_7,one_8,one_9,one_10,one_11,one_12,on e_13,one_14,one_15,one_16;

reg [7:0]

two_1,two_2,two_3,two_4,two_5,two_6,two_7,two_8,two_9,two_10,two_11,two_12,two_ 13,two_14,two_15,two_16;

reg [7:0] next;

parameter state0 =8'h00, //设置8位格式,2行,5*7 8'h38;

state1 =8'h01, //整体显示,关光标,不闪烁8'h0C 闪烁8'h0e

state2 =8'h02, //设定输入方式,增量不移位8'h06

state3 =8'h03, //清除显示8'h01

state4 =8'h04, //显示第一行的指令80H

state5 =8'h05, //显示第二行的指令80H+40H

scan =8'h06,

nul =8'h07;

parameter data0 =8'h10, //2行32个数据状态

data1 =8'h11,

data2 =8'h12,

data3 =8'h13,

data4 =8'h14,

data5 =8'h15,

data6 =8'h16,

data7 =8'h17,

data8 =8'h18,

data9 =8'h19,

data10 =8'h20,

data11 =8'h21,

data12 =8'h22,

data13 =8'h23,

data14 =8'h24,

data15 =8'h25,

data16 =8'h26,

data17 =8'h27,

data18 =8'h28,

data19 =8'h29,

data20 =8'h30,

data21 =8'h31,

data22 =8'h32,

data23 =8'h33,

data24 =8'h34,

data25 =8'h35,

data26 =8'h36,

data27 =8'h37,

data28 =8'h38,

data29 =8'h39,

data30 =8'h40,

data31 =8'h41;

initial

begin

//第一行显示年-月-日星期//Mon Tue Wed Thur Fri Sat Sun

one_1<=" "; one_2<=" "; one_3<=" "; one_4<=" "; one_5<="-"; one_6<=" "; one_7<=" "; one_8<="-";

one_9<=" ";one_10<=" ";one_11<=" ";one_12<=" ";one_13<=" ";one_14<="

";one_15<=" ";one_16<=" ";

//第二行显示Clock:00-00-00

two_1<="C"; two_2<="l"; two_3<="o"; two_4<="c"; two_5<="k"; two_6<=":"; two_7<=" "; two_8<=" ";

two_9<="-";two_10<=" ";two_11<=" ";two_12<="-";two_13<=" ";two_14<="

";two_15<=" ";two_16<=" ";

shi<=8'd0;fen<=8'd0;miao<=8'd0;

end

//======================产生LCD 时序脉冲=========================== always @ (posedge clk ) //获得LCD时钟

begin

count<=count+1;

if(count==32'd50000)

begin

count<=32'b0;

lcd_clk<=~lcd_clk;

end

end

//=====================产生闪烁扫描时钟===========================

reg [31:0] count2;

reg scan_flag;

always @ (posedge clk or negedge rst) //获得校准时间选中闪烁状态

begin

if(!rst)

begin

scan_flag<=1'b0;

end

else

begin

count2<=count2+1;

if(count2==32'd1*******)

begin

count2<=32'b0;

scan_flag<=~scan_flag;

end

end

end

//====================产生按键标志位================================= reg [3:0] flag;

always @ (posedge clk or negedge rst )

begin

if(!rst)

begin

flag<=4'b0;

end

else

if(key1)

begin

flag<=flag+1'b1;

if(flag==4'b1000)

flag<=4'b0000;

end

end

//===================计时以及校准

=======================================

reg[3:0] week;

reg[7:0] dat_flag;

always @ (posedge clk or negedge rst ) //时钟计数器

begin

if(!rst)

begin //初始化显示第一行2012-05-19 Sat 第二行:Clock:00-00-00 shi<=8'b0;fen<=8'b0;miao<=8'b0;

month<=8'd5;dat<=8'd19;year<=16'd2012;week<=4'd5;

count1<=1'b0;

two_7<= (shi/8'd10)+8'b00110000;

two_8<= (shi%8'd10)+8'b00110000;

two_10<=(fen/8'd10)+8'b00110000;

two_11<=(fen%8'd10)+8'b00110000;

two_13<=(miao/8'd10)+8'b00110000;

two_14<=(miao%8'd10)+8'b00110000;

one_1<=(year/16'd1000)+8'b00110000;

one_2<=((year%16'd1000)/16'd100)+8'b00110000;

one_3<=((year%16'd100)/8'd10)+8'b00110000;

one_4<=(year%8'd10)+8'b00110000;

one_6<=(month/8'd10)+8'b00110000;

one_7<=(month%8'd10)+8'b00110000;

one_9<=(dat/8'd10)+8'b00110000;

one_10<=(dat%8'd10)+8'b00110000;

end

else

begin

two_7<= (shi/8'd10)+8'b00110000;

two_8<= (shi%8'd10)+8'b00110000;

two_10<=(fen/8'd10)+8'b00110000;

two_11<=(fen%8'd10)+8'b00110000;

two_13<=(miao/8'd10)+8'b00110000;

two_14<=(miao%8'd10)+8'b00110000;

one_1<=(year/16'd1000)+8'b00110000;

one_2<=((year%16'd1000)/16'd100)+8'b00110000;

one_3<=((year%16'd100)/8'd10)+8'b00110000;

one_4<=(year%8'd10)+8'b00110000;

one_6<=(month/8'd10)+8'b00110000;

one_7<=(month%8'd10)+8'b00110000;

one_9<=(dat/8'd10)+8'b00110000;

one_10<=(dat%8'd10)+8'b00110000;

// 判断是否为31天的月份

if(month==8'd1||month==8'd3||month==8'd5||month==8'd7||month==8'd8||month==8'd10|| month==8'd12)

dat_flag<=8'd31;

// 判断是否为30天的月份

else if(month==8'd4||month==8'd6||month==8'd9||month==8'd11)

dat_flag<=8'd30;

// 判断是否为闰年和平年

else if(month==8'd2)

begin

if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

dat_flag<=28;

else dat_flag<=27;

end

case (week)

//星期//Mon Tue Wed Thu Fri Sat Sun

4'b0000 : //1

begin

one_13<="M";one_14<="o";one_15<="n";

end

4'b0001 : //2

begin

one_13<="T";one_14<="u";one_15<="e";

end

4'b0010 : //3

begin

one_13<="W";one_14<="e";one_15<="d"; end

4'b0011 : //4

begin

one_13<="T";one_14<="h";one_15<="u"; end

4'b0100 : //5

begin

one_13<="F";one_14<="r";one_15<="i"; end

4'b0101 : //6

begin

one_13<="S";one_14<="a";one_15<="t"; end

4'b0110 : //7

begin

one_13<="S";one_14<="u";one_15<="n"; end

endcase

case(flag)

4'b0000 :

begin

en_sel<=1'b1;

count1<=count1+1'b1;

if(count1==32'd4*******)

begin

count1<=1'b0;

miao<=miao+1'b1;

if(miao==8'd59)

begin

miao<=1'b0;

fen<=fen+1'b1;

if(fen==8'd59)

begin

fen<=1'b0;

shi<=shi+1'b1;

if(shi==8'd23)

begin

shi<=1'b0;

dat<=dat+1'b1;

week<=week+1'b1;

if(week==4'b0110)

week<=1'b1;

if(dat==dat_flag)

begin

dat<=8'd1;

month<=month+1'b1;

if(month==8'd12)

begin

month<=8'd1;

year<=year+1'b1;

if(year==16'd9999)

year<=16'd0; //可以计1万年

end

end

end

end

end

end

end

4'b0001 :

begin

count1<=32'b0;

//shi<=shi;fen<=fen;miao<=miao;year<=year;month<=month;dat<=dat;week<=week;

end

4'b0010 : //调年

begin

case(scan_flag)

1'b0:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

one_1<=8'd20;one_2<=8'd20;one_3<=8'd20;one_4<=8'd20;

end

1'b1:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

end

endcase

if(key2) //加数

begin

year<=year+1'b1;

if(year==16'd9999)

year<=16'd0;

end

if(key3) //减数

begin

year<=year-1'b1;

if(year==16'd0)

year<=16'd9999;

end

end

4'b0011 : //调月

begin

case(scan_flag)

1'b0:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

one_6<=8'd20;one_7<=8'd20;

end

1'b1:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

endcase

if(key2) //加数

begin

month<=month+1'b1;

if(month==8'd12)

month<=8'd0;

end

if(key3) //减数

begin

month<=month-1'b1;

if(month==8'd0)

month<=8'd12;

end

end

4'b0100 : //调日

begin

case(scan_flag)

1'b0:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

one_9<=8'd20;one_10<=8'd20;

end

1'b1:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

end

endcase

if(key2) //加数

begin

dat<=dat+1'b1;

if(dat==dat_flag)

dat<=8'd0;

end

if(key3) //减数

dat<=dat-1'b1;

if(dat==8'd0)

dat<=dat_flag;

end

end

4'b0101 : //调星期

begin

case(scan_flag)

1'b0:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

one_13<=8'd20;one_14<=8'd20;one_15<=8'd20;

end

1'b1:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

end

endcase

if(key2) //加数

begin

week<=week+1'b1;

if(week==4'd6)

week<=4'd0;

end

if(key3) //减数

begin

week<=week-1'b1;

if(week==4'd0)

week<=4'd7;

end

end

4'b0110 : //调时

begin

case(scan_flag)

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

two_7<= 8'd20;

two_8<= 8'd20;

end

1'b1:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

end

endcase

if(key2) //加数

begin

shi<=shi+8'b00000001;

if(shi==8'd23)

shi<=8'b0;

end

if(key3) //减数

begin

shi<=shi-8'b00000001;

if(shi==8'b0)

shi<=23;

end

end

4'b0111 : //调分

begin

case(scan_flag)

1'b0:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

two_10<=8'd20;

two_11<=8'd20;

end

1'b1:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

end

endcase

if(key2) //加数

begin

fen<=fen+8'b00000001;

if(fen==8'd59)

fen<=8'b0;

end

if(key3) //减数

begin

fen<=fen-8'b00000001;

if(fen==8'b0)

fen<=59;

end

end

4'b1000 : //调秒

begin

case(scan_flag)

1'b0:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

two_13<=8'd20;

two_14<=8'd20;

end

1'b1:

begin

count1<=32'b0; //shi<=shi;fen<=fen;miao<=miao;

end

endcase

if(key2) //加数

begin

miao<=miao+8'b00000001;

if(miao==8'd59)

miao<=8'b0;

end

if(key3) //减数

begin

miao<=miao-8'b00000001;

if(miao==8'b0)

miao<=59;

end

end

endcase

end

end

always @(posedge lcd_clk )

begin

case(next)

state0 :

begin rs<=1'b0; data<=8'h38; next<=state1; end

state1 :

begin rs<=1'b0; data<=8'h0e; next<=state2; end

state2 :

begin rs<=1'b0; data<=8'h06; next<=state3; end

state3 :

begin rs<=1'b0; data<=8'h01; next<=state4; end

state4 :

begin rs<=1'b0; data<=8'h80; next<=data0; end //显示第一行data0 :

begin rs<=1'b1; data<=one_1; next<=data1 ; end

data1 :

begin rs<=1'b1; data<=one_2; next<=data2 ; end

data2 :

begin rs<=1'b1; data<=one_3; next<=data3 ; end

data3 :

begin rs<=1'b1; data<=one_4; next<=data4 ; end

data4 :

data5 :

begin rs<=1'b1; data<=one_6; next<=data6 ; end

data6 :

begin rs<=1'b1; data<=one_7; next<=data7 ; end

data7 :

begin rs<=1'b1; data<=one_8; next<=data8 ; end

data8 :

begin rs<=1'b1; data<=one_9; next<=data9 ; end

data9 :

begin rs<=1'b1; data<=one_10; next<=data10 ; end

data10 :

begin rs<=1'b1; data<=one_11; next<=data11 ; end

data11 :

begin rs<=1'b1; data<=one_12; next<=data12 ; end

data12 :

begin rs<=1'b1; data<=one_13; next<=data13 ; end

data13 :

begin rs<=1'b1; data<=one_14; next<=data14 ; end

data14 :

begin rs<=1'b1; data<=one_15; next<=data15 ; end

data15 :

begin rs<=1'b1; data<=one_16; next<=state5 ; end

state5:

begin rs<=1'b0;data<=8'hC0; next<=data16; end //显示第二行data16 :

begin rs<=1'b1; data<=two_1; next<=data17 ; end

data17 :

begin rs<=1'b1; data<=two_2; next<=data18 ; end

data18 :

begin rs<=1'b1; data<=two_3; next<=data19 ; end

data19 :

begin rs<=1'b1; data<=two_4; next<=data20 ; end

data20 :

data21 :

begin rs<=1'b1; data<=two_6; next<=data22 ; end

data22 :

begin rs<=1'b1; data<=two_7; next<=data23 ; end

data23 :

begin rs<=1'b1; data<=two_8; next<=data24 ; end

data24 :

begin rs<=1'b1; data<=two_9; next<=data25 ; end

data25 :

begin rs<=1'b1; data<=two_10; next<=data26 ; end data26 :

begin rs<=1'b1; data<=two_11; next<=data27 ; end data27 :

begin rs<=1'b1; data<=two_12; next<=data28 ; end data28 :

begin rs<=1'b1; data<=two_13; next<=data29 ; end data29 :

begin rs<=1'b1; data<=two_14; next<=data30 ; end data30 :

begin rs<=1'b1; data<=two_15; next<=data31 ; end data31 :

begin rs<=1'b1; data<=two_16; next<=scan ; end

scan : //交替更新第一行和第二行数据

begin

next<=state4;

end

default: next<=state0;

endcase

end

assign en=lcd_clk && en_sel;

assign rw=1'b0;

endmodule

万年历电子钟设计报告

课程设计报告课程设计名称 SOPC原理及应用专业电子科学与技术 班级电子13-1班 学号 姓名郑航 指导教师冯丽 成绩

2016年1月13日

目录 一、设计目的 (1) 二、设计内容要求 (1) 三、系统软、硬件需求分析 (1) 1. 硬件系统组成规划 (1) 2. 软件系统规划 (2) 四、设计步骤 (3) 3. 新建工程“count_binary” (3) 4. 添加ip核 (4) 5. 添加SDRAM Controller (5) 6. 添加flash (6) 7. 添加外部RAM总线(Avalon三态桥) (7) 8. 添加pio核 (7) 9. 添加cpu核 (8) 10. 添加LCD核 (9) 11. 自动分配基地址并生成系统 (9) 12. 设置顶层模块图 (10) 13. 管脚分配并编译 (11) 14. 启动Nios II IDE,新建工程 (12)

15. 导入设计程序 (12) 16. 编译工程并烧录 (13) 五、设计结果 (14) 六、源程序 (16) 1. 程序......................................... 错误!未定义书签。 2. 程序......................................... 错误!未定义书签。 3. 程序......................................... 错误!未定义书签。 4. 程序 (16) 七、实验心得 (28)

项目基于NiosII系统的电子钟设计 一、设计目的 1.掌握基本的开发流程。 2.熟悉QUARTUS II软件的使用。 3.熟悉NIOS II软件的使用。 4.掌握SOPC硬件系统的搭建和NIOSII软件编程方法。 5.掌握SOPC系统设计方法。 6.进一步了解简单的设置及其编程。 二、设计内容要求 NiosII系统的硬件设计,软件设计,该系统能实现一个电子钟功能。 三、系统软、硬件需求分析 1.硬件系统组成规划 根据系统要实现的功能和开发板配置,本项目中需要用到的Cyclone II开发板上的外围器件有: LCD:电子钟显示屏幕 按钮:电子钟设置功能键 Flash存储器:存储软、硬件程序 SRAM存储器:程序运行时将其导入SRAM 根据所用到的外设和器件特性,在SOPC Builder中建立系统要添加的模块包括:NiosII CPU定时器,按键PIO,LCD,外部RAM总线(Avalon三态桥),

带温度显示的万年历_数码管显示(附电路图和源代码)

设计报告 设计任务: 设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。设计要求: 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术所连线路和单片机接口仿真图如图3所示: 图3 仿真按键 4)温度采集部分: DS18B20温度传感器,测温范围-55℃~+125℃,固有测温分辨率0.5℃。独特的单线接口方式,DS18B20在与微处理器

连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示 : 程序如下: ReadOneChar(void) { unsigned char i=0;// 定义i用于循环 unsigned char dat = 0;// 读取的8位数据 for (i=8;i>0;i--)//8次循环 { DQ = 0;// 拉低DQ总线开始读时序 dat>>=1;// dat左移一位 DQ = 1; //释放DQ总线 if(DQ)// 如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat 即为读取的数据) //DQ=0,就跳过 dat|=0x80; Tdelay(4);// 延时以完成此次读时序,之后再读下一数据 } return(dat); 返回读取的dat } //写一个字节 WriteOneChar(unsigned char dat) { unsigned char i=0;// for (i=8; i>0; i--)// { DQ = 0;// DQ = dat&0x01;// Tdelay(5);//延时以完成此次读时序,之后再读下一数据

6、用DS1302与LCD1602可调数字万年历实验设计报告

利用时钟芯片DS1302实现万年历 系别电子通信工程系 组别第十组 专业名称电子信息工程 指导教师 组内成员 2013年8月19日

用DS1302与LCD1602设计 的可调式电子日历时钟 一、总体设计 1.1、设计目的 为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与DS1302 设计可调式电子日历时钟。 1.2、设计要求 (1)显示:年、月、日、时、分、秒和星期; (2)设置年、月、日、时、分、秒和星期的初始状态; (3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期; 完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内 容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。 控制程序的编写等。 备注:本程序另外添加了每到上午8:10和下午2:10的闹钟提醒功能。 1.3、系统基本方案选择和论证 1.3.1、单片机芯片的选择方案 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。 方案二: 采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。但造价较高。

1.3.2 、显示模块选择方案和论证: 方案一: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。所以不用此种作为显示。 方案二: 采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。所以也不用此种作为显示。 方案三: 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。LCD1602可实现显示2行十六个字符。 1.3.3、时钟芯片的选择方案和论证: 方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。 方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、星期、月、年以及闰年补偿的年进行计数,而且精度高,31*8位的RAM做为数据暂存区,工作电压范围为2.5V~5.5V,2.5V时耗电小于300nA。 1.3.4、电路设计最终方案决定 综上各方案所述,对此次作品的方案选定:采用80C51作为主控制系统;DS1302提供时钟;LCD1602液晶带汉字库显示屏作为显示部分。

基于AT89C51的数字万年历设计

江西理工大学南昌校区 毕业设计(论文) 题目:基于AT89C51的数字万年历设计 系别:信息工程系 专业:电气自动化 班级:09电子自动化1班 学生: 学号:09321131 指导教师:职称:助教

摘要 电子万年历是一种日常广泛应用的计时工具,在现代社会中越来越流行。数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周、时、分、秒、温度等信息,还具有时间校准等功能。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。 本文中万年历的设计过程在硬件与软件方面进行同步设计,硬件部分主要由AT89C51单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路等组成。在单片机的选择上使用了AT89C51单片机,该单片机适合于许多较为复杂控制应用场合,显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序、显示程序等,这些程序采用C语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。并且利用Protel软件进行制图,画出PCB图并且制作出实物。 关键词: 时钟电钟;液晶LCD1602;单片机

ABSTRACT E-calendar is a very extensive daily timing tool, more popular in modern society. For digital electronic calendar using intuitive digital display, simultaneously displays year, month, day, day, hour, minute, second, temperatures and other information, also with a time calibration capabilities. The third revolution is a single-chip digital timing technology ( electronic calendar ), so that the timing product walk time difference from graded narrowing to 1/ 6000000 of a second, from the original traditional pointer timing for the development of people's daily more familiar luminous digital display, intuitive and clear, and the increase of the full automatic date, week, temperature and other daily auxiliary information display function, which is more in line with consumer needs. Therefore, the electronic calendar brings a watch industry a big progress. Synchronizing design of calendar is based on hardware and software design. Hardware part by AT89C51 microcontroller, circuit for LCD, reset circuit, clock circuits, voltage-stabilizing circuit and serial download circuits and other components of the circuit. On the choice of using single-chip microcomputer AT89C51 microcontroller, the microcontroller is suitable for a host of complex control applications. Monitor LCD LCD1602. Software includes calendar, LCD drivers, display program. Programs using a language. All the programming is completed, Kiel C51 debugging software, sure no problem, in Proteus software embedded in single-chip microcomputer in the simulation. And the use of Portal software for drawing and draw the PCB. Keywords : clock electric clock II

电子时钟万年历设计

计算机科学与技术学院硬件课程设计报告

在日常生活中,手表,闹钟是不可或缺的。在实际生活生产活动中,也要考虑时间的因素,如工时的计算,霓虹灯的亮灭。 因为集成电路制造技术的不断提高,出现了高性能、高可靠的集成芯片。电子时钟在工业领域,日常生活中得到了广泛的应用。电子时钟在性能方面具有精度高,实时性好,易于调整等优点。这些使得温度控制系统的研究和开发得到的各方面的广泛关注和支持。 本次课程设计,我利用8254计数芯片,8255芯片,4*4小键盘,12864LCD 液晶显示器,蜂鸣器制作了一个带有闹钟功能的电子时钟万年历。它可以实现由4*4小键盘输入初始时间(包括年月日时分秒星期),利用8254计数,通过程序处理进位,判断闰年,在液晶显示屏上实时显示时间。还可以由小键盘选择不同的闹钟模式,设定闹钟时间。 关键词: 电子时钟; 8255A芯片; 8254芯片; 12864LCD液晶显示器;键盘输入;蜂鸣器;闹钟功能;万年历

1.设计任务与要求...........................................................................6- 1.1实验目的 (6) 1.2具体要求 (6) 2.总体方案与说明...........................................................................6- 2.1使用硬件 (6) 2.1流程设计 (6) 2.1.1系统程序模块 (6) 2.1.1系统流程图 (7) 3.硬件方案 (7) 3.1硬件说明 (7) 3.1.1计数芯片8254 (7) 3.1.2可编程外围接口芯片8255A (8) 3.1.2 128×64字符液晶显示器 (11) 3.2电路原理图与说明 (12) 3.2.1键盘电路 (13) 3.2.2 8254计数电路 (13) 3.2.3 液晶显示电路 (14) 3.3电路连接图 (14) 3.3.1 8254计数芯片 (14) 3.3.2 整体电路 (15) 4.软件方案 (15) 4.1软件主要模块流程图 (15) 4.1.1输入子程序模块流程图 (16) 4.1.2显示子程序模块流程图 (18) 4.1.2闰年子程序模块流程图 (18) 4.1.2蜂鸣器子程序模块流程图 (18) 4.1.2时间进位程序模块流程图 (19) 4.1.2主程序模块流程图 (20) 4.2源程序清单与注释 (21) 5.分析与测试 (38) 6.运行结果 (38) 6.1试验线路图 (39) 6.2实验结果 (39) 6.2.1欢迎界面 (39)

带温度计的万年历

设计课题题目: 带温度计的万年历 一、设计任务与要求 1. 显示准确的北京时间(时、分、秒)及公历日期显示功能(年、月、日); 2. 可通过按键切换年、月、日及时、分、秒的显示状态; 3. 可随时可以调校年、月、日或时、分、秒; 4. 可每次增减一进行时间调节,也可快速增减进行时间调节; 5. 可显示环境温度。 二、系统设计方案 方案一、用主芯片为AT89C51的单片机控制实现,使用单片机内部的定时计数器实现时间的设定,使用按键进行时间的调整和定时,按键有蜂鸣器提示,温度传感器使用DALLAS 公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配处理器等优点。显示时间和温度使用数码管显示。 方案二、用主芯片为STC89C52的单片机控制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用按键进行时间的调整和定时,温度传感器使用 DS18B20。显示时间和温度使用LCD1602显示。 方案一片内定时器会导致计时节拍的时间误差,当进行年、月、日的日历计时,定时中断误差扥积累就会很大。使用片内定时器进行计时的时候,单片机始终要处于工作状态。才能维持计时时间,一旦停机或进入待机状态,开机后,计时时间就需要重新设定。为了满足单片机系统的实时钟需求,本设计采用的是方案二,系统框图如图2-1所示。 图2-1 三、单元电路分析与设计 1. 原理分析 1.1主控制器 单片机STC89C52 具有低电压供电和体积小等特点,如图3-1所示。

1.2晶振电路 AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图3-2所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz 之间,电容C1、C2取值范围在5~30pF 之间。 根据实际情况,本设计晶振选择频率为12MHZ ,电容选择30pF 如图3-2。经计算得单片机工作的机器周期为:12×(1÷12M )=1us 。振荡器的振荡信号从XTAL2端输入到片内的时钟发生器上。时钟发生器是个二分频的触发器,它将振荡器的信号频率fosc 除以2,向CPU 提供两相时的时钟号。 1.3复位电路 时钟电路工作后, 芯片内部开始进行初始复位,如图3-3 。 1.4 LCD 显示电路 显示器是单片机常用的功能单元之一,显示器的工作是由单片机通过显示接口驱动的。本设计采用的是LCD1602显示电路图如图3-4所示。

液晶显示万年历设计

湄洲湾职业技术学院 液晶显示万年历设计 系别:自动化工程系 年级:10 级专业:电气自动化 姓名:陈承隆学号:1001020212 导师姓名:许振龙职称:讲师 2013年 5 月27日

目录 1.前言 (1) 2.系统设计参数要求 (2) 3.系统设计 (3) 3.1系统设计总体框图 (3) 3.2 各模块原理说明 (4) 3.2.1 AT89C52单片机最小系统模块 (4) 3.2.2 液晶显示模块 (5) 3.2.3 机给蜂鸣器模块 (5) 3.2.4 独立键盘模块 (5) 3.3 系统总原理图说明 (6) 3.4系统印刷电路板的制作图 (6) 3.5系统的操作说明 (6) 3.6 系统操作注意事项 (6) 参考文献 (7) 致谢词 (8) 附录 (9) 附录1:电路总原理图 (10) 附录2:印刷电路板 (11) 附录3:原件清单 (12)

1.前言 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。目前,单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来了诸多方便。随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。 单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具,于是基于单片机的醒目而时尚的电子版万年历顺应而生。基于单片机的电子万年历结合了时钟和日历的功能,将其二者融为一体,在显示时间的同时还能显示日期和年、月,它主要是通过单片机来读取时钟芯片的时间、日期,然后送给显示设备显示出来。而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。

推荐-电子万年历的设计与制作课程设计 精品

华南农业大学 电子工程学院应用物理系 课程设计(报告)任务书 设计题目:电子万年历的设计与制作 任务与要求(请按所选题目自行总结) 任务:设计一个电子万年历,利用实时时钟芯片ds1302和51单片机制作实时时钟。 要求: 1.使用LCD1602显示屏显示日期和时间; 2.能够显示新历和农历; 3. 包括时钟模块,能够显示实时时钟; 4. 要有时间设置按键部分; 5. 完成硬件电路的设计后,编写程序,实现时间和日期的显示等功能; 6. 调试程序,完成功能验证,写出完整的课程设计。 实验器材: 1.单片机最小系统:单片机(插座),晶振,电阻,电容,按键; 2.电源模块:自锁开关,LED灯,USB插座; 3.按键模块:按键; 4.1602显示模块:1602(排母),电位器,电容; 5.RTC模块:DS1302芯片(插座),晶振,CR2032电池(插座); 6.DIY小部件:漆包线,杜邦线,排针,排母,IC插座,电阻包,电容包,烙铁套装; 开始日期20XX 年 3 月 4 日完成日期20XX 年3 月 23 日

电子万年历设计 摘要:本系统是由单片机最小系统、电源模块、按键模块、LCD1602显示模块及RTC模块组成的电子万年历系统。通过时钟模块实时进行时间和日期的计数,进而传递给单片机处理,单片机再将其传递给LCD1602模块显示当前时间,另设有按键模块可以完成时间设置以及日期查询等功能操作。其设计简单,性能优良,时间设置可调,同时同步显示农历和星期,具有较强的实用性。本文先简要介绍每个模块的工作原理,再作整个系统电路的综合分析,说明该电子万年历的实现过程。 Summary:This system,electronic calendar system,is posed of SCM minimum system, power supply module, keys module, LCD1602 display module and RTC module .Through RTC module for counting the time and date, and then transmit to SCM for processing,and then send it to the LCD1602 module to show the current time, also operates key modules can be pleted time setting and operating date query function.Its simple design, excellent performance, adjustable time setting, synchronous display lunar calendar and week at the same time, has strong practicability.This paper first briefly introduces the working principle of each module, and then a prehensive analysis of the circuit.The last,illustrate the whole system implementation process of the electronic calendar. 关键词:万年历,计时,显示,农历 Keywords: calendar、timing、display、

多功能时钟(万年历)设计

多功能时钟(万年历) 设 计 报 告 专业电子信息科学与技术 班级13级电子专升本 姓名韩科峰 学号130522012 考勤成绩设计成绩 调试成绩报告成绩 总成绩

一、课题名称 多功能时钟(万年历)设计 二、内容摘要 美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。 关键词: 三、设计指标(要求); 1、显示时间、日期由按键选择显示(日期时间可调整)。 2、可设置闹钟功能; 3、制作PC机设置界面软件,由PC机可完成对时钟的各项设置 四、系统框图;

STC12C5A08S2 单片机 DS1302时钟模块 五、各单元电路设计、参数计算和元器件选择 4位共阴极数码管 按键

六、工作原理 DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。 “CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”

基于液晶显示的万年历-毕设论文

毕业设计(论文)报告题目基于液晶显示的万年历 系别 专业 班级 学生姓名 学号

指导教师 2013年4 月

基于液晶显示的万年历 摘要: 本设计应用AT89S52芯片作为核心,采用C语言进行编程,实现以下功能:小时、分、秒、年、月、日、星期的显示和实时温度检测。该设计的电子时钟系统由时钟电路、LCD显示电路、按键调整电路和温度检测电路四部分组成。使用时钟芯片DS1302完成时钟日期的功能,以LCD1602为显示器,同时利用温度传感器DS18B20测量周围环境温度,并且可以依靠按键随时对日期时间进行调整。我们共设计四个按键,一个模式键,也就是我们用来选定被修改的数字的,两个调整键,一个“加”键和一个“减”键,当按下模式键,选定要调整的数字的时候,“加”、“减”可以帮我们调到所需的状态,还有一个复位键,显示精度为1秒。设计还提供三位实时温度检测并显示,其显示精度为0.1℃。 关键词: AT89S52、时钟日历芯片DS1302、温度传感器DS18B20、LCD1602

目录 前言 (1) 第一章方案选择与万年历研究情况 (2) 1.1 方案选择 (2) 1.1.1时钟芯片选择 (2) 1.1.2键盘选择 (3) 1.1.3显示模块选择 (3) 1.2电子万年历的研究情况 (4) 第二章主要硬件描述 (5) 2.1 AT89S52 (5) 2.1.1主要性能 (5) 2.1.2引脚说明 (5) 2.2 LCM1602 (8) 2.2.1工作原理 (8) 2.2.2端口引脚第二功能 (9) 2.2.3管脚功能 (10) 2.3 芯片DS1302 (11) 2.3.1工作原理 (11) 2.3.2引脚功能及结构 (12) 2.4 数字温度传感器DS18B20 (12) 2.4.1DS18B20工作原理 (12) 2.4.2DS18B20 引脚定义 (13) 第三章硬件设计与实现 (14) 3.1 单片机最小系统的设计 (14) 3.2 时钟电路的设计 (15) 3.3 温度采集模块的设计 (15) 3.4 LCDM1602显示模块设计 (16) 第四章系统软件设计与实现 (17)

简单万年历设计

信电学院 电子信息工程专业CDIO一级项目项目设计说明书(2013/2014学年第一学期) 项目名称:简单万年历的设计 专业班级:电子信息工程 学生姓名: 学号: 指导教师: 设计周数:一周 设计成绩: 2013 年12 月29 日

目录 1项目设计目的及任务--------------------------------------------------------------2 2 设计方案--------------------------------------------------------------2 3 电路仿真与分析--------------------------------------------------------------9 4项目设计心得-------------------------------------------------------------17 5参考文献-------------------------------------------------------------17

1.项目设计目的及任务 用51单片机或52单片机为主体,设计并制作一台数字万年历。基本要求有时钟显示(时/分/秒);日期、星期显示,可设定月份;上电即可显示当前系统的时间该系统的设计电路是以 AT89C51单片机为核心控制器,其外围电路主要包括时钟模块,液晶模块,和与电脑主机通信模块等。通过 PC 机在 Internet 上同步时间,整个系统使用C语言进行编程,实现其设计的各种功能。输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。实用电子时钟是一个时间控制系统,既能作为一般的时间显示器,同时可以根据需要扩展其功能。系统上电自检后,实时实现小时、分钟、秒以及日历的显示等指示信息的显示,通过按键可实现校对时间等功能。 2 设计方案 2.1总方案设计:设计简单万年历一般有三个可行方案,方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。方案二:用可编程逻辑器件(PLD)实现。这种方案与前一种相比,可靠性增加,同时可以很好的完成时钟的功能。同时这种方案只能选用数码管显示,显示的效果不够理想,无法很好的完成扩展功能的要求。同时,系统的灵活性不够。方案三:采用单片机作为系统的控制核心。随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。我们选用的是方案三。因为单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:

电子万年历设计

课程论文论文题目基于单片机的电子万年历设计 课程名称单片机原理及接口技术 专业年级 2014级自动化3班 学生姓名孙宏远贾腾飞 学号 2016年12 月3 日

摘要: 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。。 关键词:AT89C51单片机,DS1602时钟芯片,LCD1602显示屏。串口通信。 一:引言 本设计的基于单片机控制的电子万年历,具有年、月、日、星期、时、分、秒的显示等功能,实现过程就是由主控制发送信息给DS1302时钟芯片再由时钟芯片反馈给单片机,再由主控制器传送给LCD1602显示屏显示信息。并且可以在键盘设置模块输入修改时间,当键盘设置时间、日期时,单片机主控制根据输入信息,通过串口通信传送给DS1302时钟芯片,DS1302芯片读取当前新信息产生反馈传送给单片机,然后单片机根据控制最后输送显示信息到LCD1602液晶显示屏模块上显示。 二:硬件设计: 2.0.硬件的设计总框图 2.1 DS1032时钟电路 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。芯片如图。 DS1302的内部主要由移位寄存器、指令和控制逻辑、振荡分频电路、实时时钟以及RAM组成。每次操作时,必须首先把CE置为高电平。再把提供地址和命令信息的8位装入移位寄存器。数据在SCLK的上升沿串行输入。无论是读周期还是写周期发生,也无论传送方式是单字节还是多字节,开始8位将指定内部何处被进行访问。在开始 8个时钟周期把含有地址信息的命令字装入移位寄存器之后。紧随其后的时钟在读操作时输出数据。 2.2 LCD1602与AT89C52的引脚接线 LCD1602采用总线式与单片机相连,AT89c52的P1口直接与液晶模块的数据总线D0~D7相连;P2 口的0,1,2脚分别与液晶模块的RS、RW、E脚相连。滑动变阻器用于调整液晶显示的亮度。电路如图

用DS1302与LCD1602可调数字万年历课程设计

数字开发与实践 课 程 设 计 题目:用DS1302与LCD1602 设计可调式电子日历时钟 班级: 姓名: 学号: 学院: 二O一二年六月五日

用DS1302与LCD1602设计 的可调式电子日历时钟 一、总体设计 1.1、设计目的 为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与DS1302 设计可调式电子日历时钟。 1.2、设计要求 (1)显示:年、月、日、时、分、秒和星期; (2)设置年、月、日、时、分、秒和星期的初始状态; (3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期; 完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内 容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。 控制程序的编写等。 备注:本程序另外添加了每到上午8:10和下午2:10的闹钟提醒功能。 1.3、系统基本方案选择和论证 1.3.1、单片机芯片的选择方案 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。 方案二: 采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全

兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。但造价较高。 1.3.2 、显示模块选择方案和论证: 方案一: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。所以不用此种作为显示。 方案二: 采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。所以也不用此种作为显示。 方案三: 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。LCD1602可实现显示2行十六个字符。 1.3.3、时钟芯片的选择方案和论证: 方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。 方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、星期、月、年以及闰年补偿的年进行计数,而且精度高,31*8位的RAM做为数据暂存区,工作电压范围为2.5V~5.5V,2.5V时耗电小于300nA。 1.3.4、电路设计最终方案决定 综上各方案所述,对此次作品的方案选定:采用80C51作为主控制系统;DS1302提供时钟;LCD1602液晶带汉字库显示屏作为显示部分。

万年历时钟电路设计报告word精品

阿坝师范学院 万年历设计报告姓名:李朝林 学号:20156045 班级:电子信息工程02班

阿坝师范学院物理与电子科学系 目录 1?设计任务与要求 (2) 2?主要器件讨论与选择 (2) 3.设计原理 (3) 4?单元电路设计 (3) 4.1显示电路 (3) 4.2时分秒设计............................................. .4 4.3星期天数设计 (5) 4.4闰年平年判断电路 (6) 4.5二月与大小月判断电路 (9) 4.6天数置数信号 (10) 4.7校正电路 (11) 4.8秒脉冲电路 (11) 5.完整的电路设计原理图 (12) 6.电路调试过程与方法 (13) 7.实验心得体会与总结 (13) 1. 设计任务与要求 用数字集成电路设计万年历电子钟逻辑电路 指标如下: 1)设计一个能直接显示“年”“月”“日”、“星期”、“时”、 “分”、“秒”的十进制万年历时钟显示器。 2)具有校时的功能,可分别对“年”、“月”、“日”、“星期”、 “时” “分” “秒”进行单独校时。 2. 主要器件讨论与选择 主要器件中显示模块选用74SEG_BCD数码管显示8421bcd码,计数模块统一选用74LS160作为计数芯片;74LS160具有同步置数异步清零功能,同时在有时钟脉冲的情况下进行加计数,无论采用同步置数还是异步清零都可以实现60s、60m、24h置数清零功能。因此

[在此处键入] 数字电子技术万年历设计报告 74LS160是一个不错的选择。本次仿真通过 74LS160作为时分秒年月 日星期置数,通过秒计数的置数信号作为分计时的脉冲 cp ,取反作 为分计时的使能端,依次向高位进位达到显示目的。 通过闰年、平年、大月、小月、二月的判断电路来控制天计数的 多少。 校时电路,校时选用74LS74触发器作为跳变信号;74LS244存储 信号。起作用的只有一个,当校时有效时计时电路无效。 3. 设计原理 原理图如下: 万年加时种星示器框采禺P 4. 单元电路设计 4.1显示电路 振荡器 呈期廿数 楼时电路? 译码显示电路疋* 千 百 十个

万年历阴历星期温度

#include #include #include #define uchar unsigned char #define uint unsigned int sbit CLK=P1^1; //DS1302时钟线 sbit SDA=P1^0; // DS1302数据线 sbit RST=P1^2; //DS1302复位线 sbit RS=P2^0;//数据/指令选择端口 sbit RW=P2^1;//读写端口 sbit EN=P2^2;//使能端口 sbit K1=P3^4; // 选择 sbit K2=P3^5; // 加 sbit K3=P3^6; // 减 sbit K4=P3^7; // 确定 uchar tCount=0;//一年中每个月的天数,2月的天数由年份决定 uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31}; uchar *WEEK[]={"sun","mon","tus","wen","thu","fri","sat"};//周日,周一到周六 uchar LCD_DSY_BUFFER1[]={"Date 00-00-00 "}; //LCD显示缓冲 uchar LCD_DSY_BUFFER2[]={"Time 00-00-00 "}; uchar DateTime[7]; //所读取的日期时间 char Adjust_Index=-1; //当前调节的时间:秒,分,时,日, uchar Change_Flag[]="-MHDM-Y"; uchar Read_LCD_State();//读LCD状态 void LCD_Busy_Wait();//判忙 void Write_LCD_Data(uchar dat);//写数据 void Write_LCD_Command(uchar cmd);//写命令 void Init_LCD();//LCD初始化 void Set_LCD_POS(uchar p);//设置显示位置 void Display_LCD_String(uchar p,uchar *s);//写字符串 void DelayMS(uint x)//延时 { uchar i; while(x--) for(i=0;i<120;i++); } uchar Read_LCD_State()//读LCD状态 { uchar state;

lcd数显温度万年历电波钟

外观尺寸:29cm(宽)*18.5cm(高) 可挂可摆,背面有挂孔,可挂在墙上,也可以安装随机配送的支架摆放在台面上。 电子说明书地址:https://www.doczj.com/doc/b112703432.html,/item.htm?spm=a1z09.5.0.4 0&id=16362908718 功能特点: 1、时间显示:时:分:秒,12/24小时制可选 2、日历显示:日/月 3、星期显示:英文简写 4、温度显示:摄氏或华摄,范围:0℃-50℃(32℉-122℉),分辨率:0.1℃。 5、闹铃功能:可设置1个闹铃时间。 6、特殊日期提醒功能:可设置三个特殊日期提醒。 使用电源:两节AA电池(不配送电池),超省电,两节电池可使用一年以上。 使用说明: 一、信号自动同步: 当时钟正确装上电池后,稍等几秒,自动开始接收日本发射的无线电校时信号,接收过程中屏幕右上角显示一个闪动的信号接收塔标识。当接收到正确的时间信号后,接收塔标识停止闪动并自动同步时间和日历信息,时钟每天会定时进行接收,无须人工干预。如果接收不成功,时钟仍可以作为一个高精度石英钟使用。 时钟在接收信号的过程(接收塔标识闪动)中无法进行其他功能的操作,如果需要进行其它设置或取消接收,须按下‘+’键退出接收状态。为了达到最好的接收效果,应将时钟远离其它用电器至少在1-2米以上,并可以适当转动时钟位置以获取最佳接收效果。 二、信号手动同步: 在正常的时钟显示模式,长按‘+’键,强制进入信号接收状态,此时收塔标识闪动,接收过程与自动同步一样。 三、手动设定时钟、日历: 在正常的时钟显示模式,长按‘CLK/CAL’键,进入时间日历设置界面,当前设置项目闪动,通过短按‘+,-’键调整数值,再短按‘CLK/CAL’确认并进入下一设置项目。设置项目顺序:12/24时制—小时—分钟—年—月—日—时区。 四、每日闹钟设置: 在正常的时钟显示模式,长按‘ALARM’键,进入闹铃设置界面,通过短按按‘+,-’键输入每天的闹铃时间,最后按‘ALARM’键确认。 在正常的时钟显示模式,短按‘-’键可以开启和关闭闹铃功能,当闹铃响时,按任意键都可以关闭闹铃。 五、特殊日期提醒设置:

相关主题
文本预览
相关文档 最新文档