• 大小: 30KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签:

资源简介

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


评论

共有 条评论

相关资源