资源简介
里面有两个程序,一种为简单的数字钟+万年历,一种为按键较多的数字钟+万年历,都是用数码管显示,另外两个程序都附带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
相关资源
- 基于STC89C51单片机的数字抢答器——毕
- 51单片机智能扫地机器人
- Proteus仿真AD0808
- 基于51单片机的万年历
- 51单片机频率计设计
- 51_I2C模拟通信
- 基于RS485总线的PC与单片机多机通信系
- 红外线遥控Proteus仿真电路+发射+接收
- 51单片机资料\\基于单片机的函数信号
- 单片机reg52.h
- 基于单片机的WIFI手机端显示图像控制
- 51单片机串口通信程序 含详细
- 基于Proteus的单片机RS232与RS485应用案例
- MSP430单片机I2C应用笔记
- 基于C52单片机和车流量调节红绿灯时
- 51单片机AD转换程序及仿真图
- 声控小车凌阳.rar
- MSP430单片机AD转换电压值带字库12864液
- 51单片机 矩阵键盘计算器
- STC12c5a60s2最小系统
- 单片机测量方波的频率、占空比及相
- 基于PROTEUS的单片机AD转换仿真
- 基于单片机8路电压表(汇编).
- 基于单片机的DS18B20温度采集,液晶屏
- 基于51单片机SHT11温湿度传感器检测程
- 8051单片机最小系统电路原理图
- keil+proteus仿真单片机交通灯
- 51单片机和proteus仿真红外遥控
- 51单片机秒表课程设计
- 基于单片机的电子琴proteus仿真,可演
评论
共有 条评论