资源简介
里面有两个程序,一种为简单的数字钟+万年历,一种为按键较多的数字钟+万年历,都是用数码管显示,另外两个程序都附带protues仿真图,且已调通,程序也不需改,另外还有静态显示

代码片段和文件信息
#include
#define uchar unsigned char
#define uint unsigned int
uint T0_countercount;
uchar code Tab[]={
0xc00xf90xa40xb0
0x990x920x820xf8
0x800x900xbf}; //数字编码
uchar hour=00min=59sec=50b=0i;//初始化显示
uint mon=10day=22year=2013a;
/*****控制按钮********/
sbit fuwei=P1^3;
sbit moshi=P1^4;
sbit miao=P1^0;
sbit fen=P1^1;
sbit shi=P1^2;
/********定时器********/
void dinshiqi()
{
TMOD=0x01; //定时器0的工作方式设置为2(0000 0010)
TH0=(65536-50000)/256; //装初值0.1s
TL0=(65536-50000)%256;
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
EA=1;
}
/*****************延时*****************/
void delay()
{uchar i;
for(i=0;i<200;i++);}
void yanshi(void) //延时
{
unsigned char xy;
for(x=0;x<200;x++)
for(y=0;y<200;y++);}
/***********键盘扫描************/
void kbscan1()
{
if(miao==0) //判断是否有按键按下miao
{
yanshi();
if(miao==0)
sec++;
if(sec==60)
sec=0;
while(miao==0);}
if(fen==0) //判断是否有按键按下.fen
{
yanshi();
if(fen==0)
min++;
if(min==60)
min=0;
while(fen==0);}
if(shi==0) //判断是否有按键按下shi
{
yanshi();
if(shi==0)
hour++;;
if(hour==24)
hour=0;
while(shi==0);}
if(moshi==0) //切换万年历
{
yanshi();
if(moshi==0)
b++;
if(b==2)
b=0;
while(moshi==0);}
if (fuwei==0) //复位按键
{sec=0;min=0;hour=0;}
}
//************************************************
void kbscan2()
{
if(shi==0) //年加1
{
yanshi();
if(shi==0)
year++;
while(shi==0);
}
if(fen==0) //月加1
{
yanshi();
if(fen==0)
mon++;
if(mon==13)
mon=1;
while(fen==0);
}
if(moshi==0) //切换数字钟
{
yanshi();
if(moshi==0)
b++;
if(b==2)
b=0;
while(moshi==0);
}
if(miao==0) //日加1
{
yanshi();
if(miao==0)
day++;
if(day==a+1)
day=1;
}
while(miao==0);
if (fuwei==0) //复位按键
{day=22;mon=10;year=2013;}
}
/****************数字钟和万年历子程序********************/
void hms(void) //数字钟子函数
{
P3=0x01; //位选
P2=Tab[hour/10]; //显示时的十位
delay();
P3=0x02; //位选
P2=Tab[hour%10]; //显示时的个位
delay();
P3=0x24; //位选
P2=0xbf; //显示横杠
delay();
P3=0x08; //位选
P2=Tab[min/10]; //显示分的十位
delay();
P3=0x10; //位选
P2=Tab[min%10]; //显示分的个位
delay();
P3=0x24; //位选
P2=0xbf; //显示横杠
delay();
P3=0x40; //位选
P2=Tab[sec/10]; //显示秒的十位
delay();
P3=0x80; //位选
P2=Tab[sec%10]; //显示秒的个位
delay();
}
//******************************************************
void wannianli(void) //万年历子函数
{ P2=0xff; //消影(清零)
P3=0x00;
P3=0x01; //位选
P2=Tab[year/1000]; //年的千位
delay();
P2=0xff; //消影(清零)
P3=0x00;
P3=0x02; //位选
P2=Tab[year/100%10]; //年的百位
delay();
P2=0xff; //消影(清零)
P3=0x00;
P3=0x04; //位选
P2=Tab[year%100/10]; //年的十位
delay();
P2=0xff; /
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 285696 2012-04-25 15:49 电子时钟课程设计报告.doc
----------- --------- ---------- ----- ----
285696 1
相关资源
- 单片机音乐倒数定时器的设计
- STC15F
- 51单片机通信采样proteus仿真方波转化
- 51 单片机 红外避障小车 大集合136
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 利用DS1302和msp430进行闹钟和万年历的
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
评论
共有 条评论