user-0 提问: 真心求大神帮忙  已经有图 但是没有程序

回复:
user: user-0
content: 但是这个程序不能用的仿真图里面的要求啊  要怎么改呢

user: user-1
content: 学生吧，proteus,有什么问题吗？这个程序没啥难度。

user: user-0
content: #include<reg52.h> #include ".\LCD1602\LCD1602.h"     //调用LCD1602里的函数 #define uchar unsigned char		   //宏定义 #define uint unsigned int		   //宏定义 uchar c=0,e=0,i=0,t=5; unsigned char ss; sbit L=P1^3;     //提示灯 sbit K1=P1^4;    //用于给A对加分 sbit K2=P1^5;    // 给A对减分 sbit K3=P1^6; 	 // 给B对加分 sbit K4=P1^7;    //给B对减分 sbit K5=P3^0;	 //比赛开始暂停按键 /**************按键控制分数*****************/ void key() { 	if(TR0==0) 	{ 		K1=1;				 //中断没开始的时候，K1置1，按键锁定 		K2=1;				 //中断没开始的时候，K2置1，按键锁定 		K3=1;				 //中断没开始的时候，K3置1，按键锁定 		if(K4==0) 		{ 			c=0;			//中断没开始的时候，A队分数置0 			e=0;			//中断没开始的时候，B对分数置0 			t=5;			//中断没开始的时候，倒计时时间置5 			L=1;			//中断没开始的时候，K1置0 		 }				//在中断结束，按键K4控制分数时间以及提示灯的复位 	 }                   //当中断关闭时，K1、K2、K3键锁定，不能使用 	if(TR0==1) 	{ 	 	if(K1==0) 		{ 			c++; 			while(K1==0);	 //消抖，按键放开的时候分数加1 		}				     //按键K1控制A队分数     加 		if(K2==0) 		{ 			c--; 			if(c==-1) 			{ 				c=0; 			} 			while(K2==0);	 //消抖，按键放开的时候分数减1				 		 }					 //按键K2控制A队分数     减 		if(K3==0) 		{ 			e++; 			while(K3==0);	 //消抖，按键放开的时候分数加1 		 }					 //按键K3控制B队分数     加 		if(K4==0) 		{ 			e--; 			if(e==-1) 			{ 				e=0; 			} 			while(K4==0);	 //消抖，按键放开的时候分数减1 		 } 	   }				    //按键K4控制B队分数     减 	  if(K5==0) 	  { 		if(K5==0) 		{ 			TR0=~TR0;		 //定时器的启动与暂停 		} 		while(K5==0);		 //消抖，按键放开的时候K5操作有效 	  }						 //K5控制定时器的启动，进入倒计时 } /*****************中断函数初始化**********************/ void time() { 	TMOD=0x01;		  // 0000  0001   中断方式设置，T0设置在方式1 	TH0=15536/256; // 初值设定，（65536-x）*12/(12*10^6)=50*10^3 	TL0=15536%256;	 	ET0=1;			//  中断允许标志 	EA=1;		   //  中断总开关打开 } /********************主函数***********************/ void main(void) { 	LCD_init();									   //LCD初始函数调用 	time();										   //中断初始函数调用 	while(1) 	{ 		write_LCD_str(0,0," A : B");			   //显示字符串 		write_LCD_str(10,0,"Time");  		write_LCD_char(0,1,c/10+0x30);			   //A队分数十位显示 		write_LCD_char(1,1,c%10+0x30);			   //A队分数个位显示 		write_LCD_str(2,1," : "); 		write_LCD_char(5,1,e/10+0x30);			   //B队分数十位显示 		write_LCD_char(6,1,e%10+0x30);			   //B队分数个位显示  		write_LCD_char(11,1,t/10+0x30);			   //分钟十位此案时 		write_LCD_char(12,1,t%10+0x30);			   //分钟个位显示 		write_LCD_str(13,1,":"); 		write_LCD_char(14,1,ss/10+0x30);		   //秒钟十位显示 		write_LCD_char(15,1,ss%10+0x30);		   //秒钟个位显示 		key();									      //按键函数调用 	} } /***************中断倒计时**********************/ void jk() interrupt 1 {	 	TH0=15536/256;								//初值 	TL0=15536%256; 	i++; 	if(i>19)							//当i加到20的时候，程序往下运行    	{ 										   		i=0;									      	ss--;									//秒数减运算 	 	if(ss==-1)								//当秒数减到小于0的时候 	 	{  			ss=59; 								 	  		t--;								//分数减运算 	   		if(t==-1)							//当分数减到小于0的时候 	   		{  				t=0;							//时间分钟后显示为0 	     		ss=0;							//时间秒钟后显示为0 				L=~L;	 						//点亮提示灯 				TR0=0;	 //当时间减到0的时候，时间显示为00:00，关闭中断 		 	 } 		  } 	  } 	}

user: user-2
content: 这个电路有问题，P0.0-P0.7接数码管还需要串一个限流电阻

user: user-3
content: 引用 楼主 sinat_21986757 的回复: 帮忙用c语言写的 1)设计一个比赛记分牌，用4位LED显示比赛两方的分数（每方分数用2位LED表示）。比赛开始时显示零分。 2)每方都有得分按键和减分按键，得分按键每按一次加一分，减分按键每按一次减一分，并用数码管显示累计的分数。 这个程序很简单： 1，设计一个让数码管正常显示字符的模块； 2，设计一个模加的算法； 3，设计好按键中断； 4，把结果显示到数码管上。 我以前用汇编写了个带闹钟的电子时钟，代码也不过600行而已，你的个功能很简单，用c语言写200行应该完全可以搞写了。

user: user-4
content: 要说怎么改，真是麻烦。你自己好好理解了改吧。51单片机的东西忘光了。

user: user-5
content: 刚看郭天祥的单片机第一课。。。