找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助,有没有人知道这个51单片机电子药盒的程序如何定时?

[复制链接]
跳转到指定楼层
楼主
ID:350675 发表于 2018-6-14 09:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人懂一点汇编,c语言只懂很少的几条语句,因为课设问题向学长求助,但其给我的资料是用c语言写的,不是很懂他的按键设置,如何定时和实现其他功能,求高手指点迷津,下面附上部分说明,和dsn,及程序本体docx。
#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int  uint;
uchar count0,s0num,s2num;
uchar count=0,h,min,s,h0,min0,h1,min1,h2,min2,h3,min3;
uchar key,kind;        
uchar *k,*dos,k0,dos0,k1,dos1,k2,dos2,k3,dos3;
uchar code dis3[]={"0123456789"};
sbit e = P2^7;
sbit rs = P2^5;
sbit rw = P2^6;
sbit DB7= P0^7;
sbit s0 = P1^0;
sbit s1 = P1^1;
sbit s2 = P1^2;
sbit s3 = P1^3;
sbit s4 = P1^4;
sbit s5 = P1^5;
sbit s6 = P1^6;
sbit s7 = P1^7;
sbit LED = P3^0;  
sbit FMQ = P3^1;


void delay(uchar ms)
{
     uchar i;
           while(ms--)
            {
                      for(i=0;i<250;i++)
                     {
                                 _nop_();
                                _nop_();
                                _nop_();
                                _nop_();  
                                                               
   }
     }
}        
bit busy()
{                                                
      bit result;
      rs=0;
      rw=1;
      e=0;                  
            e=1;
            _nop_();
            _nop_();
            _nop_();
            _nop_();               
      result=(bit)(P0&0x80);
             e=0;                  
      return result;
}
void wcmd(uchar cmd)
{
     while(busy());  
           rs=0;
           rw=0;
           e=0;           
           _nop_();
           _nop_();
           P0=cmd;      
           _nop_();
           _nop_();
           _nop_();
           _nop_();
            e=1;           
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           e=0;           
}
void wdate(uchar dat)                  
{
     while(busy());
           rs=1;
           rw=0;
           e= 0;                        
           P0=dat;
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           e=1;         
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           e=0;         
}
void init()        
{
           delay(5);        
     wcmd(0x3C);      
           delay(1);
           wcmd(0x0c);      
           delay(1);
           wcmd(0x06);     
           delay(1);
           wcmd(0x01);     
           delay(1);
           wcmd(0x82);      
}
void display(uchar x,uchar y,uchar *p)   
{
    switch (x)
           {
           case 1:wcmd(0x7f+y);break;
           case 2:wcmd(0x7f+0x40+y);
           }
           while(*p)                  
           wdate(*p++);
}
void wtim(uchar add,uchar date)        
{  
           uchar i=0;
           uchar un,dec;   
           dec=date/10;
           un=date%10;
           wcmd(0xc0+add);   
           i=dec;
           wdate(dis3[ i ]);                  
           i=un;
           wdate(dis3[ i]);
}
void keyscan()  
{
     if(s0==0)        
                  {
                                delay(5);     
                                if(s0==0)     
              {  
                                         wcmd(0x0f);     
                                    s0num++;            
                                   while(!s0);
                                   if(s0num==1)        
                                    {
                                       TR0=0;         
                                            wcmd(0xc0+11);  
                                             
                                     }
                                         if(s0num==2)      
                                          {
                                             wcmd(0xc0+8);   
                                          }
                                         if(s0num==3)      
                                          {
                                             s0num=0;
                                                         wcmd(0x0c);  
                                                         display(1,7,"*");
                                                         display(1,16,"*");
                                                         TR0=1;
                                          }}}        
                 if(s0num!=0)     
                   {
                      if(s1==0)            
                                        {
                                             delay(10);         
                                                   if(s1==0)         
                                                         {
                                                            while(!s1);   
                                                                        if(s0num==1)
                                                                          {
                                                                             min++;
                                                                                         if(min==60)
                                            min=0;
                                                                                         delay(10);
                                                                                        wtim(11,min);      
                                                                                         wcmd(0xc0+11);     
                                                                          }
                                                                        if(s0num==2)
                                                                          {
                                                                              h++;
                                                                                          if(h==24)
                                                                                                   h=0;
                                                                                                wtim(8,h);   
                                                                                                wcmd(0xc0+8);
                                                                           }
                                }
                               }
                             }
                        if(s2==0)                  
                         {
                            delay(5);
                if(s2==0)        
                                         {
                                             s2num++;         
                                                   while(!s2);      
                                                   if(s2num==1)
                                                           {
                                                             TR0=0;         
                                                                   wcmd(0xc0+11);  
                                                                   wcmd(0x0f);     
                                                           }
                                                         if(s2num==2)
                                                           {
                                                             wcmd(0xc0+8);  
                                                           }
                                                         if(s2num==3)
                                                           {
                                                              wcmd(0x86);                                             
                                                                 }
                                                        if(s2num==4)
                                                           {
                                                              wcmd(0x8F);  
                                                           }
                            if(s2num==5)
                                                           {
                                                             s2num=0;
                                                                         wcmd(0x0c);   
                                                                         TR0=1;        
                                                           }}}
                        if(s2num!=0)
                         {
                           if(s3==0)               
                                   {
                                       delay(5);
                                                   if(s3==0)
                                                           {
                                                              while(!s3);  
                                                                                if(s2num==1)
                                                                                  {
                                                                                     min++;
                                                                                                 if(min==60)
                                                                                                         min=0;
                                                                                                 wtim(11,min);
                                                 wcmd(0xc0+11);                                                                                                   
                                                                                  }
                                                                                if(s2num==2)
                                                                                  {
                                                                                      h++;
                                                                                                 if(h==24)
                                                                                                         h=0;            
                                                                                                 wtim(8,h);        
                                                                                                 wcmd(0xc0+8);   
                                                                                  }
                                                                                if(s2num==3)         
                                                                                  {
                                                                                     kind++;
                                                                                                 switch(kind)
                                                                                                 {
case 1:display(1,7,"A");wcmd(0x7f+7);k="A"; break;  
case 2:display(1,7,"B");wcmd(0x7f+7);k="B"; break;
case 3:display(1,7,"C");wcmd(0x7f+7);k="C"; break;
case 4:display(1,7,"D");wcmd(0x7f+7);k="D";kind=0; break;
default:display(1,7,"$");wcmd(0x7f+7);break;
                                                                                                 }}                         if(s2num==4)         
{
  uchar i;
  i++;
switch(i)
{                                                
case1:display(1,16,"1");wcmd(0x7f+16);dos="1"; break; case2:display(1,16,"2");wcmd(0x7f+16);dos="2"; break;
case 3:display(1,16,"3");wcmd(0x7f+16);dos="3"; break;
case 4:display(1,16,"4");wcmd(0x7f+16);dos="4"; break;
case 5:display(1,16,"5");wcmd(0x7f+16);dos="5"; break;
case 6:display(1,16,"6");wcmd(0x7f+16);dos="6"; break;
case 7:display(1,16,"7");wcmd(0x7f+16);dos="7"; break;
case 8:display(1,16,"8");wcmd(0x7f+16);dos="8"; break;
case 9:display(1,16,"9");wcmd(0x7f+16);dos="9";i=0;break;        default:display(1,16,"$");wcmd(0x7f+10);break;
                                                                                                 }}}}}}
void main()
{
     P0=0x00;
     init();
           do
                 {
                    display(1,1,"P.");
                 }
                 while((s0&&s1&&s2&&s3&&s4&&s5&&s6&&s7)==1);
                  display(1,1,"Drug--# Dosis--#");
        display(2,1,"Time    00:00:00");
      TMOD=0x01;
            TH0=(65536-49958)/256;
            TL0=(65536-49958)%256;
            EA=1;
            ET0=1;
            TR0=1;
     while(1)              
    {
            keyscan() ;
            if(count==20)
                {
                            s++;
                            count=0;
                              if(s==60)
                                    {
                                                         s=0;
                                             min++;
                                             s=0;
                                              if(min==60)
                                                     {
                                                            h++;
                                                            min=0;
                                                               if(h==24)
                                                                  {
                                                                         h=0;
                                                                       }
                                                                  wtim(8,h);
                                                     }
                                                         wtim(11,min);   
                                           }
                                  wtim(14,s);            
                 if(s4==0)               
                  {
        delay(5);         
        if (s4==0)        
                                        {
                                     while(!s4);   
                                                 k0=*k;        
                                                 dos0=*dos;     
                                                 h0=h;      
                                                 min0=min;
                                                key++;
                      }}        
                        if(s5==0)              
                  {
        delay(5);         
        if (s5==0)        
                                        {
                                     while(!s4);   
                                                 k1=*k;
                                                 dos1=*dos;
                                                 h1=h;         
                                                 min1=min;
                                                key++;
                      }}        
                        if(s6==0)               
                  {
        delay(5);         
        if (s6==0)         
                                        {
                                     while(!s4);   
                                                 k2=*k;
                                                 dos2=*dos;
                                                 h2=h;         
                                                 min2=min;
                                                key++;
                      }}        
                        if(s7==0)               
                  {
        delay(5);           
        if (s7==0)         
                                        {
                                     while(!s4);   
                                                 k3=*k;
                                                 dos3=*dos;
                                                 h3=h;         
                                                 min3=min;
                                                key++;
                      }}        
     if((h0==h)&&(min0==min))
                   {
                                 if(key!=0)
                                 {
                                        wcmd(0x86);
                                        wdate(k0);
                                        wcmd(0x8f);
                                        wdate(dos0);
                      LED=1;
          delay(5);
          LED=0;
          for(count0=0;count0<20;count0++)
            {
                                                   FMQ=0;
                                                         delay(1);
                                                         FMQ=1;
                                                }}LED=1;}        
    if((h1==h)&&(min1==min))
                   {
                                 if(key!=0)
                                 {
                                        wcmd(0x86);
                                        wdate(k1);
                                        wcmd(0x8f);
                                        wdate(dos1);
                      LED=1;
          delay(5);
          LED=0;
          for(count0=0;count0<20;count0++)
            {
                                                   FMQ=0;
                                                         delay(1);
                                                         FMQ=1;
                                                }}LED=1;}        
    if((h2==h)&&(min2==min))
                   {
                                 if(key!=0)
                                 {
                                        wcmd(0x86);
                                        wdate(k2);
                                        wcmd(0x8f);
                                        wdate(dos2);
                      LED=1;
          delay(5);
          LED=0;
          for(count0=0;count0<20;count0++)
            {
                                                   FMQ=0;
                                                         delay(1);
                                                         FMQ=1;
                                                }}LED=1;}               
    if((h3==h)&&(min3==min))
                   {
                                 if(key!=0)
                                 {
                                        wcmd(0x86);
                                        wdate(k3);
                                        wcmd(0x8f);
                                        wdate(dos3);
                      LED=1;
          delay(5);
          LED=0;
          for(count0=0;count0<20;count0++)
            {
                                                   FMQ=0;
                                                         delay(1);
                                                         FMQ=1;
                        }} LED=1;}}}
         while(1);}
void T0_int(void) interrupt 1
{
     count++;
     TF0=0;           
           TH0=(65536-49958)/256;
           TL0=(65536-49958)%256;
}

新实验.zip

18.86 KB, 下载次数: 25

评分

参与人数 1黑币 +5 收起 理由
kljie1000 + 5 很给力!

查看全部评分

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

使用道具 举报

沙发
ID:332444 发表于 2019-6-28 15:29 | 只看该作者
不知你能看懂多少C语句,这个用仿真有的功能是无法实现的,必须在硬件上才能运行的组合键,通常判断按钮按下语句if(s0==0){延时;再次判断按钮按下if(s0==0){执行什么操作的代码}}从花括号你可以看到s0按下第1次做什么第2次做什么第3次做什么的代码,可以推断出按钮的功能。对代码进行标准的缩进就可以对花括号内的代码意思大概可以猜测出要执行的意图。
回复

使用道具 举报

板凳
ID:332444 发表于 2019-6-28 15:38 | 只看该作者
按钮基本上就是移动在液晶显示屏上的光标位置调节分和时和字符等看个大概
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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