微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于8051和Proteus的数字时钟 程序的编写和仿真

基于8051和Proteus的数字时钟 程序的编写和仿真

时间:10-19 来源:互联网 点击:

本程序功能及特点:通过8051芯片及数码管实现数字时钟,并可以通过如下图中的两个按键对时钟进行调节,其中 “PAUSE”按键的作用是暂停/启动时钟并选择要修改的时间参数“时”,“分”,“秒”,被选择参数例如下图中从左到右依次为“时,分,秒”,当小时被选中并被修改时会有最下面两点的点亮以作为提示,“CHANGE”按键用来对被选中的参数进行修改,只能进行加法修改,超过参数的上限会自动归零,

注:本程序仅供本人日后学习参考使用,不足之处请见谅,

#include

sbit dualock=P2^0;

sbit weilock=P2^1;

unsigned char code duacode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

unsigned char aa=0,hour=0,mint=0,sec=0,bb=0,*choose;

void display(unsigned char,unsigned char,unsigned char);

void delay();

void init();

void main()

{

init();

while(1)

{

display(hour,mint,sec);

}

}

void init() //初始化

{

EA=1; ET0=1;

EX0=1;IT0=1;

EX1=1;IT1=1;

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

TR0=1;

}

void display(unsigned char hour,unsigned char mint,unsigned char sec) //显示函数

{

weilock=1;

P0=~(1<<0);

weilock=0;

dualock=1;

P0=(bb==1)?duacode[sec%10]|0x80:duacode[sec%10];

dualock=0;

delay();

weilock=1;

P0=~(1<<1);

weilock=0;

dualock=1;

P0=(bb==1)?duacode[sec/10]|0x80:duacode[sec/10];

dualock=0;

delay();

weilock=1;

P0=~(1<<2);

weilock=0;

dualock=1;

P0=(bb==2)?duacode[mint%10]|0x80:duacode[mint%10];

dualock=0;

delay();

weilock=1;

P0=~(1<<3);

weilock=0;

dualock=1;

P0=(bb==2)?duacode[mint/10]|0x80:duacode[mint/10];

dualock=0;

delay();

weilock=1;

P0=~(1<<4);

weilock=0;

dualock=1;

P0=(bb==3)?duacode[hour%10]|0x80:duacode[hour%10];

dualock=0;

delay();

weilock=1;

P0=~(1<<5);

weilock=0;

dualock=1;

P0=(bb==3)?duacode[hour/10]|0x80:duacode[hour/10];

dualock=0;

delay();

}

void delay()

{

unsigned char i=30;

while(i--);

}

void ext0() interrupt 0 //外部中断0 选中被修改参数

{

TR0=0; bb++;

switch(bb)

{

case 1: choose=&sec; break;

case 2: choose=&mint;break;

case 3: choose=&hour;break;

case 4: TR0=1;bb=0; break;

}

}

void timer0() interrupt 1

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

if(++aa==20) {aa=0;sec++;}

if(sec==60) {sec=0;mint++;}

if(mint==60) {mint=0;hour++;}

}

void ext1() interrupt 2 // 外部中断2 对被选中参数进行修改

{

*choose+=1;

if(sec==60) sec=0;

if(mint==60) mint=0;

if(hour==24) hour=0;

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top