给前辈们看看我写的简易数字钟

1030486762567 2016-11-02 12:27:45

两片595控制数码管 key0 闪烁key1 key2 加减
//简易数字钟
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int

sbit SH=P2^4;//11 移位
sbit DS=P2^5;//9 数据输入
sbit ST=P1^5;//12 存
sbit key0=P3^2;//key_int0
sbit key1=P3^3;//key_int1
sbit key2=P3^4;//key_ET0
sbit key3=P3^5;//key_ET1
uchar code MM[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,
0xbf,0xff
};//0xBF-> "-"0xff熄灭
uchar code WW[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar led[8];
uchar sec,min,hou;
uchar flag_sec,flag_min,flag_hou,flag,flag_num;
uchar k;
void sendbyte(uchar byte);
void showbyte();
void delay(uchar i);
void display();
void getvalue();
void clock();
void key();
void time_init();

void main()
{
time_init();
flag_num=0;
while(1)
{
if((flag)&&(flag_num==1))
led[7] = 17;
else led[7] = hou/10;
if((flag)&&(flag_num==1))
led[6] = 17;
else led[6] = hou%10;
led[5] = 16;
if((flag)&&(flag_num==2))
led[4] = 17;
else led[4] = min/10;
if((flag)&&(flag_num==2))
led[3] = 17;
else led[3] = min%10;
led[2] = 16;
if((flag)&&(flag_num==3))
led[1] = 17;
else led[1] = sec/10;
if((flag)&&(flag_num==3))
led[0] = 17;
else led[0] = sec%10;

key();
}
}

void key()
{
if(!key0)
{
delay(100);
if(!key0)
{
//while(!key0);
delay(130);
flag_num++;
if(flag_num==4) flag_num=0;
}
}

if(!key1)//加
{
delay(100);
if(!key1)
{
//while(!key1);
delay(130);
if(flag_num==1)
{
hou++;
if(hou==24) hou=0;
}
if(flag_num==2)
{
min++;
if(min==60) min=0;
}
}
}

if(!key2)//减
{
delay(100);
if(!key2)
{
//while(!key2);
delay(130);
if(flag_num==1)
{
hou=hou-1;
if(hou==-1)
hou=23;
}
if(flag_num==2)
{
min=min-1;
if(min==-1)
min=59;
}
}
}
}

void time_init()
{
TMOD = 0X11;
EA = 1;
ET1 = 1;
ET0 = 1;
TH1 = 0XEC;//延时5ms
TL1 = 0X78;

TH0 = 0X3C;
TL0 = 0XB0;
TR1 = 1;
TR0 = 1;
}

void sendbyte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
if((byte<<i) & 0x80)
DS=1;
else
DS=0;//送一个 位
SH=0;
SH=1;//移位
}
}


void showbyte()
{
ST=0;
ST=1;//锁存
}

void delay(uchar i)
{
uchar j;
for(i;i>0;i--)
for(j=200;j>0;j--);
}

void display()//显示数字
{
uchar i;
for(i=0;i<8;i++)
{
sendbyte(MM[led[i]]);//段码
sendbyte(WW[i]);//SEG //1110e 0001
showbyte();
delay(9);
}
}

void clock()
{
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hou++;
if(hou>23)
{
hou=0;
}
}
}
}


void time1() interrupt 3
{
display();
TH1 = 0XEC;//b1df 3caf
TL1 = 0X78;
TR1 = 1;
}

void time0() interrupt 1
{
k++;
if(k==21)
{
k=1;
clock();
}

if((k%5)==0)
flag=1;//定时器中设置 闪烁位
else
flag=0;

TH0 = 0X3C;//b1df 3caf
TL0 = 0XB0;
TR1 = 1;
}
...全文
530 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
玉怀一捧雪 2016-11-05
  • 打赏
  • 举报
回复
厉害,过来接分
1030486762567 2016-11-04
  • 打赏
  • 举报
回复
呵呵抱歉,没什么问题,只是 一个简单的程序 写了 这么久。
依然冷暖 2016-11-04
  • 打赏
  • 举报
回复
想要秀可以发到博客里去
uid123 2016-11-02
  • 打赏
  • 举报
回复
然鹅,问题呢?问题在哪??
91program 2016-11-02
  • 打赏
  • 举报
回复
什么问题呢? 还是只是让大家“欣赏”你的代码。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧