本帖最后由 kamfun 于 2011-5-5 13:56 编辑
要求如下:
(1. 开机时,显示12:00:00的时间开始计时;
(2. P0.0/AD0控制“秒”的调整,每按一次加1秒;
(3. P0.1/AD1控制“分”的调整,每按一次加1分;
(4. P0.2/AD2控制“时”的调整,每按一次加1个小时;
我的程序没错,但功能不能实现,为什么??
要求如下:
(1. 开机时,显示12:00:00的时间开始计时;
(2. P0.0/AD0控制“秒”的调整,每按一次加1秒;
(3. P0.1/AD1控制“分”的调整,每按一次加1分;
(4. P0.2/AD2控制“时”的调整,每按一次加1个小时;
我的程序没错,但功能不能实现,为什么??
#include<reg52.h>
#define SEG P0
#define uchar unsigned char
#define uint unsigned int
sbit AD0=P3^2; //定义按键
sbit AD1=P3^3; //定义按键
sbit AD2=P3^4; //定义按键
void delay(int);//延迟函数
unsigned long
times=120000;
int ID=0;
uchar TAB[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0~9
uchar LED_W[6] = {2,3,4,5,6,7}; //通过38译码器选中特定的 数码管
char disp[6]={0x06,0x5b,0x3f,0x3f,0x3f,0x3f}; //初始显示120000
unsigned long save_hours,save_minutes,save_seconds,pass_num;
void pass( unsigned long);
void display( void);
void dispose(void);
void scan(void);
void init(void);
void main()
{
while(1)
{
dispose();
display();
}
}
void init(void)
{
uchar i = 0,j = 0;
SEG = disp
; // i 值的 个位数
P2 = LED_W[j]; //点亮第一位数码管利用三八译码器依次选择点亮八数码管,
delay(2);
j++;
i++;
if(j ==6) //利用 j 值的变化,来控制数码管数值变化间隔的时间
{
j = 0;
i = 0;
}
}
void dispose(void)
{
if(AD0==0)
{
delay(20);
while(AD0!=1);
delay(20);
if(times<235959)
save_hours=times+=10000;
ID=1;
}
if(AD1==0)
{
delay(20);
while(AD1!=1);
delay(20);
if(times<235959)
save_minutes=times+=100;
ID=2;
}
if(AD2==0)
{
delay(20);
while(AD0!=1);
delay(20);
if(times<235959)
save_seconds=times++;
ID=3;
}
}
void display( )
{
switch(ID)
{ case 0: pass(times);
init();break;
case 1: pass(save_hours);
scan();break;
case 2: pass(save_minutes);
scan();break;
case 3: pass( save_seconds);
scan(); break;
}
}
void scan(void)
{
uchar i = 0,j = 0;
SEG = TAB[disp]; // i 值的 个位数
P2 = LED_W[j]; //点亮第一位数码管利用三八译码器依次选择点亮八数码管,
delay(2);
j++;
i++;
if(j ==6) //利用 j 值的变化,来控制数码管数值变化间隔的时间
{
j = 0;
i = 0;
}
}
void pass( unsigned long x)
{
disp[5]=TAB[x/100000]; //时
disp[4]=TAB[x/10000];
disp[3]=TAB[x/1000]; //分
disp[2]=TAB[(x/100)%10];
disp[1]=TAB[(x/10)%10]; // 秒
disp[0]=TAB[x%10];
}
//===延迟函数================================
void delay(int x) // 延迟函数开始
{
int i,j; // 声明变量
for(i=0;i<x;i++) // 连数x次,约xms
for(j=0;j<120;j++); // 数120次,约1ms
} // 延迟函数结束
呵呵~原来这样,那先谢啦。上面是我改之后的,用unsigned long类型,管脚我也定义好了,但是当我初始化时不会显示120000旭,而是显示奇怪的5,按下自会出现5,6,7一个数字的跳变,是我的程序编得不好还是什么的?请高手再指点一下小弟,谢谢~~
一周热门 更多>