#include <reg51.h>
#include <display6_s.h>
sbit k1 = P3^2;
sbit k2 = P3^3;
sbit k3 = P3^4;
unsigned char count; //50ms计数
unsigned char second; //1s计数
unsigned char minute; //1m计数
unsigned char hour; //1h计数
unsigned char time[6]; //时分秒
void delay1(unsigned int k)
{ unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<100;j++);
}
void Timer_init()
{
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
TL0=0xb7;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
/*--------------------------------------------------------------*/
//按键处理程序
void Keyscan()
{
if(k1==0)
{
delay1(10); //延时
if(k1==0)
second=0;
while(k1==0); //松手检测
}
if(k2==0)
{
delay1(10);
if(k2==0)
{
minute++;
if(minute==60)
minute=0;
while(k2==0);
}
}
if(k3==0)
{
delay1(10);
if(k3==0)
{
hour++;
if(hour==24)
hour=0;
while(k3==0);
}
}
}
void timer0() interrupt 1 //T0定时器中断服务
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
time[5]=second%10;
time[4]=second/10+10;
time[3]=minute%10+10;
time[2]=minute/10+10;
time[1]=hour%10+10;
time[0]=hour/10;
}
}
?
void main()
{
Timer_init();
while(1)
{
Keyscan();
display(time);
}
}
用的是CD4094,动态扫描方式
#ifndef _display_
#define _display_
#include <intrins.h>
sbit DATA="P3"^0;
sbit CLK="P3"^1;
unsigned char data display_bit;
unsigned char code
led[]={
0xbb,0x88,0x3d,0xad,0x8e,
0xa7,0xb7,0x89,0xbf,0xaf,//不带点
0xFB,0xC8,0x7D,0xED,0xCE,
0xE7,0xF7,0xC9,0xFF,0xEF};//带点
//延时程序
void delay(unsigned int k)
{ unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<100;j++);
}
//数据传输
void send(unsigned char a)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(_crol_(a,i)&0x80)
DATA=1;
else
DATA=0;
CLK=0;
CLK=1;
}
}
//显示程序 6位LED数码管扫描
void display(unsigned char display_buffer[6])
{
unsigned char i,k;
display_bit=0x01;
for(i=0;i<6;i++)
{
k=led[display_buffer];
send(k);
P1=display_bit;
delay(0x01);
P1=0;
display_bit=_crol_(display_bit,1);
}
display_bit=0x01;
文章评论(0条评论)
登录后参与讨论