c语言dc出问题运行不了,小白求助 C语言编程出问题了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include "main.h"

#include "ds1302.h"

code uint8 Ledcode[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x86};

uint8 Time[7]={55,59,11,22,2,2,11};//秒分时日月周年10-08-15 11:59:55

uint8 Led_buf[6];

uint8 Num, Led_n=0, T_n=0;

void delay(uint16 n)

{

while (n--);

}

/*

* 初始化系统定时器

*/

void systimer_init(void)

{

TMOD = 0x01;

TH0 = 0xF8;

TL0 = 0xCC;

TR0 = 0;

ET0 = 1;

TMOD &= 0x0F;

TMOD |= 0x10;

TH1 = 0xDC; // 定时10ms

TL1 = 0x00;

TR1 = 0;

ET1 = 0;

EA = 1;

}

/*

* 判断键值

*/

uint8 scan_key(void)

{

uint8 val=0;

KeyOut1 = 0;

KeyOut2 = 1;

KeyOut3 = 1;

KeyOut4 = 1;

if (KeyIn4 == 0)

{

delay(KEY_DELAY);

if (KeyIn4 == 0)

val = K_ADD;

}

while ((KeyIn1 == 0)||(KeyIn2 == 0)||(KeyIn3 == 0)||(KeyIn4 == 0));

KeyOut1 = 1;

KeyOut2 = 0;

KeyOut3 = 1;

KeyOut4 = 1;

if (KeyIn4 == 0)

{

delay(KEY_DELAY);

if (KeyIn4 == 0)

val = K_LEFT;

}

while ((KeyIn1 == 0)||(KeyIn2 == 0)||(KeyIn3 == 0)||(KeyIn4 == 0));

KeyOut1 = 1;

KeyOut2 = 1;

KeyOut3 = 0;

KeyOut4 = 1;

if (KeyIn4 == 0)

{

delay(KEY_DELAY);

if (KeyIn4 == 0)

val = K_SUB;

}

while ((KeyIn1 == 0)||(KeyIn2 == 0)||(KeyIn3 == 0)||(KeyIn4 == 0));

KeyOut1 = 1;

KeyOut2 = 1;

KeyOut3 = 1;

KeyOut4 = 0;

if (KeyIn2 == 0)

{

delay(KEY_DELAY);

if (KeyIn2 == 0)

val = K_SET;

}

if (KeyIn3 == 0)

{

delay(KEY_DELAY);

if (KeyIn3 == 0)

val = K_ENTER;

}

if (KeyIn4 == 0)

{

delay(KEY_DELAY);

if (KeyIn4 == 0)

val = K_RIGHT;

}

while ((KeyIn1 == 0)||(KeyIn2 == 0)||(KeyIn3 == 0)||(KeyIn4 == 0));

return val;

}

/*

* 制作数码管数据

*/

void make_led_number(void)

{

ET0 = 0;

Led_buf[0] = 0x7F & Ledcode[Time[0]%10];

Led_buf[1] = Ledcode[Time[0]/10];

Led_buf[2] = 0x7F & Ledcode[Time[1]%10];

Led_buf[3] = Ledcode[Time[1]/10];

Led_buf[4] = 0x7F & Ledcode[Time[2]%10];

Led_buf[5] = Ledcode[Time[2]/10];

ET0 = 1;

}

/*

* 启动clock数字闪烁

*/

void start_flash(void)

{

T_n = 0;

Led_buf[2*Num] = 0x7F & Ledcode[Time[Num]%10];

Led_buf[2*Num+1] = Ledcode[Time[Num]/10];

TH1 = 0xDC; // 定时10ms

TL1 = 0x00;

TR1 = 1;

ET1 = 1;

}

/*

* 停止clock数字闪烁

*/

void stop_flash(void)

{

ET1 = 0;

TR1 = 0;

Led_buf[2*Num] = 0x7F & Ledcode[Time[Num]%10];

Led_buf[2*Num+1] = Ledcode[Time[Num]/10];

}

/*

* 时钟设置

*/

void set_clock(void)

{

uint8 k_val, flag=0;

Num = 0;

while (1)

{

k_val = scan_key();

if (k_val == 0)

{

if (flag == 0)

{

start_flash();

flag = 1;

}

continue;

}

flag = 0;

stop_flash();

if (k_val == K_ENTER)

{

set_time(Time);

break;

}

switch (k_val)

{

case K_ADD:

if (Num == 2)

{

if (Time[Num] >= 23)

Time[Num] = 0;

else

Time[Num]++;

}

else

{

if (Time[Num] >= 59)

Time[Num] = 0;

else

Time[Num]++;

}

break;

case K_SUB:

if (Num == 2)

{

if (Time[Num] == 0)

Time[Num] = 23;

else

Time[Num]--;

}

else

{

if (Time[Num] == 0)

Time[Num] = 59;

else

Time[Num]--;

}

break;

case K_LEFT:

if (Num >= 2)

Num = 0;

else

Num++;

break;

case K_RIGHT:

if (Num == 0)

Num = 2;

else

Num--;

break;

default: break;

}

make_led_number();

}

}

/*

* 数码管显示

*/

void show_num(uint8 *buf)

{

ENLED = 1;

switch (Led_n)

{

case 0:

ADDR0 = 0;

ADDR1 = 0;

ADDR2 = 0;

P0 = buf[0];

break;

case 1:

ADDR0 = 1;

ADDR1 = 0;

ADDR2 = 0;

P0 = buf[1];

break;

case 2:

ADDR0 = 0;

ADDR1 = 1;

ADDR2 = 0;

P0 = buf[2];

break;

case 3:

ADDR0 = 1;

ADDR1 = 1;

ADDR2 = 0;

P0 = buf[3];

break;

case 4:

ADDR0 = 0;

ADDR1 = 0;

ADDR2 = 1;

P0 = buf[4];

break;

case 5:

ADDR0 = 1;

ADDR1 = 0;

ADDR2 = 1;

P0 = buf[5];

break;

}

ENLED = 0;

if (Led_n >= 5)

Led_n = 0;

else

Led_n++;

}

main()

{

uint8 k_val;

ADDR3 = 1;

ENLED = 0;

systimer_init();

set_time(Time); //初始时间设定

TR0 = 1;

while (1)

{

read_time(Time);

make_led_number();

k_val = scan_key();

if (k_val == K_SET)

set_clock();

}

}

void time0_isr() interrupt 1

{

ET0 = 0;

TH0 = 0xF8;

TL0 = 0xCC;

show_num(Led_buf);

ET0 = 1;

}

void time1_isr() interrupt 3

{

ET1 = 0;

TH1 = 0xDC; // 定时10ms

TL1 = 0x00;

T_n++;

if (T_n == 50) // 0.5s

{

Led_buf[2*Num] = 0x7F & Ledcode[10];

Led_buf[2*Num+1] = Ledcode[10];

}

else if (T_n >= 100) // 1s

{

T_n = 0;

Led_buf[2*Num] = 0x7F & Ledcode[Time[Num]%10];

Led_buf[2*Num+1] = Ledcode[Time[Num]/10];

}

ET1 = 1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值