数码管时钟显示C程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/* 数码管时钟显示led移动C 程序

使用共阳极数码管

*/

#include<>

#include<>

#define uint unsigned int

#define uchar unsigned char

sbit wela1 = P2^0; 果要显示1~8数值,最好多加前后两位数0跟9, 因为后面++移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/

uchar code tablew[]={

0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f}; 如果要显示,也会因为++而在第二轮中显示出*/

duan=1; //开启段显端

P0=tabled[numd];//附段显P0值对应段显值对码表

duan=0; //锁存

wei=1; //开启位显端

P0=tablew[numw];//附位显P0值对应位显值对码表

wei=0; //锁存

numw++; //相当于位显移位

if(numw==8) //如果位显值到对应位显对码表第八位则转下执行

numw=0; //重新附值位显值对应对码表第0位起

/*

下面是简单的单个数码管显示例证第一骤, 修改后在第三步骤内

#include""

#include""

sbit duan=P2^6; //段显端口

sbit wei=P2^7; //位显端口

void main()

{

//P0=0xff; 数码管不显示任何信号,默认情况下通电本身就不显示,可以不写

duan=1; //开启段显端口

P0=0x06; //附值段显数值为1,可以查阅数码管电路图相对应显示的对码表

duan=0; //锁存,保持上一步段显状态,硬件说明请查阅74HC573功能

wei=1; //开启位显端口

P0=0xfe; //附值位显位置,01111111,左边第一位,为0的显示

wei=0; //锁存,保持上一步位显状态,硬件说明请查阅74HC573功能

}

*/

}

}

}

void timer0() interrupt 1 /*第四步骤,中断时间函数这个相当于移位数显的速度,速度够快,人眼就会有余辉效应,

感觉8位数显一直在亮着,相当于正在播放的电影胶卷*/

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

a++;

}

/*

以上有什么地方还需要改进的还请老师明示

*/

//**作者:胡甲如需转载请注明出处**//

//**湖北工业大学工程技术学院通信专业**//

//**单片机SST89E58RD 8位共阳数码管12M晶振**// //*******P0段选,P2位选*******//

//********2008年12月1号********//

#include ""

#define uchar unsigned char

#define uint unsigned int

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; uchar n;

uchar hh,mm,ss;

uchar nhh,nmm,nss;

uint year;

uchar day,mon,week;

uchar hhs,hhg,mms,mmg,sss,ssg;

uchar days,dayg,mons,mong;

uchar nhhs,nhhg,nmms,nmmg,nsss,nssg;

uchar set1=1,set2=1;

sbit fm=P3^2;

sbit k1=P3^4;

sbit k2=P3^5;

sbit k3=P3^6;

sbit k4=P3^7;

uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年

uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年

void jishi();

void baoshi();

void alarm();

void set_time();

void set_alarm();

void set_mdw();

void key_change();

void key_set();

void delay(int m) //延时程序,延时m*

{

uint i;

uint j;

for (i=0;i

{

for(j=0;j<500;j++){}

}

}

void timer0() interrupt 1

{

TMOD=0x01;

TH0=0x3c;

TL0=0xb1;

n++;

jishi();

}

main()

{

TMOD=0x01;

TH0=0x3c;

TL0=0xb1;

TR0=1;

EA=1;

ET0=1;

hh=12;mm=00;ss=00;

nhh=7;nmm=30;nss=0;

year=2008;mon=12;day=1;week=1;

while(1)

{

hhs=hh/10%10;//时分秒

hhg=hh%10;

mms=mm/10%10;

mmg=mm%10;

sss=ss/10%10;

ssg=ss%10;

nhhs=nhh/10%10;//闹钟

nhhg=nhh%10;

nmms=nmm/10%10;

nmmg=nmm%10;

nsss=nss/10%10;

nssg=nss%10;

days=day/10%10;//月日

dayg=day%10;

mons=mon/10%10;

mong=mon%10;

key_change(); //k1按键扫描

key_set(); //k2按键扫描

set_time(); //设置时间

set_mdw(); //设置月日星期

set_alarm(); //设置闹钟

if(set1==1) //正常走时显示

{

P0=tab[hhs];P2_7=0;delay(1);P2_7=1;//时十位P0=tab[hhg];P2_5=0;delay(1);P2_5=1;//时个位P0=tab[10];P2_3=0;delay(1);P2_3=1;//"-"

P0=tab[mms];P2_1=0;delay(1);P2_1=1;//分十位P0=tab[mmg];P2_6=0;delay(1);P2_6=1;//分个位P0=tab[10];P2_4=0;delay(1);P2_4=1;//"-"

P0=tab[sss];P2_2=0;delay(1);P2_2=1;//秒十位P0=tab[ssg];P2_0=0;delay(1);P2_0=1;//秒个位}

相关文档
最新文档