单片机c语言数字钟报告,51单片机仿真——数字钟(C语言)

这篇博客介绍了一款使用51单片机和定时器实现的简单时间调节器,能设置秒、分钟和小时,并通过LED数码管实时显示。作者分享了位选和段选函数,以及如何通过定时器0进行10ms的定时更新。

#include sbit ksec=P3^1;//调节秒

sbit kmin=P3^0;  //调节分钟

sbit khour=P3^2;//调节小时

sbit reset=P3^3;//清零

char smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,

0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F的十六进制

int ssec,sec,min,hour;

char DisplayData[8];//储存段选数据

void delay(int i)//延时函数

{

while(i--);

}

void Timer0Init()//定时器

{

TMOD=0X01;//0模式,工作方式1,仅用TR0打开启动。

TH0=0Xd8;    //给定时器赋初值,定时10ms

TL0=0Xf0;

ET0=1;//打开定时器0中断允许

EA=1;//打开总中断

TR0=1;//打开定时器

}

void wei()//位选

{

int i;

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

{

switch(i)     //位选,选择点亮的数码管,

{

case(0):P1=0xfe; break;//显示第0位

case(1):P1=0xfd; break;//显示第1位

case(2):P1=0xfb; break;//显示第2位

case(3):P1=0xf7; break;//显示第3位

case(4):P1=0xef; break;//显示第4位

case(5):P1=0xdf; break;//显示第5位

case(6):P1=0xbf; break;//显示第6位

case(7):P1=0X7F; break;//显示第7位

}

P0=DisplayData[i];//发送段码

delay(100); //间隔一段时间扫描

P0=0x00;//消隐

}

}

void duan()//段选

{

DisplayData[0]=smgduan[sec%10];

DisplayData[1]=smgduan[sec/10];

DisplayData[2]=0x40;

DisplayData[3]=smgduan[min%10];

DisplayData[4]=smgduan[min/10];

DisplayData[5]=0x40;

DisplayData[6]=smgduan[hour%10];

DisplayData[7]=smgduan[hour/10];

}

void settime()//调节时间

{

if(ksec==0)

{

delay(100);

if(ksec==0)

{

sec++;

if(sec>=60)//超过60重新置数

{

sec==0;

}

}

}while(!ksec);//防抖

if(kmin==0)

{

delay(100);

if(kmin==0)

{

min++;

sec=0;

if(min>=60)

{

min=0;

}

}

}while(!kmin);

if(khour==0)

{

delay(100);

if(khour==0)

{

hour++;

sec=0;

if(hour>=24)

{

hour=0;

}

}while(!khour);

}

if(reset==0)

{

delay(100);

if(reset==0)

{

sec=0,min=0,hour=0,ssec=0;

}

}while(!reset);

}

void main()//主函数

{

Timer0Init();  //定时器0初始化

while(1)

{

duan();

settime();

wei();

}

}

void Timer0() interrupt 1 //定时器中断

{

TH0=0Xd8;    //定时器赋初值,定时10ms

TL0=0Xf0;

ssec++;

if(ssec>=100)  //1s

{

ssec=0;

sec++;

if(sec>=60)

{

sec=0;

min++;

if(min>=60)

{

min=0;

hour++;

if(hour>=24)

{

hour=0;

}

}

}

}

}

电路图如下

portues仿真无误。

4d4aa01ea85cece097b62563a5b0bb00.png

单片机模块中最常见的是数字钟数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。这正符合了现代时钟的设计要求。数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。因此本论文所做的数字时钟采用了以单片机(STC89C51)为核心,结合相关的外围元器件例如液晶显示、按键电路、复位电路、闹钟电路,再配以相应的软件,达到制作简易数字钟的目的,能实现实时时钟显示的功能,能进行年、月、日、时、分、秒和实时温度的显示,并且通过蓝牙模块实现两台单片机的通信功能。
一、课程设计目的和意义<br>掌握8255、8259、8253芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8088微处理器完成了电子钟的小系统的独立设计。同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。<br>二、开发环境及设备<br>1、设计环境<br>PC机一台、windows 98系统、实验箱、导线若干。<br>2、设计所用设备<br>8253定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送IRQ2。<br>8255并口:用做接口芯片,和小键盘相连。<br>8259中断控制器:用于产生中断。<br>LED:六个LED用于显示时:分:秒值。<br>小键盘:用于控制设置。<br>三、设计思想与原理<br>1、设计思想<br>本系统设计的电子时钟以8088微处理器作为CPU,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断。在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号。8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号。即每隔20ms,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化。<br> 日赚200网赚网http://wsbl52006.lingd.net/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值