有报酬
0
代码
#include "reg52.h"
typedef unsigned int u16; //¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå
typedef unsigned char u8;//¶¨ÒåÎÞ·ûºÅλµÄcharÀàÐÍ
sbit Key1=P1^4; //¿ªÊ¼ºÍÔÝÍ£¼ü
sbit Key2=P1^5; //¸´Î»¼ü
sbit Key3=P1^6; //¼Ó¼ü
sbit Key4=P1^7; //¼õ¼ü
sbit LEDS1=P1^0;//ÊýÂë¹ÜÏÔʾµÚһλ
sbit LEDS2=P1^1;//ÊýÂë¹ÜÏÔʾµÚ¶þλ
sbit LEDS3=P1^2;//ÊýÂë¹ÜÏÔʾµÚÈýλ
sbit LEDS4=P1^3;//ÊýÂë¹ÜÏÔʾµÚËÄλ
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ÏÔʾ0~FµÄÖµ
u8 num=0;//ÏÔʾµÄÊýÖµ
void delay1(u16 i)//ÑÓʱº¯Êý
{3
while(i--);
}
void Timer0Init()//¶¨Ê±Æ÷³õʼ»¯
{
TMOD|=0X01;//Ñ¡ÔñΪ¶¨Ê±Æ÷T0ģʽ£¬¹¤×÷·½Ê½1£¬½öÓÃTRO´ò¿ªÆô¶¯
TH0 = 0XD8;
TL0 = 0XF0;//10ms¶¨Ê±
ET0=1;//´ò¿ª¶¨Ê±T0ÖжÏÔÊÐí
EA=1;//´ò¿ª×Ü¿ª¹Ø
TR0=0;//´ò¿ª¶¨Ê±Æ÷
}
u8 Key_Scan()//°´¼üɨÃ躯Êý
{
static u8 key_up=1;//°´¼ü°´ËÉ¿ª±êÖ¾
if(key_up&&(Key1==0||Key2==0||Key3==0|| Key4==0))
{
delay1(1000);//Ïû¶¶
key_up=0;
if(Key1==0) return 1;
else if(Key2==0)return 2;
else if(Key3==0)return 3;
else if(Key4==0)return 4;
}
else if(Key1==1&&Key2==1&&Key3==1&& Key4==1)
key_up=1;
return 0;// ÎÞ°´¼ü°´ÏÂ
}
void DigDisplay()//ÊýÂë¹Ü¶¯Ì¬É¨Ã躯Êý£¬Ñ»·É¨Ãè8¸öÊýÂë¹ÜÏÔʾ
{
u8 i;
for(i=0;i<2;i++)
{
switch(i) //λѡ£¬Ñ¡ÔñµãÁÁµÄÊýÂë¹Ü
{
case(0):
LEDS1=1;LEDS2=0;P0=smgduan[num%10];break;//ÏÔʾµÚ0λ
case(1):
LEDS1=0;LEDS2=1;P0=smgduan[num/10];break;//ÏÔʾµÚ1λ
}
delay1(1000); //¼ä¸ôÒ»¶Îʱ¼äɨÃè
P0=0x00;//ÏûÒþ
}
}
void main()
{
u8 key;//¼üÖµ
Timer0Init();//³õʼ»¯¶¨Ê±Æ÷10ms
LEDS3=0;
LEDS4=0;
while(1)
{
key=Key_Scan();
if(key==1)
TR0=~TR0;//¶¨Ê±Æ÷¿ª»òÕß¹Ø
if(TR0==0)
if(key==3)
num=num+1;//¼Ó1s
if(key==4)
num=num-1;//¼õ1s
if(key==2)
{
num=0;//¼ÆÊýÖµÇåÁã
TR0=0;//¶¨Ê±Æ÷¹Ø
}
DigDisplay(); //ÊýÂë¹ÜÏÔʾº¯Êý
}
}
void Timer0() interrupt 1//ÖжÏ
{
static u16 i;
TH0 = 0XD8;//10ms¶¨Ê±
TL0 = 0XF0;
i++;
if(i==100)//1sµ½ÁË
{
i=0;
num++;
if(num==100) num=0;
}
}
参考GPT和自己的思路:
根据提供的代码,这是一个基于51单片机的c语言秒表程序的仿真。程序的主要功能是根据按键输入控制计时器计时,同时通过数码管显示经过的时间。具体来说,按下第一个按键可以开始/停止计时,按下第二个按键可以清零计时,按下第三个按键可以将计时加1秒,按下第四个按键可以将计时减1秒。
在仿真时,建议使用ISIS 7 Professional,并将代码下载到单片机板上进行测试。如果出现问题,可以通过调试程序、检查电路连接等方法进行排查。需要注意的是,程序中使用了定时器控制计时,因此建议根据实际需求进行修改,以确保计时的准确性和精度。