单片机基于c语言编写时钟

单片机基于c语言编写时钟

#include

#define uint unsigned int

#define uchar unsigned char

char led[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xe6};//共阴数码管数字码

#define weixuan P0 //P0为数码管的段选

sbit sck=P2^7; //移位时钟

sbit tck=P2^6; //锁存时钟

sbit data1=P2^5; //串行数据输入

sbit x1=P1^0;

sbit x2=P1^1;

sbit x3=P1^2;

sbit bee=P3^5;

sbit time_change=P1^5; //P3^0为"调时"按键

sbit time_choose=P1^6; //P3^1为"选择时分秒"按键

sbit time_inc=P1^7; //P3^2为"增加"按键

sbit time_ok=P3^3; //P3^3为"完成"按键

uint t;

uchar sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; //定义秒,分,时,秒的个位,十位,分的个位,十位,时的个位,十位

int choose_n; //按下"选择时分秒"按键的次数

int flag; //定义"调时"按键的标志位

//---------------------------------------------------------------------

void init();

void display();

void delay(int x);

void time_modify();

void send(uchar data8);

void naozhong();

//---------------------------------------------------------------------

void main()

{

init();

while(1)

{

TR0=1;

display();

time_modify();

}

}

//---------------------------------------------------------------------

void init()

{

t=choose_n=0;

sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi,sec=min=hour=flag=0;

TMOD=0x01; //定义定时器0工作与方式1

TH0=(65536-60000)/256; //定时器赋初值

TL0=(65536-60000)%256;

EA=1; //开总中断和T0中断

ET0=1;

}

//---------------------------------------------------------------------

void send(uchar data8) // 数据发送

{

uchar i;//设置循环变量

sck=1;

tck=1;

for(i=0;i<=7;i++)

{

if((data8>>i)&0x01)

data1=1;

else

data1=0;

sck=0;

sck=1;

}

tck=0;

tck=1;

}

//--------------------------------延时子函数------------------------------------void delay(int x)

{

int i,j;

for(i=0;i<=x;i++)

for(j=0;j<=100;j++);

}

//-------------------------------显示子函数---------------------------------------

void display()

{

int i=0;

if(TF0==1) //如果定时器溢出

{

TF0=0; //清中断标志位

t++;

if(t==18)

{

t=0;

sec++; //秒加1

if(sec==60) //如果秒为60,则清零,分加1

{

sec=0;

min++;

}

if(min==60) //如果分为60,则清零,时加1

{

min=0;

hour++;

}

if(hour==24) //如果时为24,则清零

{

hour=0;

}

}

}

sec_ge=sec%10; //秒的个位和十位

sec_shi=sec/10;

min_ge=min%10; //分的个位和十位

min_shi=min/10;

hour_ge=hour%10; //时的个位和十位

hour_shi=hour/10;

weixuan = 0xff; // p0口为1111 1111

send(led[hour_shi]); // 显示第一位时weixuan= 0xfe; // p0口为1111 1110

delay(1);

weixuan=0xff; // 消影

send(led[hour_ge]); // 显示第二位时weixuan= 0xfd; // p0口为1111 1101

delay(1);

weixuan=0xff; // 消影

send(0x02); // 显示第三位

weixuan= 0xfb; // p0口为1111 1011

delay(1);

weixuan=0xff; // 消影

send(led[min_shi]); // 显示第四位分weixuan= 0xf7; // p0口为1111 0111

delay(1);

weixuan=0xff; // 消影

send(led[min_ge]); // 显示第5位分weixuan= 0xef; // p0口为1110 1111

delay(1);

weixuan=0xff; // 消影

send(0x02); // 显示第6位

weixuan= 0xdf; // p0口为1101 1111

delay(1);

weixuan=0xff; // 消影

send(led[sec_shi]); // 显示第7位秒weixuan= 0xbf; // p0口为1011 1111

delay(1);

weixuan=0xff; // 消影

send(led[sec_ge]); // 显示第8位秒weixuan= 0x7f; // p0口为0111 1111

delay(1);

weixuan=0xff; // 消影

}

//----------------------------调时子程序-------------------------------

void time_modify()

{

if(time_change==0) //如果"调时"按键按下

{

delay(5); //延时去抖

if(time_change==0)

{

flag=1; //标志位置1

while(flag) //当标志位为1时才能进行时间调整

{

TR0=0; //定时器停止

display(); //显示停止时的时间

if(time_ok==0) //如果"完成"按键按下

{

delay(15); //延时去抖

if(time_ok==0)

{

flag=0; //标志位清零

x1=1;

x2=1;

x3=1;

}

}

if(time_choose==0) //如果"时分秒选择"按键按下

{

delay(30); //延时去抖

if(time_choose==0)

{

while(!time_choose);

choose_n++; //按下的次数增加

if(choose_n==4) //如果次数达到4次

{

choose_n=1; //次数清零

}

if(choose_n==1) //如果次数为1,秒指示灯亮

{

x1=0;

x2=1;

x3=1;

}

else if(choose_n==2) //如果次数为2,分指示灯亮

{

x1=1;

x2=0;

x3=1;

}

else if(choose_n==3) //如果次数为3,时指示灯亮

{

x1=1;

x2=1;

x3=0;

}

}

}

if(time_inc==0) //如果"增加"按键按下

{

delay(30); //延时去抖

if(time_inc==0)

{

switch(choose_n) //分支结构,根据choose_n的值来判断哪一位加1 {

case 1: //如果choose_n为1,秒加1,到60清零

{

while(!time_inc);

sec++;

if(sec==60)

sec=0;

break;

}

case 2: //如果choose_n为2,分加1,到60清零

{

while(!time_inc);

min++;

if(min==60)

min=0;

break;

}

case 3: //如果choose_n为3,时加1,到24清零

{

while(!time_inc);

hour++;

if(hour==24)

hour=0;

break;

}

default:break;

}

}

}

}

}

}

}

基于单片机的电子时钟设计与实现

基于单片机的电子时钟设计与实现 电子时钟是现代人生活中不可或缺的一部分。随着现代科技的发展,基于单片机的电子时钟已经成为人们常见的选择。本文将详细介绍基于单片机的电子时钟设计与实现。 一、基于单片机的电子时钟的原理 基于单片机的电子时钟是通过控制晶体振荡器的频率来实现时钟的精度。当晶体振荡器振荡周期稳定时,控制晶体振荡器的频率就可以实现时钟的精确。 二、基于单片机的电子时钟的设计 1、硬件设计 (1)时钟芯片:MCU常用的计时器是AT89S52,这是一个高性能的、低功耗的8位CMOS微控制器,使用半导体工艺方案,集成了66个I/O口和4个定时/计数器。MCU的定时器的时钟源要保证准确,采用低失真、低相位噪声的晶振可以保证这一点。 (2)显示器件:本设计采用单片机驱动数码管来显示时间,以节省成本。数码管是由点阵组成的,共有八段,其中七段是用来表示数字的,而第八段是用来显示小数点、时间标志等字符。

(3)按键及配套链路:按键和链路的作用是用来调整电 子时钟的计时和校准。采用常开或常闭接触式按钮即可实现这一功能。 2、软件设计 (1)时钟芯片:AT89S52时钟芯片采用C语言编程,最终生成.HEX文件,充当芯片程序的载体,烧录进芯片后即可实 现自动扫描、计时、纠偏、时间显示、闹铃、定时关闭等多项功能。 (2)扫描及计时:8个数码管需要进行扫描的操作,程序运行时根据八个位选信号,依次驱动八个共阳数码管的位选脚。在每次扫描完成后即进行时钟计时的工作,判断闹钟时间是否到达,若到达则执行闹铃程序。 (3)时间设置:根据按键的输入状态,进行时间值的修改,来实现时钟时间的设置。 (4)闹铃:当当前时间与闹钟设置时间相等时,启动闹 铃程序,进行可选的led闪烁、蜂鸣器响声等提醒操作。 三、基于单片机的电子时钟的实现 将设计好的电路板焊接好,控制程序烧录进入AT89S52芯片,并将电子时钟放置在合适的位置或固定于墙壁上即可使用。 四、基于单片机的电子时钟的优缺点 优点:精度高、误差小、易于校对和设置、功能多样化、体积小、寿命长。

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

单片机技术课程设计 数字电子钟 学院: 班级: 姓名: 学号: 教师:

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词: 电子钟 AT89C52 硬件设计软件设计

目录 NO TABLE OF CONTENTS ENTRIES FOUND. 一、数字电子钟设计任务、功能要求说明及方案介绍 1.1 设计课题设计任务 设计一个具有特定功能的电子钟。具有时间显示,并有时间设定,时间调整功能。 1.2 设计课题的功能要求说明 设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。 1.3 设计课的设计总体方案介绍及工作原理说明 本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:

单片机基于c语言编写时钟

单片机基于c语言编写时钟 #include #define uint unsigned int #define uchar unsigned char char led[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xe6};//共阴数码管数字码 #define weixuan P0 //P0为数码管的段选 sbit sck=P2^7; //移位时钟 sbit tck=P2^6; //锁存时钟 sbit data1=P2^5; //串行数据输入 sbit x1=P1^0; sbit x2=P1^1; sbit x3=P1^2; sbit bee=P3^5; sbit time_change=P1^5; //P3^0为"调时"按键 sbit time_choose=P1^6; //P3^1为"选择时分秒"按键 sbit time_inc=P1^7; //P3^2为"增加"按键 sbit time_ok=P3^3; //P3^3为"完成"按键 uint t; uchar sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; //定义秒,分,时,秒的个位,十位,分的个位,十位,时的个位,十位 int choose_n; //按下"选择时分秒"按键的次数 int flag; //定义"调时"按键的标志位 //--------------------------------------------------------------------- void init(); void display(); void delay(int x); void time_modify(); void send(uchar data8); void naozhong(); //--------------------------------------------------------------------- void main() { init(); while(1) { TR0=1; display(); time_modify(); } } //--------------------------------------------------------------------- void init() {

基于单片机的电子钟设计

基于单片机的电子钟设计 摘要: 电子钟是一种普遍使用的时钟类型。通过单片机,可以实现数字 时钟的各种功能,例如:时间显示、闹钟功能、温度显示等。本文介 绍了基于单片机的电子钟设计方案,其中包括硬件系统的设计和程序 代码的实现。该电子钟的基本功能包括:时钟模式、闹钟模式、温度 显示和日期显示。设计方案使用的单片机是AT89C52,时钟模块为 DS1302。实验结果表明,该电子钟系统具有稳定性高、精度高、实用 性强等特点。 关键词:单片机、电子钟、DS1302 1. 概述 电子钟是目前流行的现代时钟类型之一。通过单片机,可以实现 数字时钟的各种功能,例如:时间显示、闹钟功能、温度显示等。作 为一种普遍应用于家庭以及公共场所的计时工具,电子钟能够提高人 们的时效性、管理效率。 本文将介绍基于单片机的电子钟设计方案,其中包括硬件系统的 设计和程序代码的实现。该电子钟的基本功能包括:时钟模式、闹钟 模式、温度显示和日期显示。设计方案使用的单片机是AT89C52,时钟模块为DS1302。实验结果表明,该电子钟系统具有稳定性高、精度高、实用性强等特点。 2. 硬件设计 2.1 系统原理 系统的核心是AT89C52单片机,其包括了8051架构下所有标准 的特殊功能寄存器以及升级的功能模块。DS1302是常用的实时时钟模块,它包含一个时钟/日历的B类时钟芯片、一个31个字节的静态RAM 以及一个摆振电路。通过与AT89C52的串行通信接口,可以实现时钟 芯片与单片机的通信。 2.2 电路设计

电路设计包括AT89C52单片机、DS1302时钟芯片、4个7段数码管以及相关的外围元件。其中,输入电源电压为5V直流电压,4个7段数码管均采用共阴极的连接方式。 2.3 电路说明 (1) 时钟模块DS1302 DS1302是一种时钟模块,其具有许多特性,例如:硬件控制时间的计数、在停电情况下,仍能保持时间记录、考虑到掉电情况、在无外部纪念日的情况下,为计时器提供64字节的RAM等特点。DS1302可以通过单片机的串行通信接口进行通信,实现单片机与时钟芯片之间的数据传输。 (2) AT89C52单片机 AT89C52是一种8位的单片机,具有时钟速度高、存储空间大、内部EEPROM、容易和其他外围硬件进行接口连接等特点。该单片机可用于任何普通的监测与控制系统,并能够与各种器件进行通信,如LCD 模块、密钥盘、时钟模块等。AT89C52单片机的电路连接如图2所示。 (3) 7段数码管 7段数码管是一种常用的显示元件,其具有数字显示、字母显示、渐变显示等多种显示方式。本文使用的是共阴极数码管,通过单片机的I/O口输出位控制,实现数码管数字的显示。4个7段数码管的电路连接如图2所示。 3. 程序设计 主要功能模块 (1) 时钟显示模块:使用DS1302时钟模块,实现时间显示。 (2) 日期显示模块:通过AT89C52单片机获取DS1302模块提供的日期数据,实现日期的显示。 (3) 温度检测模块:通过温度传感器检测环境温度,实现温度位的显示。 (4) 闹钟模块:通过AT89C52单片机设置闹钟时间,实现闹钟的响铃功能。 4. 结论

电子时钟计时器的设计(c语言版_调试完美通过_可直接使用)(附原理图源程序以及完整的文档)汇总

湖南人文科技学院 课程设计报告 课程名称:单片机原理及应用课程设计 设计题目:电子时钟的设计 系别:通信与控制工程系 专业:通信工程 班级:09级通信二班 学生姓名: 袁琦黄文付 学号: 09416230 09416227 起止日期:2011年12月20日~2011年12月30日 指导教师:王善伟姚毅谢四莲 教研室主任:刘建闽

指导教师评语: 指导教师签名:年月日 成绩评定 项目权重 成绩 袁琦黄文付 1、设计过程中出勤、学习态度等方面0.2 2、课程设计质量与答辩0.5 3、设计报告书写及图纸规范程度0.3 总成绩 教研室审核意见: 教研室主任签字:年月日教学系审核意见: 主任签字:年月日

摘要 时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事物入手,通过对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领域的探索。 本文利用单片机实现数字时钟计时功能的主要内容。它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上。本次设计采用独立式按键进行时间调整,其中STC89C52是核心元件,同时采用数码管LED动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外利用DS1302具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。 关键词:STC89C52 ;LED数码管;8255芯片;DS1302芯片;

单片机的C语言程序设计——时钟

单片机的C 语言程序设计——时钟 1. 针对图1,用单片机C语言编程实现时钟,并利用Protues 仿真演示。(1秒钟的 定时使用定时器中断方式) (1)硬件原理图 图1 定时电路原理图 (2)软件流程图

(3)程序清单(标注注释) #include static unsigned char code seg[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} ; // 字形码void show(); unsigned int num[2]; void main(void) { P2=0x00; P3=0x00; //P2,P3赋初值 TMOD=0x00; TH0=0x10; TL0=0x60; //定时4mS EA=1; ET0=1; TR0=1 ; //开启定时器

while(1); //进入死循环,进入中断判断 } void timeint(void) interrupt 1 using 2 { unsigned int h; //定义变量h h++; if(h==125){ show(); //调用显示程序 h=0; } //循环125次,达到定时一秒后,让h重新计数 TH0=0x10; TL0=0x60; //重新赋给定时器初值 } void show() //显示程序 { unsigned char s; num[0]=s%10; //取个位的数 num[1]=s/10; //取十位的数 P3=seg[num[0]]; //根据字形码显示个位的数 P2=seg[num[1]]; //根据字形码显示十位的数 s++; //显示的数加一 if(s==60) s=0; //计数到60的时候,重新让它等于0.如此循环,成为秒表2.针对图2,用单片机C语言编程按键按下,显示数据增加1,并用Protues仿真运行

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书 数字电子钟 系、部:电气与信息工程学院 学生姓名: 指导教师:职称 专业: 班级: 完成时间:2013-06-07

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词电子钟;AT89S52;硬件设计;软件设计

ABSTRACT Clock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value. Key words Electronic clock;;AT89S52;Hardware Design;Software Design

单片机电子钟c语言程序

单片机电子钟程序设计实习报告 单片机LCD1602电子钟毕业论文 这次嵌入式系统综合实习已经结束了,哎..... 在网络发现很多计算机专业的毕业生都是以电子钟为题的毕业论文,个人感觉做一个电子钟程序设计的技术含量,技术水平都不高。呵呵个人还是比较偏向于软件开发的,比较喜欢vc++开发。 一、引言 1.1课题的背景及目的 随着计算机科学与技术的飞速发展,计算机的应用已经渗透到国民经济与人们生活的各个角落,正在日益改变着传统的人类工作方式和生活方式,而单片机技术又作为计算机技术中的一个独立分支,有着性价比高,集成度高,体积小,可靠性高,控制功能强大,低功耗,低电压,便于生产,便于携带等特点,所以得到越来越广泛的应用,特别是在工业控制和仪表仪器智能化中起极其重要的作用.本文利用单片机强大的控制功能和内部定时器重要部件,设计了一款自行对时间进行调整以及把时、分、秒用LCD显示的电子钟。 电子钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌

握各种组合逻辑电路与时序电路的原理与使用方法 1.2课题的内容要求及研究方法 ①时间以24小时为一个周期; ②显示时、分、秒; ③具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; 本文先按照设计的一般步骤,先选定用单片机实现的方案,了解设计要求,再分别从硬件系统设计和软件系统设计两个宏观方面着手.然后大量阅读相关资料,硬件方面,熟练单片机工作基本原理,查出相关元器件的参数,八个八段数码管,继电器等性能.然后画出系统框图和单元电路原理图,再对系统工作原理按照单元电路作简单的说明。软件方面,熟悉编程语言,查找相关子程序.熟悉使用Keil uVision2开发软件及STC-ISP下载软件.把原器件按电路原理图安装.最后再对硬件和软件系统进行调试和仿真。课题的内容是要求设计一款电子钟,而且要求计时准确,显示直观,清晰,时能够精确到秒。最后设计出来的产品,要求电路简洁,稳定性好。 二、课题设计 1、基本原理 本设计基于单片机技术原理,以单片机芯片A T89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个多功能数字时钟系统。单片机扩展的LCD显示器用来显示秒、分、时计数单元中的值。整个设计包括两大部分: 硬件部分和软件部分,

单片机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。

51单片机数码管电子时钟C程序

//**单片机stc89c52, 8位共阴数码管12M晶振 //*******P0 位选,P2 段选❖******// #include 〃reg52・ h〃 #define uchar unsigned char #define uint unsigned int uchar code tab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40, Oxff}; uchar n; uchar hh, mm, ss; uchar nhh, nmm, nss; uint year; uchar day, mon, week; uchar hhs, hhg, mms, mmg, sss, ssg; uchar days,dayg, mons, mong; uchar nhhs, nhhg, nmms, nmmg, nsss, nssg; uchar setl=l, set2=l; sbit dula=P3 3; sbit fm=P3 2;

sbit kl二P3"4; sbit k2二P3"5; sbit k3二P3飞; sbit k4二P3"7; uchar tablel[] = {31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 〃闰年uchar table2[] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //非闰年void jishi (); void baoshi (); void alarm(); void set_time(); void set_alarm(); void set_mdw(); void key_change(): void key_set (); void delay (int m) 〃延时程序,延时m*0. 5ms uint i; uint j; for (i=0;i

51单片机电子时钟(C语言)

#include #include #define uchar unsigned char //宏定义 #define uint unsigned int uchar sec,min,hour,sec50,jishu,dtp2; //sec、min、hour、为显示单元,sec50为60秒计数单元,jishu为扫描数码管计数单元 uchar sec1,min1,hour1; //时间中介单元 uchar nzmin,nzhour,nzjishu=0,dispjishu=0; //闹钟分、时定义 uchar data nzbit=0; //闹钟标志位,闹钟默认为开启 uchar data dispbit=0; //显示标志位,默认显示当前时间 uchar data disp[8]; //秒、分、时个位与十位存放数组及‘—’ uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0-9 sbit KEYmin=P3^2; //分加1按钮 sbit KEYhour=P3^3; //时加1按钮 sbit LABA=P1^0; //闹钟输出I/O口

sbit NZdisplay=P3^4; //闹钟显示按钮,按住不放显示闹钟时间,放开则显示当前时间sbit KEYnzmin=P3^5; //闹钟分加1按钮 sbit KEYnzhour=P3^6; //闹钟时加1按钮 sbit KEYoff=P3^7; //关闭闹钟按钮,按第一次为关闭,第二次为开启 void display(); //显示函数声明 void keyscan(); //按键扫描函数声明 void naozhong(); //闹钟判别函数声明 void keynz(); //闹钟按键函数声明 void main() { sec=0; //时间初始化为00—00—00 min=0; hour=0; sec1=0; //显示单元初始化为00—00—00 min1=0; hour1=0; nzmin=01; //闹钟初始时间为01:01 nzhour=01; jishu=0; dtp2=0xfe; P0=0xff; TMOD=0x11; //设T0、T1为模式1 IE=0x8a; TH0=0xb8; //T0定时20ms TL0=0x0; TH1=0xfc; //T1定时1ms TL1=0x66; TR0=1; TR1=1; while(1) { display(); //调用显示子程序 keyscan(); //调用按键子程序 keynz(); //调用闹钟按键子程序 } } void t0int() interrupt 1 //T0定时中断程序 { TH0=0xb8; TL0=0x0; sec50++; if(sec50==50) //对20ms计数50次即1s { sec50=0; //清秒计数器,为下次做准备

利用单片机的定时器设计一个数字时钟

利用单片机的定时器设计一个数字时钟 数字时钟是我们日常生活中常见的计时工具,可以准确地显示当前 的时间。而单片机的定时器则可以提供精准的定时功能,因此可以利 用单片机的定时器来设计一个数字时钟。本文将介绍如何使用单片机 的定时器来设计一个基于数字显示的时钟,并提供基本的代码实现。 一、时钟电路设计 利用单片机设计一个数字时钟,首先需要设计一个合适的时钟电路。时钟电路一般由电源电路、晶振电路、单片机复位电路和显示电路组成。 1. 电源电路:为电路提供工作所需的电源电压,一般使用稳压电源 芯片进行稳定的供电。 2. 晶振电路:利用晶振来提供一个稳定的时钟信号,常用的晶振频 率有11.0592MHz、12MHz等。 3. 单片机复位电路:用于保证单片机在上电或复位时能够正确地初 始化,一般使用降低复位电平的电路。 4. 显示电路:用于将单片机输出的数字信号转换成七段数码管可以 识别的信号,一般使用BCD码和译码器进行实现。 二、单片机定时器的应用

单片机的定时器具有精准的定时功能,可以帮助实现时钟的计时功能。单片机的定时器一般分为定时器0和定时器1,根据具体的应用需求选择使用。 在设计数字时钟时,可以将定时器0配置成定时器模式,设置一个适当的定时时间。当定时器0计时达到设定时间时,会触发一个中断信号,通过中断处理程序可以实现时钟的计时功能。 以下是一个基于单片机的定时器的伪代码示例: ``` void Timer0_Init() { // 设置定时器0为工作在定时器模式下 // 设置计时时间 // 开启定时器0中断 } // 定时器0中断处理程序 void Timer0_Interrupt_Handler() { // 更新时钟显示 }

单片机C语言 电子时钟程序[1]

单片机C语言电子时钟程序[1] 单片机c语言-电子时钟程序[1] #include#defineuintunsignedint#defineucharunsignedcharunsignedcharkey2;bitding =1; unsignedchargetkey(void);uchara,n=0,shi,fen,miao;voiddelay01s(void); ucharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; ucharled1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//存有小数点的voidinit();//函数声明voiddelay(unsignedcharz);//函数声明voiddisplay();//函数声明//函数声明voidmain()//函数声明{ p1=0xfe;//对p1口赋初值init();//函数调用while(1){ //函数调用key2=getkey();switch(key2){case1:shi++;if(shi==24){ shi=0;}break;case2:fen++;if(fen==60){fen=0;}break;case3:if(fen!=0)fen--; if(fen==24){ fen=0;}break;case4:ding=~ding;default:break;}display();//函数调用}} voidinit(){ tmod=0x01;//定时器工作方式选择和赋初值th0=(65536-50000)/256;tl0=(65536-50000)%6;ea=1;//开总中断et0=1;//开定时器中断tr0=1;//启动定时器} voidtimer0()interrupt1//中断服务程序{ if(ding==1){ th0=(65536-50000)/256;//中断时间50ms tl0=(65536-50000)%6;//定时器重新赋初值a++;if(a==10){ n=~n;} if(a==20){ n=~n; a=0;

单片机毕业论文 时钟

单片机毕业论文时钟 一、引言 随着科技的不断发展,电子技术得到广泛应用。单片机技术作为电子技术的重要组成部分,已经受到越来越多的关注。单片机在各种电子设备中具有极其广泛的应用场景,其中,时钟是一种功能十分常见的设计。因此,本文将介绍一种基于单片机技术的时钟设计方案。 二、设计方案 本时钟设计方案采用C8051F020单片机,其主频为40MHz,具有高性能、低功耗等优点。该设计通过外接4位数码管和时钟模块来实现,指针式时钟的设计思路如下: 1.时钟模块的实现 时钟模块是本设计的核心部分,它是用以提供准确的时间信息的处理器。时钟模块可以通过计时器和中断等方式来实现系统时间的变化。 在本设计中,我们使用计时器T0和T1来实现对秒和毫秒的计时。T0和T1的工作原理是:借助晶振信号,采用定时器计数的方式,实现对信号的计时。最终,通过T0和T1计数器的累加,我们就可以得到当前时间的秒数和毫秒数。 2.时间信息的存储

时间信息需要进行存储,以便方便操作及显示。本设计中,采用了一种以BCD码形式存储时间信息的方法,可以非常方便地和4位数码管进行配合,来实现时间信息的显示。 在时间信息存储中,我们将时间信息分别存储在秒、分、时三个变量中。这些变量的操作和显示都可以通过时间模块来进行。 3.数码管的实现 本设计中,我们选择了常见的4位数码管进行时间信息的显示。为了方便与单片机连接,我们使用74HC595芯片来实现串口数据传输。单片机将需要显示的数码信息写入74HC595芯片,然后74HC595芯片再将数据传输出来,用以驱动数码管的显示。 三、实现过程 本设计方案的具体实现步骤如下: 1.环境搭建:利用KEIL编译器新建工程,编写程序。首先,设置时钟模块的工作模式,然后在主函数中配置计时器T0和T1。同时,在完成时钟计时和显示功能后,我们还要增加一个模式切换功能,用于设置和调整时间信息。 2.计时器T0和T1的初始设置:在进行定时器的配置过程中,我们需要设置T0的初值,以及T1的工作模式和初值。需要注意的是,T0和T1的预设值必须要小于机器的最大计数值,否则就会出现计时器失效的情况。

基于单片机的带温度显示的数字钟设计(c51语言编程)

基于单片机的带温度显示的数字钟设计(c51语言编程)开题报告 电气工程及其自动化 一、课题研究意义及现状 1980年因特尔公司推出了MCS-51单片机,近30年来,其衍生系列 不断出现,从Atmel加入FLASH ROM,到philips加入各种外设,再到后 来的Cygnal推出C8051F,使得以8051为核心的单片机在各个发展阶段 的低端产品应用中始终扮演着一个重要的角色,其地位不断升高,资源越 来越丰富,历经30年仍在生机勃勃地发展,甚至在SoC时代仍占有重要 的一席之地。 单片机具有体积小、功能强、低功耗、可靠性高、价格低廉等一系列 优点,不仅已成为工业测控领域智能仪表、机电一体化、实时控制、国防 工业普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个 角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 C语言已经成为当前举世公认的高效简洁而又贴近硬件的编程语言之一、将C语言向单片机8051上移植十余20世纪80年代的中后期,经过 几十年的努力,C语言已成为专业化单片机上的实用高级语言。C语言是 一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语 言的功能。此外,C语言程序具有完善的模块程序结构,从而为软件开发 中采用模块化程序设计方法提供了有力的保障。 与汇编语言相比,C51在功能、结构、可读性、可维护性上有明显的 优势,因而易学易用。另外C51可以缩短开发周期,降低成本,可靠性,

可移植性好。因此,使用C语言进行程序设计已成为软件开发的一个主流,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。 随着人们生活水平的提高,对物质需求也越来越高,人们已不再满足 于钟表原先简单的报时功能,希望出现一些新的功能,诸如环境温度显示、日历的显示、重要日期倒计时、显示跑表功能等,用以带来更大的方便。 而所有这些,又都是以数字化的电子时钟为基础的,不仅应用了数字电路 技术,而且还加入了需要模拟电路技术和单片机技术。其电路可以由时钟 模块、人机接口模块、环境温度检测模块等部分组成。比机械式时钟具有 更高的直观性和准确性,调节起来方便,且无机械装置,能够使用更长时间,并且方便维护保养,因此得到了广泛的使用。数字钟已成为人们日常 生活中必不可少的物品,广泛用于个人家庭以及车站、码头、剧院、办公 室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。因此,研究实用数字钟及其扩展应用,具有很大的实用价值。二、课题研究的主 要内容和预期目标 学习51单片机的基础知识熟悉其基本模块的使用、使用HD7279驱动LED数码管显示、键盘扫描和16位键盘的输入、以及温度传感器DS18B20 的温度采集等。利用C51编程实现一个带温度计的 数字钟。 1)设计目标 熟悉单片机基础知识,了解51单片机的基本功能以及温度传感器 DS18B20的使用,熟悉开发板的特征,设计并利用C51进行编程实现要求 的功能,为将来从事单片机开发、和产品制造打下基础。 2)本设计的主要内容如下:

单片机60秒计时器程序c语言

一、概述 计时器在日常生活和工业生产中扮演着重要的角色。60秒计时器是一种常见的计时器类型,用于测量较短的时间间隔。单片机作为一种微 处理器,具有广泛的应用领域,其使用C语言编程可以实现各种功能,包括计时器。本文将介绍如何使用C语言编写单片机60秒计时器程序。 二、程序框架 1. 宏定义和全局变量声明 在编写单片机60秒计时器程序时,首先需要定义一些宏和全局变量,用于设置计时器的工作模式和进行时间计数。例如: ```c #define FOSC xxx #define T1MS (xxx-FOSC/12/1000) 每隔1ms中断一次 ``` 全局变量声明如下: ```c unsigned char g_seconds; unsigned char g_minutes; unsigned char g_flag; ``` 2. 定时器初始化 计时器的初始化是整个程序的重要步骤,需要配置计时器的工作模式、

中断使能等。在C语言中,可以通过编写相应的代码实现。 ```c void Timer1Init() { TMOD |= 0x10; //设置计数器的工作方式为方式1 TH1 = T1MS / 256; //装初值 TL1 = T1MS 256; ET1 = 1; //打开定时器1中断允许 TR1 = 1; //打开定时器 EA = 1; //打开总中断 } ``` 3. 计时器中断处理函数 计时器中断发生时,需要进行相应的处理,例如对秒数进行累加,判断是否达到60秒等。 ```c void Timer1_ISR() interrupt 3 using 1 { TH1 = T1MS / 256; TL1 = T1MS 256; g_seconds++; if (g_seconds >= 60) { g_minutes++; g_seconds = 0;

单片机时钟1234滚动程序代码

单片机时钟1234滚动程序代码 单片机时钟1234滚动程序代码 在单片机中,可以使用数字显示器来显示时钟。而对于时钟的滚动显示,可以通过不断改变数字的显示值来实现。以下是一个使用C 语言编写的单片机时钟1234滚动程序的代码示例: ```c #include // 引入单片机的头文件 sbit D1 = P2^0; // 数字位选择引脚1 sbit D2 = P2^1; // 数字位选择引脚2 sbit D3 = P2^2; // 数字位选择引脚3 sbit D4 = P2^3; // 数字位选择引脚4 unsigned char code LED_Disp[] = { // 数码管显示0-9的编码值 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5

0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F // 9 }; void delay(unsigned int t) { // 延时函数 unsigned int i, j; for (i = t; i > 0; i--) for (j = 110; j > 0; j--); } void main() { unsigned char i = 0; while (1) { D1 = 1; // 选择第一个数码管 P0 = LED_Disp[i % 10]; // 显示个位数字 delay(5); // 延时 D1 = 0; // 关闭选择 D2 = 1; // 选择第二个数码管 P0 = LED_Disp[i / 10 % 10]; // 显示十位数字

数字时钟 89C52 单片机C语言程序STC89C52 2009

数字时钟89C52 单片机C语言程序STC89C52 2009-10-13 21:43:33 阅读499 评论1 字号:大中小订阅. /************** 【数字时钟】****************/ /****【功能】1、时间显示2、秒表3、闹钟4、日期显示都可以设置****/ #include /*包含器件配置文件*/ #define uchar unsigned char /*宏定义字符型数据整型数据*/ #define uint unsigned int uchar code H[] = {0x0f, 0x07, 0x0b, 0x0d, 0x0e}; /*按键【P3】端口断码用于按键*/ char Code[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /*显示【0 1 2 3 4 5 6 7 8 9】数字的数码管的段码*/ uchar code C[] = {0x0, 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; /*列扫描控制LED1位2位3位4位5位6位7位8位*/ uchar MON[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; uchar A; uchar BIN=0; /* 【BIN】作为倒计时开始的标志*/ uchar hour = 0; /* 定义[时][分][秒] */ uchar min = 0; uchar sec = 0; uint shi=12; uint fen=30; uchar Mmin=0; uchar Msec=30; uchar M0=0; uchar m=0; uchar year=9; uchar month=7; uchar month2; uchar day=19; uchar set1 = 1; /* set1=1 是调节时分秒set1=2时时调节年月日set=3时事调节闹钟*/ uchar set2 = 1; /* set2=1时是调节【时】位set2=2时事调节【分】位*/ uint x = 0; /* x 每【0.01s】自加一*/ void Delay(uint k); void Timer0() /*定时器T0 5mS初始化*/ { TMOD = 0x01; /*设置*定时器0**计数方式一* (每12个时钟脉冲计数一次)或IT0=1 第二种计数方式*/ TH0 = (65536 - 10000) / 256; /*给定计时器高位赋予初值=15536/256*/ TL0 = (65536 - 10000) % 256; /*给定计时器低位赋予初值=15536%256 */ ET0 = 1; /*打开定时器外部终断0允许ET1是中断器1的开关*/ EA = 1; /*打开总中断允许*/ TR0 = 1; }

51单片机ds1302DS18b20温度时钟(电路图C语言程序)

时钟电路图: PCB板: 单片机程序: /*=========================================================== ========= 调试要求:

1.MCU:AT89S52芯片或AT89C52 2.晶振:12MHz 功能:多功能时钟+温度计 ============================================================= =======*/ #include #include #define uchar unsigned char #define uint unsigned int sbit dis_bit1=P2^7;//定义数码管控制口 sbit dis_bit2=P2^6;//定义数码管控制口 sbit dis_bit3=P2^4;//定义数码管控制口 sbit dis_bit4=P2^3;//定义数码管控制口 sbit dis_bit5=P2^1;//定义数码管控制口 sbit dis_bit6=P2^0;//定义数码管控制口 sbit led1_bit=P2^2;//定时LED的控制口 sbit led2_bit=P2^5;//定时LED的控制口 sbit s1_bit=P1^0; //定义S1控制口 sbit s2_bit=P1^1; //定义S2控制口 sbit s3_bit=P1^2; //定义S3控制口 sbit dq_ds18b20=P3^3;//定义控制DS18B20 sbit speak=P3^7; //定义蜂鸣器控制口 sbit clk_ds1302=P3^6;//定义控制DS1302的时钟线 sbit io_ds1302=P3^5;//定义控制DS1302的串行数据 sbit rest_ds1302=P3^4; #define smg_data P0//定义数码管数据口 void delay_3us();//3US的延时程序 void delay_8us(uint t);//8US延时基准程序 void delay_50us(uint t);//延时50*T微妙函数的声明 void display1(uchar dis_data);//数码管1显示子程序 void display2(uchar dis_data);//数码管2显示子程序 void display3(uchar dis_data);//数码管3显示子程序 void display4(uchar dis_data);//数码管4显示子程序 void display5(uchar dis_data);//数码管5显示子程序 void display6(uchar dis_data);//数码管6显示子程序 void init_t0();//定时器0初始化函数 void dis_led();//LED处理函数 void judge_s1();//S1按键处理函数 void judge_s2();//S2按键处理函数 void judge_s3();//S3按键处理函数 void dis(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1);//显示子程序 void dis_san(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1,uchar san);//闪烁显示子程序

相关主题
相关文档
最新文档