资源简介
51单片机实现了数码管和时钟芯片ds1302显示时间
代码片段和文件信息
/* 注意! !!!! 普中单片机程序!!! ! (已修复长时间按键出现卡机的bug)
此程序实现
数码管显示电子表
按s16键暂停或启动;
当暂停状态时,数字下出现小数点表示可以改动的位置。
按s13键小数点循环向左移动一位。s14键小数点循环向右移动一位
按s1~s10分别将当前位置数字改为1~0*/
#include
#include
#define xuan P0
#define uint unsigned int
#define uchar unsigned char
#define KEY P1
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code words[11]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x00};//0~9
uchar code word[11] ={0xbf0x860xdb0xcf0xe60xed0xfd0x870xff0xef0x00};// 0.~9.
uchar p=2;
uchar time=0;
uchar n=0; //显示位置
uchar second=0;
uchar minite=0;
uchar hour=12;
uchar keyvalue=16;
uchar l=0xfe;
bit pd=1;
void delay1ms(uint); //延时函数
void keys(); //检测矩阵键盘函数
void scan(uchar miaouchar fenuchar shi);//声明显示函数
void Timer_begain(); //声明计时器
void main()
{
Timer_begain();
while(1)
{
if(TR0==1)
{
if(time>=20)
{
time=0;
second++;
}
if(second>=60)
{
second=0;
minite++;
}
if(minite>=60)
{
minite=0;
hour++;
}
if(hour>=24)
{hour=0;}
}else
if(second>=60)
{
second=second%10;
}
if(minite>=60)
{
minite=minite%10;
}
if(hour>=24)
{hour=0;}
keys();
scan(secondminitehour);
while(p--);
xuan=0x00;
}
}
void scan(uchar miaouchar fenuchar shi)//显示函数
{
xuan=0x00;
switch(n)
{
case(0):
LSA=0;LSB=0;LSC=0;
if(l==0x01)
{ xuan=word[miao%10];
}
else xuan=words[miao%10];break;
case(1):
LSA=1;LSB=0;LSC=0;
if(l==0x02)//第1位
{
xuan=word[miao/10];
}
else xuan=words[miao/10];break;
case(2):
LSA=0;LSB=1;LSC=0;
xuan=0x40;break;
case(3):
LSA=1;LSB=1;LSC=0;
if(l==0x08)//第3位
{
xuan=word[fen%10];
}
else xuan=words[fen%10];break;
case(4):
LSA=0;LSB=0;LSC=1;
if(l==0x10)//第4位
{
xuan=word[fen/10];
}
else xuan=words[fen/10];break;
case(5):
LSA=1;LSB=0;LSC=1;
xuan=0x40;break;
case(6):
LSA=0;LSB=1;LSC=1;
if(l==0x40)//第6位
{
xuan=word[shi%10];
}
else xuan=words[shi%10];break;
case(7):
LSA=1;LSB=1;LSC=1;
if(l==0x80)//第8位
{
xuan=word[shi/10];
}
else xuan=words[shi/10];break;
}
n++;
if(n>7)
n=0;
}
void keys()
{
uchar a=0;
KEY=0x0f;
if(KEY!=0x0f)
{
delay1ms(1);
a++;
a=0;
if(KEY!=0x0f)
{
KEY=0x0f; //置第一行都为高电平
ET0=0;
delay1ms(1);
switch(KEY) //检测列
{
case(0X07):keyvalue=0;break;
case(0X0b):keyvalue=1;break;
case(0X0d):keyvalue=2;break;
case(0X0e):keyvalue=3;break;
default:keyvalue=16;break;
}
KEY=0xf0; //置第一列都为高电平
delay1ms(10);
switch(KEY
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8036 2016-04-06 22:53 时钟(数码管)\时钟\ex.c
文件 19752 2016-04-06 22:53 时钟(数码管)\时钟\ex.LST
文件 13887 2016-04-06 22:53 时钟(数码管)\时钟\ex.OBJ
文件 11261 2016-04-06 22:53 时钟(数码管)\时钟\信息
文件 5736 2016-04-06 22:53 时钟(数码管)\时钟\信息.hex
文件 23 2016-04-06 22:53 时钟(数码管)\时钟\信息.lnp
文件 14776 2016-04-06 22:53 时钟(数码管)\时钟\信息.M51
文件 161 2016-04-06 22:53 时钟(数码管)\时钟\信息.plg
文件 55208 2016-04-06 22:53 时钟(数码管)\时钟\信息.uvopt
文件 13221 2016-04-06 22:53 时钟(数码管)\时钟\信息.uvproj
文件 55208 2016-04-06 22:53 时钟(数码管)\时钟\信息_uvopt.bak
文件 13222 2016-04-06 22:53 时钟(数码管)\时钟\信息_uvproj.bak
目录 0 2017-05-03 19:24 时钟(数码管)\时钟
目录 0 2017-05-03 19:24 时钟(数码管)
----------- --------- ---------- ----- ----
210491 14
- 上一篇:fdc2214模块原理图
- 下一篇:网页设计常用的英文单词
评论
共有 条评论