找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1305|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机加法器按键清屏再恢复求解

[复制链接]
跳转到指定楼层
楼主
这是一个加法器,一个5道题,答对一题亮1盏灯,需要在按键增加其他功能,目前我完成了一部分功能,我就想请教那个按一下清屏,再按一下恢复那个怎么实现,程序是什么。。。。


程序如下图
#include<reg51.h>
unsigned char guan[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x48,0x00};
unsigned char shu[8]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};
unsigned char ggboy[6]={0xff,0xf7,0xe7,0xc7,0x87,0x07};
unsigned char hang[4]={0x08,0x04,0x02,0x01};
unsigned char lie[4]={0xef,0xdf,0xbf,0x7f};
unsigned char key;
int seg1[6]={1,2,3,4,5,6};
int seg2;
int sum;int n=0,p=9,t=0;
int c=0,d=0,v=0,z=0,num=0;
int n13=1;
void delay(int a)
{int j;
j=a;while(j--);}





void df() interrupt 1    //计时功能
{   int h;
        TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n=n+1;
        if(n==100)
        {for(h=0;h<=4;h++)
                {P0=shu[6]&ggboy[5];
                        P1=guan[seg1[d]];
                        delay(10000000);
                        P0=shu[7]&ggboy[0];
                        P1=0X00;
      delay(10000000);}n=0;}}












void sdwoig()    //换题按钮
{ if(v==1)
        {d=d+1;
        if(d==6)
        {d=0;}}
        if(v==2)
        {d=d-1;
  if(d==-1)
  {d=5;}}
        if(v==3)
        {d=d-1;z=z-1;
         }}


        
        
        



void chengjichaxun()        //查成绩功能
{int j=1000;
        while(j--)
        {P0=(shu[0]&ggboy[z]);
   P1=0x00;
          delay(1000);
        P0=(shu[1]&ggboy[z]);
   P1=0x5e;
        delay(1000);
         P0=(shu[2]&ggboy[z]);
          P1=guan[z];
                delay(1000);
         P0=(shu[3]&ggboy[z]);
          P1=0x40;
                delay(1000);
         P0=(shu[4]&ggboy[z]);
         P1=0x39;
          delay(1000);
   P0=shu[5]&ggboy[z];
   P1=guan[(5-z)];
                delay(1000);
   P0=shu[6]&ggboy[z];
   P1=0x40;
                delay(1000);
        P0=shu[7]&ggboy[z];
   P1=0x00;
           delay(1000);
           }
         
}


void sg1()         //数码管显示内容
{
        P0=(shu[1]&ggboy[z]);
   P1=guan[seg1[d]];
        delay(1000);
         P0=(shu[2]&ggboy[z]);
         P1=guan[10];
                delay(1000);
         P0=(shu[3]&ggboy[z]);
                seg2=seg1[d]-1;
     sum=seg1[d]+seg2;
         P1=guan[seg2];
                delay(1000);
         P0=(shu[4]&ggboy[z]);
         P1=guan[11];
          delay(1000);
   P0=shu[5]&ggboy[z];
   P1=guan[num];
     delay(1000);      }


void ig()        //按键扫描与键盘功能
{ int a,t;
        P2=0x0f;
        if(P2!=0x0f)
        { delay(10000);
        if(P2!=0x0f)
        {
  for(a=0;a<=3;a++)
        {P2=lie[a];
        for(t=0;t<=3;t++)
        {if((P2&hang[t])==0)
  { key=a+4*t;}}}
         switch(key)
         { case 0:num=9;break;
     case 1:num=8;break;
                 case 2:num=6;break;
                 case 3:num=3;break;
                 case 4:num=7;break;
                 case 5:num=5;break;
                 case 6:num=2;break;
                 case 7:v=2;num=12;break;     //上一题
                 case 8:num=4;break;
                 case 9:num=1;break;
                 case 10:                      //功能一彩灯功能
                 case 11:v=1;num=12;break;     //下一题
                 case 12:num=0;break;
                 case 13:                       //功能二关机重启
                 case 14:chengjichaxun();break;    //功能三成绩查询
     case 15:   //重做功能




if(num==sum)
{z=z+1;
if(z==6)
{z=1;}P0=(shu[5]&ggboy[z]);}
     delay(1000);

if(num<=9)
{v=1;}
if(v!=0)
{sdwoig();}
}}}}


void main()
{           TMOD=0x11;
                        TH0=(65536-50000)/256;
                        TL0=(65536-50000)%256;
         



            TR0=1;
           
           
            IE=0x9f;
         while(1)
        {sg1();delay(1000);{ig();delay(100);}}}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表