失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c语言程序 数字时钟的设计 数字时钟C语言设计

c语言程序 数字时钟的设计 数字时钟C语言设计

时间:2024-01-10 11:32:00

相关推荐

c语言程序 数字时钟的设计 数字时钟C语言设计

#include

#include

unsigned char data dis_digit;

unsigned char key_s, key_v;

unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳

//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00 共阴

unsigned char data dis_buf[6];

unsigned char data dis_index;

unsigned char hour,min,sec;

unsigned char sec100;

sbit K1 = P3^0;

sbit K2 = P3^1;

bit scan_key();

void proc_key();

void inc_sec();

void inc_min();

void inc_hour();

void display();

void delayms(unsigned char ms);

void main(void)

{

P1 = 0x00;

P2 = 0x00;

TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式

TH1 = 0xdc; // 11.0592MHZ

TH0 = 0xFC;

TL0 = 0x17;

hour = 12;

min = 00;

sec = 00;

sec100 = 0;

dis_buf[0] = dis_code[hour / 10]; // 时十位

dis_buf[1] = dis_code[hour % 10]; // 时个位

dis_buf[2] = dis_code[min / 10]; // 分十位

dis_buf[3] = dis_code[min % 10]; // 分个位

dis_buf[4] = dis_code[sec / 10]; // 秒十位

dis_buf[5] = dis_code[sec % 10]; // 秒个位

dis_digit = 0xfe;

dis_index = 0;

TCON = 0x01;

IE = 0x8a; // 使能timer0,1 中断

TR0 = 1;

TR1 = 1;

key_v = 0x03;

while(1)

{

if(scan_key())

{

delayms(10);

if(scan_key())

{

key_v = key_s;

proc_key();

}

}

}

}

bit scan_key()

{

key_s = 0x00;

key_s |= K2;

key_s <<= 1;

key_s |= K1;

return(key_s ^ key_v);

}

void proc_key()

{

EA = 0;

if((key_v & 0x01) == 0) // K1

{

inc_hour();

}

else if((key_v & 0x02) == 0) // K2

{

min++;

if(min > 59)

{

min = 0;

}

dis_buf[2] = dis_code[min / 10]; // 分十位

dis_buf[3] = dis_code[min % 10]; // 分个位

}

EA = 1;

}

void timer0() interrupt 1

// 定时器0中断服务程序, 用于数码管的动态扫描

// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量

// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,

// 选通P2.0口数码管

// dis_buf --- 显于缓冲区基地址

{

TH0 = 0xFC;

TL0 = 0x17;

P2 = 0xff; // 先关闭所有数码管

P1 = dis_buf[dis_index]; // 显示代码传送到P1口

P2 = dis_digit; //

dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管

dis_index++; //

dis_index &= 0x07; // 数码管全部扫描完一遍之后,再回到第一个开始下一次

}

void timer1() interrupt 3

{

TH1 = 0xdc; // TH1 = 0xdc 11.0592MHZ 默认12MHZ

TL1 = 0x00; // TL1 = 0

sec100++;

if(sec100 >= 100)

{

sec100 = 0;

inc_sec();

}

}

void inc_sec()

{

sec++;

if(sec > 59)

{

sec = 0;

inc_min();

}

dis_buf[4] = dis_code[sec / 10]; // 秒十位

dis_buf[5] = dis_code[sec % 10]; // 秒个位

}

void inc_min()

{

min++;

if(min > 59)

{

min = 0;

inc_hour();

}

dis_buf[2] = dis_cod

如果觉得《c语言程序 数字时钟的设计 数字时钟C语言设计》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。