求人帮忙写个程序

2019-07-16 05:05发布

本帖最后由 小杰杰 于 2012-7-24 12:12 编辑

       帮忙写个打地鼠的程序,精通C语言的人来说应该是很简单的!!
S2X56T[P$A$H_WLP[V8~O6I.jpg
要求如下:
        1、按照上图的 按键和LED一一对应
        2、LED = 0时点亮,=1时灭  ,KEY == 1  时视为按下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
scan0123
1楼-- · 2019-07-16 06:31

程序如下:#include<reg51.h>
#define uchar unsigned char
#define disp P0
#define dispbit P1
#define hit P2
#define rat P3
sbit k0=P2^0;//敲击
sbit k1=P2^1;
sbit k2=P2^2;
sbit k3=P2^3;
sbit k4=P2^4;
sbit k5=P2^5;
sbit k6=P2^6;
sbit k7=P2^7;
sbit r0=rat^0;//地鼠
sbit r1=rat^1;
sbit r2=rat^2;
sbit r3=rat^3;
sbit r4=rat^4;
sbit r5=rat^5;
sbit r6=rat^6;
sbit r7=rat^7;
uchar code dispbitcode[4]={0x01,0x02,0x04,0x08};
uchar code dispcode[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar dispdat[4]={10,10,10,10};
uchar lv=0x01;//关数
uchar sec=50;
uchar secup=0x00;
uchar dat=0x00;
uchar stat=0x00;//状态
uchar rats;//地鼠数
uchar ratstat=0xff;
uchar tt1=0x00;void delay(void)
{
uchar i;
for(i=125;i>0;i--);
}void lvup(void)
{
dispdat[0]=lv/10;
dispdat[1]=lv%10;
dispdat[2]=10;
dispdat[3]=10;
rats=10+lv*2;
}void key0(void)
{
if(~k0)
{
  delay();                       //去抖
  if(~k0)
  {
   while(~k0)                 //等待释放
   {;}
   if(lv>1){lv--;lvup();}
  }
}
if(~k1)
{
  delay();
  if(~k1)
  {
   while(~k1)
   {;}
   if(lv<99){lv++;lvup();}
  }
}
if(~k2)
{
  delay();
  if(~k2)
  {
   while(~k2)                 //等待释放
   {;}
   {stat=0x01;}
  }
}
}void key(void)
{
if(~k0)
{
  delay();                       //去抖
  if(~k0)
  {
   while(~k0)                 //等待释放
   {;}
   if(~r0){rats--;r0=~r0;ratstat=rat;}else rats++;
  }
}
if(~k1)
{
  delay();                       //去抖
  if(~k1)
  {
   while(~k1)                 //等待释放
   {;}
   if(~r1){rats--;r1=~r1;ratstat=rat;}else rats++;
  }
}
if(~k2)
{
  delay();                       //去抖
  if(~k2)
  {
   while(~k2)                 //等待释放
   {;}
   if(~r2){rats--;r2=~r2;ratstat=rat;}else rats++;
  }
}
if(~k3)
{
  delay();                       //去抖
  if(~k3)
  {
   while(~k3)                 //等待释放
   {;}
   if(~r3){rats--;r3=~r3;ratstat=rat;}else rats++;
  }
}
if(~k4)
{
  delay();                       //去抖
  if(~k4)
  {
   while(~k4)                 //等待释放
   {;}
   if(~r4){rats--;r4=~r4;ratstat=rat;}else rats++;
  }
}
if(~k5)
{
  delay();                       //去抖
  if(~k5)
  {
   while(~k5)                 //等待释放
   {;}
   if(~r5){rats--;r5=~r5;ratstat=rat;}else rats++;
  }
}
if(~k6)
{
  delay();                       //去抖
  if(~k6)
  {
   while(~k6)                 //等待释放
   {;}
   if(~r6){rats--;r6=~r6;ratstat=rat;}else rats++;
  }
}
if(~k7)
{
  delay();                       //去抖
  if(~k7)
  {
   while(~k7)                 //等待释放
   {;}
   if(~r7){rats--;r7=~r7;ratstat=rat;}else rats++;
  }
}
if(rats<=99){dispdat[0]=rats/10;dispdat[1]=rats%10;}else dispdat[0]=0;dispdat[1]=0;
}void ratup(void)
{
rat=TH0;
}void main(void)
{
ET0=1;ET1=1;
EA=1;
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
TH1=(65536-7777)/256;
TL1=(65536-7777)%256;
TR1=1;
lvup();
while(1)
{
  if(stat!=0x01)
  {
   lvup();
   if(hit!=0xff)key0();
  }
  else
  {
   dispdat[2]=sec/10;
   dispdat[3]=sec%10;
   //游戏处理
   if(hit!=0xff)key();
  }
}
}
void t0(void) interrupt 1 using 0          //定时器0  
{
TH0=236;
TL0=(65536-5000)%256;
if(dispdat[0]==0) dispdat[0]=10;
disp=0xff;
disp=dispcode[dispdat[dat]];
dispbit=dispbitcode[dat];
dat++;
if(stat==0x01)secup++;
if(secup>=200)                         //进位
  {secup=0;sec--;}
if(dat==4)
    {
  dat=0;
    }
}void t1(void) interrupt 3 using 0          //定时器1  
{
TH1=(65536-7777)/256;
TL1=(65536-7777)%256;
if(stat==0x01)tt1++;
if(tt1>=200)                        //进位
{tt1=0;ratup();}
}
上电时,左边的数码管显示关数,按下k0和k1选关,按k2开始,这时右边的开始倒计时,左边的显示剩余需要敲击的地鼠数,下面的LED当作是地鼠,每隔一段时间随机亮,右边的倒计时正常。下面的两个定时器是用来错位产生随机数的,并且还可以控制时序。


最佳答案
lstcspring
2楼-- · 2019-07-16 12:03
这个得花一两个小时的时间嘛,爱莫能助,没时间!
lovezjf234
3楼-- · 2019-07-16 17:52
 精彩回答 2  元偷偷看……
mamean
4楼-- · 2019-07-16 18:41
敲下是灯亮还是要求不亮?
小杰杰
5楼-- · 2019-07-16 22:58
mamean 发表于 2012-7-24 14:12
敲下是灯亮还是要求不亮?

    不亮
luoxingyou
6楼-- · 2019-07-17 04:44
时间就是金钱啊,如果用支付宝给我付钱,我可以帮你做

一周热门 更多>