时钟显示程序

合集下载

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词:电子钟 AT89C52 硬件设计软件设计目录一、数字电子钟设计任务、功能要求说明及方案介绍 (4)1.1 设计课题设计任务 (4)1.2 设计课题的功能要求说明 (4)1.3 设计课的设计总体方案介绍及工作原理说明 (4)二、设计课题的硬件系统的设计 (5)2.1硬件系统各模块功能简要介绍 (5)2.1.1 AT89C52简介 (5)2.1.2 按键电路 (6)三、设计课题的软件系统的设计 (6)3.1 使用单片机资源的情况 (6)3.2 软件系统个模块功能简要介绍 (7)3.3 软件系统程序流程框图 (7)3.4 软件系统程序清单 (7)四、设计课题的设计结论、仿真结果、误差分析 (9)4.1 设计结论及使用说明 (9)4.2 仿真结果 (10)结束语 (12)参考文献 (12)附录 (13)附录A:程序清单 (13)一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

LCD1602时钟显示以及修改程序

LCD1602时钟显示以及修改程序
writeCmd(addr1);
j=dis_buff[i]+'0';
writeDat(j);
i++;
}
dspStr(0,2,":");
i=2;
for (addr1=0x83;addr1<0x85;addr1++)
{
writeCmd(addr1);
dis_buff[3]++;
if( dis_buff[3]>=10)
{
dis_buff[3]=0;
if (dis_buff[2]<5)
dis_buff[2]++;
else dis_buff[2]=0;
}
#include"reg52.h"
#include <intrins.h>
sbit E =P2^5;
sbit RW=P2^6;
sbit RS=P2^7;
sbit alarm=P3^7;
unsigned char data dis_buff[10];
unsigned char hour,min,sec;
j=dis_buff[i]+'0';
writeDat(j);
i++;
}
}
void key_incsec( )//秒初始值设置
{
if (key_0==2)//秒加一
{
ji=0;
addr4=0x87;
dis_buff[5]++;
if( dis_buff[5]>=10)

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序 /*8位数码管显示时间格式 055000 标示05点50分00秒S1 用于小时加1操作S2 用于小时减1操作S3 用于分钟加1操作S4 用于分钟减1操作*/#includereg52.hsbit KEY1=P3^0; //定义端口参数sbit KEY2=P3^1;sbit KEY3=P3^2;sbit KEY4=P3^3;sbit LED=P1^2; //定义指示灯参数code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管09unsigned char StrTab[8]; //定义缓冲区unsigned char minute=19,hour=23,second; //定义并初始化为12:30:00void delay(unsigned int cnt){while(cnt);}/********************************************************** ********//* 显示处理函数 *//********************************************************** ********/void Displaypro(void){StrTab[0]=tab[hour/10]; //显示小时StrTab[1]=tab[hour%10];StrTab[2]=0x40; //显示StrTab[3]=tab[minute/10]; //显示分钟StrTab[4]=tab[minute%10];StrTab[5]=0x40; //显示StrTab[6]=tab[second/10]; //显示秒StrTab[7]=tab[second%10];}main(){TMOD |=0x01; //定时器0 10ms inM crystal 用于计时TH0=0xd8; //初值TL0=0xf0;ET0=1;TR0=1;TMOD |=0x10; //定时器1用于动态扫描 TH1=0xF8; //初值TL1=0xf0;ET1=1;TR1=1;EA =1;Displaypro(); //调用显示处理函数while(1){if(!KEY1) //按键1去抖以及动作{delay(10000);if(!KEY1){hour++;if(hour==24)hour=0; //正常时间小时加1Displaypro();}if(!KEY2) //按键2去抖以及动作 {delay(10000);if(!KEY2){hour;if(hour==255)hour=23; //正常时间小时减1 Displaypro();}}if(!KEY3) //按键去抖以及动作{delay(10000);if(!KEY3){minute++;if(minute==60)minute=0; //分加1Displaypro();}if(!KEY4) //按键去抖以及动作{delay(10000);if(!KEY4){minute;if(minute==255)minute=59; //分减1Displaypro();}}}}/********************************************************** ********//* 定时器1中断 *//********************************************************** ********/void time1_isr(void) interrupt 3 using 0 //定时器1用来动态扫描static unsigned char num;TH1=0xF8; //重入初值TL1=0xf0;switch (num){case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描case 1:P2=1;P0=StrTab[num];break;case 2:P2=2;P0=StrTab[num];break;case 3:P2=3;P0=StrTab[num];break;case 4:P2=4;P0=StrTab[num];break;case 5:P2=5;P0=StrTab[num];break;case 6:P2=6;P0=StrTab[num];break;case 7:P2=7;P0=StrTab[num];break;default:break;}num++; //扫描8次,使用8个数码管if(num==8)num=0;}/******************************************************************//* 定时器0中断 *//********************************************************** ********/void tim(void) interrupt 1 using 1{static unsigned char count; //定义内部局部变量TH0=0xd8; //重新赋值TL0=0xf0;count++;switch (count){case 0:case 20:case 40:case 60:case 80:Displaypro();break; //隔一定时间调用显示处理case 50:P1=~P1;break; //半秒 LED 闪烁default:break;}if (count==100){count=0;second++; //秒加1 if(second==60){second=0;minute++; //分加1 if(minute==60){minute=0;hour++; //时加1 if(hour==24)hour=0;}}}}。

VHDL语言写的电子钟程序(XTS江科大)

VHDL语言写的电子钟程序(XTS江科大)

实验目的:实现时钟显示,1——12——1——11——0——1循环,时钟调时,闹铃,闹铃定时等功能。

程序和注释:<code1.vhd>LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;entity code1 isport (clk : in std_logic;reset : in std_logic;shi_key : in std_logic;fen_key : in std_logic;set_mode_key:in std_logic;en:out std_logic_vector(7 downto 0);y :out std_logic_vector(7 downto 0);beep_s:out std_logic);end code1 ;ARCHITECTURE code2 of code1 issignal a:integer:=0; --ji shisignal d:integer:=0; --xian shisignal b,b0,b1,b3,b4,b5,b6:std_logic:='1';signal e:std_logic:='0';--xian shisignal c:integer:=9; --miao geweisignal ch:integer:=5; --miao shiweisignal eight,eight1:integer:=0; --8 ge shu ma guansignal fg:integer:=9; --fen ge weisignal fs:integer:=5; --fen shi weisignal sg:integer:=1; --shi ge weisignal ss:integer:=1; --shi shi weisignal p:std_logic:='0';--zantingsignal set_mode :std_logic_vector(1 downto 0);signal beep_m1,beep_m2,beep_h1,beep_h2:integer:=1;signal AM_PM:std_logic:='0';signal beep_count:integer:=0;signal beep_clk: std_logic:='1';signal c1,c2,c3,c4,c5,c6:integer:=0;component set0port ( set_clk:in std_logic;m_key:in std_logic;h_key:in std_logic;mode_key:in std_logic;mode:out std_logic_vector(1 downto 0);set_out_m:out std_logic;set_out_h:out std_logic;beep_key_m:out std_logic;beep_key_h:out std_logic);end component;beginprocess(clk)beginif clk'event and clk='1' thend<=d+1;beep_count<=beep_count+1;if set_mode="01" thenb0<=b3;b1<=b4;elsea<=a+1;if a=30000000 then b<=not b;b1<=not b1;b0<=not b0;a<=0;end if;end if;if beep_count=15000000 thenbeep_clk<=not beep_clk;beep_count<=0;-- if beep_count=35000000 then beep_clk<=not beep_clk;beep_count<=0;end if;end if;if d=5000 then e<=not e;d<=0;end if;end if;end process;process(e)--variable c1,c2,c3,c4,c5,c6:integer:=0;beginif e'event and e='1' thenif set_mode="00"or set_mode="01" thenc1<=c;c2<=ch;c3<=fg;c4<=fs;c5<=sg;c6<=ss;end if;if set_mode="10" thenc1<=0;c2<=0;c3<=beep_m1;c4<=beep_m2;c5<=beep_h1;c6<=beep_h2;--c3<=3;--c4<=2;--c5<=5;--c6<=0;end if;case eight iswhen 0 =>en<="11111110";case c1 iswhen 0 => y<="11000000"; when 1 => y<="11111001"; when 2 => y<="10100100"; when 3 => y<="10110000"; when 4 => y<="10011001"; when 5 => y<="10010010"; when 6 => y<="10000010"; when 7 => y<="11111000"; when 8 => y<="10000000"; when 9 => y<="10010000"; when others =>y<="11000000"; end case;eight<=1;when 1 =>en<="11111101";case c2 iswhen 0 => y<="11000000"; when 1 => y<="11111001"; when 2 => y<="10100100";when 3 => y<="10110000"; when 4 => y<="10011001"; when 5 => y<="10010010"; when others =>y<="11000000"; end case;eight<=2;when 2 =>en<="11111011";y<="10111111";eight<=3;when 3 =>en<="11110111";case c3 iswhen 0 => y<="11000000"; when 1 => y<="11111001"; when 2 => y<="10100100"; when 3 => y<="10110000"; when 4 => y<="10011001"; when 5 => y<="10010010"; when 6 => y<="10000010"; when 7 => y<="11111000"; when 8 => y<="10000000"; when 9 => y<="10010000"; when others =>y<="11000000"; end case;eight<=4;when 4 =>en<="11101111";case c4 iswhen 0 => y<="11000000"; when 1 => y<="11111001"; when 2 => y<="10100100"; when 3 => y<="10110000"; when 4 => y<="10011001"; when 5 => y<="10010010"; when others =>y<="11000000"; end case;eight<=5;when 5 =>en<="11011111";y<="10111111";eight<=6;when 6 =>en<="10111111";case c5 iswhen 0 => y<="11000000"; when 1 => y<="11111001"; when 2 => y<="10100100"; when 3 => y<="10110000"; when 4 => y<="10011001"; when 5 => y<="10010010"; when 6 => y<="10000010"; when 7 => y<="11111000"; when 8 => y<="10000000"; when 9 => y<="10010000"; when others =>y<="11000000"; end case;eight<=7;when 7 =>en<="01111111";case c6 iswhen 0 => y<="11000000"; when 1 => y<="11111001"; when others =>y<="11000000"; end case;eight<=0;when others => eight<=0;end case;end if ;end process;miao:process(b,reset)beginif reset='0' thenc<=0;ch<=0;elseif b'event and b='0' thenif c=9 thenc<=0;elsec<=c+1;end if;if ch=5 and c=9 thench<=0;elseif c=9 thench<=ch+1;end if;end if;end if;end if;end process;fen:process(b0,reset,ch,c,b3)beginif reset='0' thenfg<=0;fs<=0;elseif b0'event and b0='0' thenif (((ch=5)and(c=9)) or (set_mode="01" and b3='0'))then if fg=9 thenfg<=0;elsefg<=fg+1;end if;if fs=5 and fg=9 thenfs<=0;elseif fg=9 thenfs<=fs+1;end if;end if;end if;end if;end if;end process;shi:process(b1,reset,fg,fs,ch,c,b4)beginif reset='0' thensg<=0;ss<=0;elseif b1'event and b1='0' thenif ((c=9) and (ch=5) and (fg=9) and (fs=5))or (set_mode="01" and b4='0') then--if ((ss=1 and sg=1) or sg=9) then-- sg<=0;--else-- sg<=sg+1;--end if;if sg=9 thensg<=0;elsesg<=sg+1;end if;if (ss=1 and sg=1 and AM_PM='0')thenss<=0;sg<=0;AM_PM<=not AM_PM;elseif sg=9 thenss<=ss+1;end if;end if;if (ss=1 and sg=2 and AM_PM='1')thenss<=0;sg<=1;AM_PM<=not AM_PM;elseif sg=9 thenss<=ss+1;end if;end if;end if;end if;end if;end process;set_time:set0 port map( set_clk=>clk,m_key=>fen_key,h_key=>shi_key,mode_key=>set_mode_key,mode=>set_mode,set_out_m=>b3,set_out_h=>b4,beep_key_m=>b5,beep_key_h=>b6);beep_set_fen:process(set_mode_key,b5)beginif b5'event and b5='0' thenif set_mode="10" thenif b5='0' thenif beep_m1=9 thenbeep_m1<=0;elsebeep_m1<=beep_m1+1;end if;if beep_m2=5 and beep_m1=9 thenbeep_m2<=0;elseif beep_m1=9 thenbeep_m2<=beep_m2+1;end if;end if;end if;end if;end if;end process;beep_set_shi:process(set_mode_key,b6)beginif b6'event and b6='0' thenif set_mode="10" thenif b6='0' thenif ((beep_h2=1 and beep_h1=1) or beep_h1=9) thenbeep_h1<=0;elsebeep_h1<=beep_h1+1;end if;if beep_h2=1 and beep_h1=1 thenbeep_h2<=0;elseif beep_h1=9 thenbeep_h2<=beep_h2+1;end if;end if;end if;end if;end if;end process;beep:process(e)beginif e'event and e='1' thenif beep_m1=fg thenif beep_m2=fs thenif beep_h1=sg thenif beep_h2=ss thenbeep_s<=beep_clk;end if;end if;end if;elsebeep_s<='1';end if;end if;end process;end code2;<set0.vhd>LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;entity set0 isport ( set_clk:in std_logic;m_key:in std_logic;h_key:in std_logic;mode_key:in std_logic;mode:out std_logic_vector(1 downto 0);set_out_m:out std_logic;set_out_h:out std_logic;beep_key_m:out std_logic;beep_key_h:out std_logic);end set0;ARCHITECTURE set1 of set0 issignal s1:std_logic_vector (1 downto 0);beginprocess(mode_key) --模式设定beginif mode_key'event and mode_key='1' thens1<=s1+'1';mode<=s1;if s1="10" thens1<="00";end if;end if;end process;process(m_key,set_clk) --传递调时按键信号beginif set_clk'event and set_clk='1' then-- if s1="01" thenset_out_m<=m_key;-- else-- set_out_m<='1';-- end if;-- if s1="10" thenbeep_key_m<=m_key;-- else-- set_out_m<='1';-- end if;end if;end process;process(h_key,set_clk) --传递调时按键信号beginif set_clk'event and set_clk='1' then-- if s1="01" thenset_out_h<=h_key;-- else-- set_out_h<='1';-- end if;-- if s1="10" thenbeep_key_h<=h_key; -- else-- beep_key_h<='1';-- end if;end if;end process;end set1;引脚:clk input PIN_31en[7] output PIN_226 en[6] output PIN_230 en[5] output PIN_231 en[4] output PIN_232 en[3] output PIN_221 en[2] output PIN_222 en[1] output PIN_223 en[0] output PIN_224y[7] output PIN_233 y[6] output PIN_234 y[5] output PIN_235 y[4] output PIN_236 y[3] output PIN_237 y[2] output PIN_238 y[1] output PIN_239 y[0] output PIN_240实验中的注意的问题:1、数码管动态显示时,要对时钟信号进行分频,而且,分频计数最好在5000个时钟信号以上,否则数码管显示的可能是模糊的数字8;2、时间计数进程中的if语句要进行嵌套,否则,计数的更新会有一秒的滞后。

数字时钟代码

数字时钟代码

数字时钟代码1. 介绍数字时钟是一种常见的显示时间的装置,它通过数字显示屏显示当前的小时和分钟。

本文档将介绍如何编写一个简单的数字时钟代码。

2. 代码实现以下是一个基本的数字时钟代码实现示例:import timewhile True:current_time = time.localtime()hour = str(current_time.tm_hour).zfill(2)minute = str(current_time.tm_min).zfill(2)second = str(current_time.tm_sec).zfill(2)clock_display = f"{hour}:{minute}:{second}"print(clock_display, end="\r")time.sleep(1)代码说明:- `time.localtime()` 函数返回当前时间的结构化对象,包括小时、分钟和秒等信息。

- `str(current_time.tm_hour).zfill(2)` 将小时转换为字符串,并使用 `zfill()` 方法填充到两位数。

- `str(current_time.tm_min).zfill(2)` 和`str(current_time.tm_sec).zfill(2)` 同理处理分钟和秒。

- 使用 f-string 格式化字符串 `clock_display`,将小时、分钟和秒显示为 `` 的形式。

- `print(clock_display, end="\r")` 使用 `\r` 实现覆盖打印,使得时钟在同一行连续显示。

- `time.sleep(1)` 让程序每隔一秒更新一次时间。

请注意,上述代码需要在支持 Python 的环境中运行。

3. 结束语通过以上的代码实现,我们可以编写一个简单的数字时钟。

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。

二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。

2.软件设计通过C语言编写单片机程序,用于实现时钟功能。

3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。

(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。

(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。

(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。

三、实验结果经过调试,电子时钟的各项功能都能够正常实现。

在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。

在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。

四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。

通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。

在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。

多功能时钟流程图

多功能时钟流程图

多功能时钟‎流程图一. 功能确认● 时钟功能:1. 时钟显示小‎时和分钟2. 用户可以通‎过按键调整‎时钟的时间‎3. 无论当前时‎钟是否在前‎台显示,时钟始终是‎运行的。

● 定时闹铃功‎能:1. 用户可以通‎过按键设置‎闹铃时间(小时和分钟‎),设置完成后‎可以按确定‎键退出设置‎。

2. 当系统时钟‎的时间等于‎预设的闹铃‎时间时,系统蜂鸣器‎响5秒钟。

3. 用户可以设‎置两个闹铃‎。

● 秒表功能:1. 用户可以通‎过按键进入‎秒表功能,也可以退出‎秒表状态。

2. 秒表高2位‎显示秒,低2位显示‎百分之一秒‎。

3. 可以通过按‎键暂停、(继续)运行秒表,可以通过按‎键对秒表清‎零。

二. 状态分析及‎模块分割根据以上的‎分析,系统共有三‎个大的功能‎:时钟、设置定时、秒表,各个功能之‎间可以通过‎按键来切换‎,且各个功能‎内部仍需要‎使用按键来‎处理,故可以考虑‎将系统定义‎为三个状态‎(statu ‎s ):时钟状态、设置定时状‎态、秒表状态。

显然,同一个按键‎在不同状态‎下的功能是‎不一样的。

这样,在某种状态‎下,按下某个按‎键,代表唯一确‎定的含义。

这种处理方‎法可以称为‎“状态—按键”法。

这样我们可‎以把程序对‎应地分成以‎下三个任务‎模块。

这个流程就‎可以作为主‎流程(main ()函数),当然,A 、B 、C 三框内部‎的流程仍(处理时钟状‎态下的所有‎事务)(处理设置闹‎铃状态下的‎所有事务)(处理秒表状‎态下的所有‎事务)有‎待于细化。

三.详细设计A框内部要‎处理的事务‎见第一部分‎:功能确认。

在此,为了完成时‎钟调整功能‎,我们可以定‎义K ey_‎2为小时调‎整键,Key_3‎为分钟调整‎键,每次按下键‎,小时数或分‎钟数加1。

当然,当用户没有‎按键的时候‎,我们还得经‎常保持显示‎屏上的时间‎刷新。

A框:时钟状态下‎的处理流程‎:B框要处理‎的功能是设‎置定时闹铃‎的事务,这里需要预‎设闹铃时间‎,同样可以定‎义Key_‎2为小时预‎设键,Key_3‎为分钟预设‎键,而Key_‎1则负责状‎态切换,当我们预设‎好时间之后‎,按下Key‎_1,就算完成了‎闹铃预设,让系统离开‎当前状态,转到秒表状‎态上去。

单片机电子时钟设计程序

单片机电子时钟设计程序

单片机电子时钟设计程序
1.引用头文件和定义全局变量
首先需要引用相应的头文件,例如`reg52.h`,并定义全局变量用于
存储时间、闹钟时间以及其他相关参数。

2.初始化时钟
在主函数中,首先进行时钟的初始化。

这包括设置定时器和中断相关
的寄存器,以及初始化显示屏和按钮等外设。

3.时间更新
编写一个中断服务函数,用于根据定时器的中断来更新时间。

在该中
断服务函数中,需要将全局变量中的时间进行递增,并考虑到分钟、小时、日期和星期等的进位和换算。

4.按钮输入
设置一个子函数用于读取按钮输入,并根据按钮的状态来进行相应的
操作,比如切换时钟显示模式、设置闹钟等。

5.显示时间
编写一个子函数用于将时间信息显示在数码管上。

这需要先将时间信
息转换为数码管的显示格式,然后通过IO口输出控制数码管的显示。

6.闹钟设置
使用按钮输入的功能,可以设置闹钟时间和开关闹钟功能。

当闹钟时
间到达时,可以通过控制蜂鸣器发声或点亮LED等方式来进行提醒。

7.主函数
在主函数中,循环执行按钮输入的检测和相应操作,以及时间的更新和显示等功能。

可以通过一个状态机来控制整个程序的流程。

以上是一个简要的单片机电子时钟设计程序的概述。

实际的程序设计过程中,还需要考虑到各个模块之间的交互、错误处理、电源管理以及代码的优化等细节问题。

具体的程序实现可以根据具体需求和硬件平台的差异进行适当的修改和扩展。

LED数码管时钟程序

LED数码管时钟程序
P0=wema[0];
delay(10);
P2=duma[hour_l];
P0=wema[1];
delay(10);
}
//---------------------主函数--------------------------------
/*void alarm_clock() //闹钟子函数-变频发声
LED数码管时钟程序
/***使用定时器方式,数码管显示24小时“00-00-00”(增加进入对时功能)
P1为按键,P2为段选,P0为位选,{闹钟暂时不可调待完善})***/
#include <reg52.h>
#define uchar unsigned char /*宏定义 */
#define uint unsigned int /*宏定义 */
uchar hour,hour_h,hour_l; /*定义小时,小时的高位,小时的低位*/
uchar min,min_h,min_l; /*分*/
uchar sec,sec_h,sec_l; /*秒*/
uchar int_num; /*定时溢出作用标号*/
sbit key_secadd=P1^1; /*定义了 p1.1为秒增1键,用在调时中断里*/
sbit bell=P1^5; //小喇叭
void delay(uchar time); /*延时子函数声明*/
void display(); /*显示子函数声明*/
void inter_init(); /*定时器初始化子函数声明*/
void time24();
/****专用数码管显示表***/
TL0=(65535-50000)%256;

时钟显示器电路课程设计

时钟显示器电路课程设计

时钟显示器电路课程设计一、课程目标知识目标:1. 学生能够理解时钟显示器电路的基本原理,掌握时钟芯片的工作机制。

2. 学生能够运用已学电子元件知识,分析时钟显示器电路的组成部分及功能。

3. 学生能够解释时钟显示器电路中各元件参数对显示效果的影响。

技能目标:1. 学生能够运用绘图工具,设计并绘制时钟显示器电路图。

2. 学生能够根据电路图,正确焊接和调试时钟显示器电路。

3. 学生能够编写简单的程序,实现时钟显示器的基本功能。

情感态度价值观目标:1. 学生在课程学习中,培养对电子技术的兴趣,提高科技创新意识。

2. 学生通过团队协作完成项目,培养沟通协作能力和团队精神。

3. 学生在解决实际问题时,能够树立正确的价值观,关注工程实践中的道德与法律规范。

课程性质:本课程为电子技术实践课程,以项目式教学为主,注重培养学生的动手实践能力和创新能力。

学生特点:学生已具备基本的电子元件知识和电路原理,有一定的编程基础,喜欢动手实践,善于团队协作。

教学要求:教师应引导学生运用所学知识,通过项目实践,提高学生的电子技术水平,注重培养学生的创新能力和实际操作能力。

同时,关注学生的情感态度价值观培养,使学生在掌握技能的同时,形成良好的职业素养。

教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. 电路原理:回顾已学的数字电路基础知识,重点讲解时钟芯片的工作原理,包括时钟信号产生、分频、计数等功能。

教材章节:第二章“数字电路基础”、第三章“时钟信号产生与控制”2. 电路设计:介绍时钟显示器电路的组成部分,分析各元件的功能和选型依据,指导学生绘制电路图。

教材章节:第四章“显示器件及其应用”、第六章“电路设计与绘制”3. 焊接与调试:讲解焊接技巧,指导学生进行时钟显示器电路的焊接和调试,确保电路正常运行。

教材章节:第七章“焊接技术与工艺”、第八章“电路调试与故障排除”4. 程序编写:结合时钟芯片手册,编写简单的程序,实现时钟显示器的实时显示功能。

51单片机数码管显示时钟程序

51单片机数码管显示时钟程序

#include〈reg52.h〉//#include#include<intrins。

h〉#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;sbit key2=P3^5;sbit key3=P3^6;sbit beep=P2^3;unsigned code table[]={0x3f ,0x06 ,0x5b , 0x4f ,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f ,0x77 ,0x7c,0x39 , 0x5e , 0x79 ,0x71};uchar num1,num2,s,s1,m,m1,f,f1,num,numf,nums,dingshi;uchar ns,ns1,nf,nf1,numns,numnf;void delay(uint z);void keyscan ();void keyscan1 ();void alram();void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1); void display0(uchar nf,uchar nf1,uchar ns,uchar ns1);void main(){TMOD=0x01;//设定定时器0工作方式1TH0=(65536—46080)/256 ;TL0=(65536—46080)%256 ;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0中断numns=12;numnf=0;while(1){if(dingshi==0){keyscan ();display(m,m1,f,f1,s,s1);alram();}else{keyscan1 ();display0(nf,nf1,ns,ns1);}}}void keyscan (){if(key1==0){delay(10);if(key1==0)nums++;if (nums==24)nums=0;while(!key1);display(m,m1,f,f1,s,s1);}if(key2==0){delay(10);if(key2==0)numf++;if (numf==60)numf=0;while(!key2);display(m,m1,f,f1,s,s1);}if(key3==0){delay(10);if(key3==0){dingshi=~dingshi;while(!key3)display(m,m1,f,f1,s,s1);}}/*if(key4==0){delay(10);if(key4==0){flag=1;while(!key4);display(m,m1,f,f1,s,s1);}}*/}void keyscan1(){if(key1==0){delay(10);if(key1==0)numns++;if (numns==24)numns=0;while(!key1);// display(nf,nf1,ns,ns1);}if(key2==0){delay(10);if(key2==0)numnf++;if (numnf==60)numnf=0;while(!key2);// display(nf,nf1,ns,ns1);}if(key3==0){delay(10);if(key3==0){dingshi=0;while(!key3);// display(m,m1,f,f1,s,s1);}}}void alram(){if((numnf==numf)&&(numns==nums))beep=0;if(((numnf+1==numf)&&(numns==nums))&&(dingshi==0))//一分钟报时提示beep=1;}void display0(uchar nf,uchar nf1,uchar ns,uchar ns1)//闹钟显示函数{nf=numnf%10;nf1=numnf/10;ns=numns%10;ns1=numns/10;/*wela=1;P0=0xc0;//送位选数据wela=0;P0=0xff;*/dula=1;P0=table[ns1];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[ns]|0x80;dula=0;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[nf1];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[nf];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);}void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1) //时间显示{dula=1;P0=table[m1];//秒位第1位dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=table[m];// 秒位第2位dula=0;P0=0xff;wela=1;wela=0;delay(1);dula=1;P0=table[s1]; //时位第一位dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[s]|0x80;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[f1];//分位第一位dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[f]|0x80;dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);}void T0_timer() interrupt 1{TH0=(65536—46080)/256 ;TL0=(65536—46080)%256 ;num2++;if(num2==20){num++;num2=0;m=num%10;m1=num/10;f=numf%10;f1=numf/10;s=nums%10;s1=nums/10;if(num==59){num=0;numf++;if(numf==59){numf=0;nums++;}if (nums==24)nums=0;}}}void delay(uint z){uint x,y;for(x=110;x〉0;x—-)for(y=z;y>0;y—-);}。

电脑桌面时钟的代码

电脑桌面时钟的代码

电脑桌面时钟的代码
以下是一个使用Python编写的简单桌面时钟的代码示例。

这个程序使用了tkinter库来创建一个图形用户界面(GUI),并使用time库来获取和显示当前时间。

python复制代码
import tkinter as tk
import time
def time_now():
current_time = time.strftime('%H:%M:%S') clock.config(text=current_time)
clock.after(1000, time_now)
root = ()
clock = bel(root, font=('times', 50, 'bold'), bg='green')
clock.pack(fill='both', expand=1)
time_now()
root.mainloop()
在这个代码中,time_now函数是用来获取当前时间并更新时钟显示的。

clock.after(1000, time_now)会在1秒(1000毫秒)后再次调用time_now函数,因此时钟的显示会每秒更新一次。

你可以根据自己的需要修改这个程序,例如改变字体、背景颜色、窗口大小等等。

如果你不熟悉tkinter,可能需要花一些时间来学习如何使用它,但是一旦你掌握了,就可以创建出各种复杂的GUI应用。

用数码管(8位)显示的数字时钟程序

用数码管(8位)显示的数字时钟程序

用数码管(8位)显示的数字时钟程序
一、程序概述
本程序使用单片机AT89S52,通过数码管(8位)显示当前时间,支持12小时制和24小时制切换,精度为秒。

二、程序实现
程序首先定义了数码管的连接方式和每个数字的位图数据,然后定义了时间变量和函数,包括:
1.初始化函数:设置数码管端口和时钟计数器的计数方式。

2.读时钟函数:读取时钟计数器及寄存器,返回当前时间的小时、分钟和秒数。

3.显示函数:将当前时间转化为8个数码管显示的位图数据,用数字和符号映射表将数字和符号的位图数据与数码管连接方式对应起来,输出到数码管上。

在主函数中,程序初始化后循环执行读时钟函数和显示函数,实现时钟的实时显示。

三、程序特点
1.采用8位数码管显示,时间更加直观。

2.支持12小时制和24小时制切换,适用于不同场景。

3.实现精度为秒的实时显示,更加准确。

四、程序优化
1.增加闹钟功能,提醒用户打卡或者起床。

2.加入温度传感器模块,实现显示温度的功能。

3.优化显示效果,增加字体和颜色等选项。

五、程序应用
本程序可应用于家庭、办公室、学校等场合,用于显示时间,提醒用户合理安排时间和时间管理,也可作为DIY电子制作的教学和实验材料,提高学生的动手实践能力和电子信息技术水平。

编程时钟教案设计方案模板

编程时钟教案设计方案模板

课程名称:编程基础课时安排:2课时教学目标:1. 了解时钟编程的基本概念和原理。

2. 掌握使用编程语言实现时钟显示的功能。

3. 学会使用定时器、中断等编程技术。

4. 培养学生的逻辑思维能力和实践操作能力。

教学重点:1. 时钟编程的基本概念和原理。

2. 使用编程语言实现时钟显示的功能。

3. 定时器、中断等编程技术的应用。

教学难点:1. 定时器、中断等编程技术的应用。

2. 时钟显示的精确性。

教学准备:1. 计算机教室,每台电脑安装编程软件。

2. 教学课件、代码示例、实验指导书。

教学过程:一、导入新课1. 引入话题:同学们,今天我们来学习一个有趣的编程课题——编程时钟。

2. 提出问题:什么是时钟?为什么我们需要编程时钟?二、新课讲解1. 讲解时钟编程的基本概念和原理。

2. 介绍编程时钟的组成:定时器、中断、显示模块等。

3. 讲解定时器、中断等编程技术。

三、实践操作1. 学生分组,每组一台电脑,开始编写时钟程序。

2. 教师巡视指导,解答学生在编程过程中遇到的问题。

3. 学生调试程序,实现时钟显示功能。

四、实验指导1. 教师提供实验指导书,详细说明实验步骤和注意事项。

2. 学生按照实验指导书进行实验,完成编程时钟的制作。

五、课堂小结1. 教师总结本节课所学内容,强调重点和难点。

2. 学生分享实验成果,互相学习、交流。

六、课后作业1. 完善编程时钟程序,增加闹钟、计时等功能。

2. 思考如何提高时钟显示的精确性。

教学评价:1. 学生能够掌握时钟编程的基本概念和原理。

2. 学生能够使用编程语言实现时钟显示的功能。

3. 学生能够熟练运用定时器、中断等编程技术。

4. 学生能够独立完成编程时钟的制作,并具备一定的创新意识。

教学反思:1. 教师应根据学生的实际情况调整教学内容和进度。

2. 注重培养学生的实践操作能力和团队协作精神。

3. 关注学生的个体差异,提供个性化指导。

课程设计之LCD显示数字时钟设计

课程设计之LCD显示数字时钟设计

课程设计之LCD显示数字时钟设计一、课程目标知识目标:1. 学生能理解LCD显示数字时钟的基本原理,掌握电子元件的功能和使用方法。

2. 学生能描述数字时钟的组成,包括时钟芯片、LCD显示屏、电阻、电容等基本元件。

3. 学生能运用所学知识,分析并解释LCD显示数字时钟的电路图。

技能目标:1. 学生能通过实际操作,学会正确焊接电子元件,搭建LCD显示数字时钟电路。

2. 学生能运用编程软件,编写控制LCD显示数字时钟的程序。

3. 学生能通过调试,解决LCD显示数字时钟中的常见问题,确保其正常运行。

情感态度价值观目标:1. 学生在课程学习中,培养对电子制作的兴趣和热情,提高创新精神和动手能力。

2. 学生通过团队协作,培养沟通、交流和合作的能力,增强团队意识。

3. 学生在掌握电子技术知识的过程中,认识到科技对生活的影响,提高社会责任感和使命感。

课程性质:本课程为实践性较强的电子技术课程,结合理论知识与实践操作,培养学生动手能力和创新能力。

学生特点:学生处于高年级阶段,具备一定的电子技术基础,对实践操作有较高的兴趣和热情。

教学要求:教师需关注学生的个体差异,提供个性化的指导,鼓励学生积极参与实践,注重培养学生的实际操作能力和问题解决能力。

同时,关注学生的情感态度价值观的培养,提高学生的综合素质。

通过课程目标的分解,使学生在知识、技能和情感态度价值观方面取得具体的学习成果,为后续教学设计和评估提供依据。

二、教学内容1. 电子元件基础知识:介绍LCD显示屏、时钟芯片、电阻、电容等基本元件的工作原理和功能。

- 教材章节:第二章 电子元件基础- 内容列举:LCD显示屏原理、时钟芯片特性、电阻和电容的分类及应用。

2. 数字时钟原理与设计:分析数字时钟的组成、工作原理,讲解设计方法。

- 教材章节:第三章 数字电路设计- 内容列举:时钟芯片的接口电路、LCD显示接口电路、数字时钟整体设计。

3. 焊接技术:教授焊接工具的使用方法,指导学生进行电子元件的焊接。

时钟计时器使用Java语言和Swing界面库开发的小程序

时钟计时器使用Java语言和Swing界面库开发的小程序

时钟计时器使用Java语言和Swing界面库开发的小程序时钟计时器是一款使用Java语言和Swing界面库开发的小程序,它可以以时、分、秒的形式显示当前时间,并可以进行计时功能。

本文将介绍该小程序的开发过程,并分享一些有关Java语言和Swing界面库的知识。

一、程序开发环境搭建要使用Java语言和Swing界面库进行开发,首先需要安装Java开发工具包(JDK)和集成开发环境(IDE)。

在安装完成后,创建一个新的Java项目,并导入Swing库。

二、界面设计首先,我们需要设计一个界面来展示时钟和计时功能。

可以使用Swing库提供的组件来创建窗体、标签、按钮等。

1. 窗体设计在主类中创建一个窗体对象,设置标题、尺寸和布局等属性。

并将时钟和计时功能的组件添加到窗体中。

```javaJFrame frame = new JFrame("时钟计时器");frame.setSize(400, 300);frame.setLayout(new BorderLayout());```2. 时钟设计使用标签组件来显示当前时间。

可以使用Java提供的日期和时间类(如Date和Calendar)来获取当前时间,并将其格式化后设置为标签的文本。

```javaJLabel clockLabel = new JLabel();frame.add(clockLabel, BorderLayout.CENTER);// 获取当前时间Date now = new Date();SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");String time = sdf.format(now);// 设置标签文本clockLabel.setText(time);```3. 计时功能设计为计时功能设计按钮组件,并添加监听事件。

在按钮的监听器中,通过定时器类(如Timer)来实现每秒更新计时器的功能。

TFT液晶显示时钟程序

TFT液晶显示时钟程序

TFT液晶显示时钟程序说明:该程序文件中包含三个.c文件和三个.h文件,方便读者理解程序的层次性和关联性。

该程序的功能是利用51单片机实现逻辑控制,在液晶显示屏上显示动态时钟。

1. shizhong.c(实际上是主程序):#include "REG51.H"#include "gui.h"unsigned char count;#define key P1sbit K=P2^0;unsigned char a;unsigned char b;unsigned char c;unsigned char d;unsigned char e;unsigned char f;unsigned char g;unsigned char sw;unsigned char h1=0;unsigned char h2=0;unsigned char h3=0;unsigned int q;void Keyboard(){unsigned int k;key=0xf0;if(key!=0xf0){for(q=0;q<800;q++);if(key!=0xf0){key=0x0f;switch(key){case(0x0e): k=0; break;case(0x0d): k=4; break;case(0x0b): k=8; break;case(0x07): k=12; break;}key=0xf0;switch(key){case(0xe0): k=k; break;case(0xd0): k=k+1; break;case(0xb0): k=k+2; break;case(0x70): k=k+3; break;}while(key!=0xf0);switch(k){case 0: f++; P0=0x01; if(f==3) {f=0;} break;case 1: e++; P0=0x02;if(f<2){if(e==10) {e=0;}} if(f==2){if(e==4){e=0;}} break;case 2: d++; P0=0x04;if(d==6) {d=0;} break;case 3: c++; P0=0x08;if(c==10) {c=0;} break;case 4: b++; P0=0x10;if(b==6) {b=0;} break;case 5: a++; P0=0x20;if(a==10) {a=0;} break;case 6: sw=0;break;case 7: sw=1; break;}}}}void jishu(){K=1;if(K==0){for(q=0;q<800;q++);if(K==0){h1++;if(h1==10){h1=0;h2++;if(h2==10){h2=0;h3++;}}}}GUI_WriteASCII(0, 50, h3, RED, WHITE);GUI_WriteASCII(16, 50, h2, RED, WHITE);GUI_WriteASCII(32, 50, h1, RED, WHITE); }void main (void){TFT_Init();TFT_ClearScreen(BLACK);EA=1;ET1=1;TMOD=0x10;TH1=15536/256;TL1=15536%256;TR1=1;a=0;b=0;c=0;d=0;e=0;f=0;g=10;count=0;sw=1;GUI_WriteASCII(0, 50, 0, RED, WHITE);GUI_WriteASCII(16, 50, 0, RED, WHITE);GUI_WriteASCII(32, 50, 0, RED, WHITE);while(1){while(sw){TR1=1;jishu();if(count>=20){count=0;a++;if(a==10){a=0;b++;{b=0;c++;if(c==10){c=0;d++;if(d==6){d=0;e++;if(f<2&&e==10){e=0;f++;}if(f==2&&e==4){f=0;e=0;}}}}}GUI_WriteASCII(0, 0, f, RED, WHITE);GUI_WriteASCII(16, 0, e, RED, WHITE);GUI_WriteASCII(32, 0, g, RED, WHITE);GUI_WriteASCII(48, 0, d, RED, WHITE);GUI_WriteASCII(64, 0, c, RED, WHITE);GUI_WriteASCII(80, 0, g, RED, WHITE);GUI_WriteASCII(96, 0, b, RED, WHITE);GUI_WriteASCII(112,0, a, RED, WHITE);}Keyboard();}Keyboard();GUI_WriteASCII(0, 0, f, RED, WHITE);GUI_WriteASCII(16, 0, e, RED, WHITE);GUI_WriteASCII(32, 0, g, RED, WHITE);GUI_WriteASCII(48, 0, d, RED, WHITE);GUI_WriteASCII(64, 0, c, RED, WHITE);GUI_WriteASCII(80, 0, g, RED, WHITE);GUI_WriteASCII(96, 0, b, RED, WHITE);GUI_WriteASCII(112,0, a, RED, WHITE);TR1=0;}}void Time1(void) interrupt 3{count++;TH1=15536/256;TL1=15536%256;}2. gui.c:#include"gui.h"#include"charcode.h"#ifdef USE_ASCIIvoid GUI_WriteASCII(uchar x, uchar y, uchar p, uint wordColor, uint backColor) {uchar j, wordByte,wordNum;uint color;wordNum = p;TFT_SetWindow(x,y,x+15, y+23);for (wordByte=0; wordByte<48; wordByte++){color = ASCII16x24[wordNum][wordByte];for (j=0; j<8; j++){if ((color&0x80) == 0x80){TFT_WriteData(wordColor);}else{TFT_WriteData(backColor);}color <<= 1;}}}#endif3. driver.c :#include "driver.h"/************************************************************************** ***函数名:TFT_WriteCmd*输入:cmd*输出:*功能:写命令。

单片机c 语言编程时钟及闹钟程序

单片机c 语言编程时钟及闹钟程序

一·功能1、计时功能,数码管显示数值从00:00:00--23:59:59循环替换,且周期时间与实际时间吻合。

2、定时闹钟功能,按下“定时”键后,可以设定所需要的任意时间,定时完成后,当到达设定时间后,蜂鸣器发声。

3、调整时间功能,根据此项功能可将时钟调至正确的时间。

4、查看定时功能,当设定完成后可以查看上次定时的时间,且能在此基础上进行重新定时。

二·按键说明设定键:按一次开始设定时间,并将设定过程显示在数码管上。

若未按此键,则其他按键无效。

设定过程中,再按一次此键,定时结束,数码管显示返回时钟。

当第一次按下设定键时,显示值为00:00:00,在此基础上调节定时时间。

第一次设定完成后,以后再按设定键,显示初值则为上次定时的时间。

确定键:在定时过程中按下此键,则保留当前设定的时间为定时时间。

若定时过程未按此键,定时无效。

向上键:按下此键,使得当前设定值在现有数值上加一,当加至满位时,当前值变为零。

向下键:按下此键,使得当前设定值在现有数值上减一,当减至零时,当前值变为满位减一。

向左键:按下此键,使得设定值移向左边一位,若已经在最左边,则移至最右边。

向右键:按下此键,使得设定值移向右边一位,若已经在最右边,则移至最左边。

三·具体操作演示(一)·定时及查看定时演示1.仿真开始。

如图:2、按键如图:3、按下设定键,开始设定时间,如图:4、如图所示,当前设定时位。

按向上键,使数值加一。

5、按下向右键,设定位移至分位。

6、按下向下键,使数字减一。

7、按确定键,确定当前设定的时间。

再按设定键,退出定时,开始时钟显示。

8、设定完成后按设定键,显示前次设定值,可在此基础上重新设定,也可直接再按设定键推出。

9、当时钟运行到设定时间时,蜂鸣器发声。

(二)·调整时间演示1、计时开始。

2、按照定时的方法开始设定时间,使其显示20:10:09。

3、调整到正确时间后,按下确定键不放,同时再按一下设定键,将目前设定值送入时钟,使其开始从设定值计时。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

时钟显示程序
设计:黄有全
2011年11月28日
关键词:定时器中断、时间产生、动态显示程序设计
硬件连接:P3→J_WM,接数码管的位控制,P1→J_DM,接共阳极数码管段码,动态显示。

P07→J_FMQ,接蜂鸣器,P06→J_JDQ,接继电器
************************************************/
#include<reg51.h>
unsigned char duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0 x86,0x8e,0x89,0xc7,0x8c,0xbf,0xff};
//数组,定义共阳极数码管显示段码:0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,H,L,P,-,熄灭。

#define uchar unsigned char
uchar ms=0,sec=0,min=30,hour=10, dn=0;
uchar keyv;
sbit P0_7 = P0^7;
sbit P0_6 = P0^6;
/**************延时2.5ms函数***************/
void delay() //延时函数,带参数i。

{ //在调用函数时通过设置参数,改变延时时间。

int j=0,k=0;
// for(j=0;j<i;j++)
for(k=0;k<410;k++);
}
/**************延时250ms函数***************/
void delay_250() //延时函数,带参数i。

{ //在调用函数时通过设置参数,改变延时时间。

int j=0,k=0;
for(j=0;j<100;j++)
for(k=0;k<400;k++);
}
//定时器初始化
void csh( )
{
TMOD=0x11; //定时器T0和T1定时、模式1、非门控;TH1=63036/256; //定时2.5ms初始值
TL1=63036%256;
TH0=0x3c; //定时50ms初始值
TL0=0xb8;
IE=0x8a; //允许T0、T1中断
IP=2; //产生时间的T0高优先级
TR0=1; //开启T0定时器
TR1=1; //开启T1定时器
}
/**************时间显示函数***************/
//定时器T1中断:进行数码管动态扫描
void t_display( ) interrupt 3
{
TH1=63036/256;
TL1=63506%256;
dn++;
if(dn>7) dn=0;
switch(dn)
{
case 0: P0=duanma[sec%10]; P3=0xfe;break; //送秒的个位的段码,显示;送第一位的位码,点亮第1位数码管。

case 1: P0=duanma[sec/10]; P3=0xfd;break; //送秒的十位的段码,显示送第二位的位码,点亮第2位数码管。

case 2: P0=duanma[19]; P3=0xfb;break; //送-的段码,显示-;;送第三位的位码,点亮第3位数码管。

case 3: P0=duanma[min%10]; P3=0xf7;break; //送分的个位的段码,显示;送第4位的位码,点亮第4位数码管。

case 4: P0=duanma[min/10]; P3=0xef;break; //送秒的十位的段码,显示;送第5位的位码,点亮第5位数码管。

case 5: P0=duanma[19]; P3=0xdf;break; //送-的段码,显示-;送第6位的位码,点亮第7位数码管
case 6: P0=duanma[hour%10]; P3=0xbf;break; //送小时的个位的段码,显示;送第7位的位码,点亮第7位数码管。

case 7: P0=duanma[hour/10]; P3=0x7f;break; //送秒的十位的段码,显示;送第8位的位码,点亮第8位数码管。

}
}
/**************按键处理函数**************/
void key()
{ uchar i;
keyv=P2;
keyv=~keyv&0x1f; //取反,去掉高三位(只要5个按键)
if(keyv==1) //K1按键按下,小时单元在0-23之间循环加1
{if(hour<23)hour++;else hour=0; }
if(keyv==2) //K2按键按下,小时单元在0-23之间循环减1
{if(hour>0)hour--;else hour=23; }
if(keyv==4) //K3按键按下,分钟单元在0-59之间循环加1
{if(min<59)min++;else min=0; }
if(keyv==8) //K4按键按下,分钟单元在0-59之间循环减1
{if(min>0)min--;else min=59; }
if(keyv!=0){delay_250();} //延时0.2秒
/**************时间数据产生函数************** */
//定时器T0中断服务:产生时间数据
void i_time( ) interrupt 1
{
TH0=0x3c; //定时50ms初始值
TL0=0xb8;
if(ms>19) //ms单元>19(是否到1秒)
{ ms=0; //到1秒,则sec增加1,且ms清0.
if(sec>59)
{sec=0;
if(min>59) //sec单元>59(是否到1分)
{min=0; //秒进位到分钟,即分钟加1.且sec清0. if(hour>23)hour=0;
else hour++;
}
else min++;
}
else sec++;
}
else ms++; //ms单元增加1
/**************控制程序**************/
void control()
{
if(hour==10 && min==31 && sec<20) P0_7=0; //如果是10:31分前20秒,则蜂鸣器响。

else if(hour==10 && min==35 && sec<10) P0_7=0; //如果是10:35分前10秒,则蜂鸣器响。

else P0_7=1; //否则蜂鸣器不响
if(hour==10 && min==32 && sec<30) P0_6=0; //如果是10:32分前30秒,则继电器常开触点闭合。

else P0_6=1; //否则继电器常开触点断开。

}
/**************主函数************** */
void main()
{
csh();
while(1)
{
key(); //按键处理函数,对小时、分钟进行调节
control(); //控制函数,闹铃两次,输出一次。

}。

相关文档
最新文档