立即注册 登录
返回首页

uid:70976的个人空间

留言板

wyl775078638 2018-7-4 17:16
五、        基于单片机的秒表系统设计
设计内容:1、设计精度为0.1S的秒表系统(40分)
                        2、设置启动、暂停、清零按钮(20分)
                        3、设计每一秒钟都有提醒功能(20分)
                        4、秒表的最长计时长度为9:59:59,超过此长度,报警。
有这个程序吗?和原理图吗
danpianji2018 2016-6-22 17:05
您好,我想请教一下,这个程序为什么会出现乱码?#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code  table1[]="my information";
uchar code table[][16]={{"1.YU WEN HUA"},{"2.ITO 2014412586"},{"3.MCS-51  EXP8"},{"4.LCD DISPLAY"}};
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;
uchar num,key;
bit  flag,flag1,flag2,flag3=0;
void V_display();
void H_display();
void delay(uint z)
{
        uint  x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

void write_com(uchar com)
{
         lcdrw=0;
         lcdrs=0;
         P0=com;
         delay(5);
         lcden=1;
         delay(5);
         lcden=0;
}
     void write_data(uchar date)
        {
                lcdrw=0;
                lcdrs=1;
            P0=date;
                delay(5);
                lcden=1;
            delay(5);
                lcden=0;
          }          
     void init()
    {       
              uchar q;
            lcden=0;
             for(q=0;q<3;q++)
            {
                delay(15);
                write_com(0x38);
             }       
                 write_com(0x38);
                 write_com(0x0e);
                 write_com(0x01);
                 write_com(0x06);
                 write_com(0x0c);

                }
   void main()
       {   
        init();
            EA=1;EX0=1;        EX1=1;IT0=1;IT1=1;
            TMOD=0X01;
            TH0=(65536-10000)/256;
            TL0=(65536-10000)%256;
            TR0=1;ET0=1;
                while(1)
        {       
          write_com(0x01);
      write_com(0x80+0x01);
   for(num=0;table1[num]!='\0';num++)
        {
          if(flag2) break;
      write_data(table1[num]);
          delay(300);
             }
          write_com(0x01);
          flag1=flag=0;
          if(flag2)
   {
          flag3=1;
          flag2=0;
          switch(key)
         {
             case 0xfe:V_display();
                 flag3=0;break;
         case 0xfd:H_display();
                 flag3=0;break;
                 default:flag3=0;
         }
                  }
                 }
                 }
               
         void V_display()
                 {
                 uchar i,j,k;
                 write_com(0x01);
                 while(1)
                 {
                   for(i=0;i<4;i++)
                   write_com(0x80+0x00);   
                        for(j=0;table[j]!='\0';j++)
                        {
                        while(flag)
                {
                        if(flag1)  return;}
                    if(flag1)  return;
                        write_data(table[j]);
                        delay(200);

                 }
                 if(i>=3) k=0;
                 else k=i+1;
                 write_com(0x80+0x40);
                 for(j=0;table[k][j]!='\0';j++)
        {
          while(flag)
           {
             if(flag1) return;
           }
         if(flag1) return;
                 write_data(table[k][j]);
                        /*delay(200); */
          }
          delay(1000);
          write_com(0x01);
                 }
                  }
               

           void H_display()
                 {
                 uchar i,j;
                 write_com(0x01);
                   for(i=0;i<3;)
                   {
                    if(i<1)
                   write_com(0x80+0x01);
                   else          
                   write_com(0x80+0x41);
          for(j=0;table[j]!='\0';j++)
                        {
                        while(flag)
                {
                        if(flag1)  return;}
                    if(flag1)  return;
                        write_data(table[j]);
                        delay(200);

                 }
                 if(i<1)
                 write_com(0x80+0x15);
                 else write_com(0x80+0x55);
                 for(j=0;table[i+1][j]!='\0';j++)
        {
          while(flag)
           {
             if(flag1) return;
           }
         if(flag1) return;
                 write_data(table[i+1][j]);
                        delay(200);
          }
          i=i+2;
          }
          while(1)
          {
                write_com(0x1c);
                 while(flag)
           {
             if(flag1) return;
           }
         if(flag1) return;
                        delay(200);
          }
            }
         void INT0_SER () interrupt 0
   {
      if(flag3==1)
          flag=!flag;
         }
         void T0_SER () interrupt 1
   {
        TH0=(65536-10000)/256;
            TL0=(65536-10000)%256;
         if(P3!=0xff)
        {
                delay(20);
                if((P3!=0xff)&&(flag3==0)&&(INT0!=0)&&(INT1!=0))
                {
                key=P3;
                flag2=1;
                 }
        }
   }
        void INT1_SER() interrupt 2
        {
           if(flag3==1)
           flag1=1;
           }
51xingshou 2016-1-11 11:50
您好楼主 我是一个刚刚接触单片机的实习生  我看了您的关于《51单片机同时外扩RAM,ROM的具体实现及Keil的具体设置》的文章 我觉得很受用 可是我还是有点不懂 。我的QQ号是1003302094  或者您能给您的QQ吗 我想向您请教可以吗 谢谢
谦虚请教 2015-6-19 21:28
您好。我想问一下您的独立按键密码锁程序+流程图中延时函数用多大的晶振呢,希望您百忙之中帮小弟解决这个问题啊。拜托了

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

Powered by 单片机教程网