找回密码
 立即注册

QQ登录

只需一步,快速开始

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

想请问下每行程序的意思是什么?可不可以简要回答下。

[复制链接]
跳转到指定楼层
楼主
ID:98827 发表于 2015-12-10 20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
sbit dp=P0^7;

bit flag_start,flag_mode,flag_5sec;     
uchar time_data1[11],time_data2[11];   
uchar temp,temp1,aa,aa1,shi,ge,fen,hao,num,i,j;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};      //共阴数码管编码

void display_process();       //声明处理函数   
void key();                   //声明键扫描函数
void display(uchar shi,uchar ge,uchar fen,uchar hao);  //声明显示子函数
void delay(uint z);           //声明延时子函数
void init();                  //声明初始化函数

void main()     //主函数
{
     init();            //调用初始化子程序
     while(1)
     {
         key();
         display_process();
         display(shi,ge,fen,hao);
     }
}
void display(uchar shi,uchar ge,uchar fen,uchar hao)   //显示子程序
{
    P0=table[shi];
    wei1=0;
    delay(1);
    wei1=1;

    P0=table[ge];
    dp=1;
    wei2=0;
    delay(1);
    wei2=1;

    P0=table[fen];
    wei3=0;
    delay(1);
    wei3=1;

    P0=table[hao];
    wei4=0;
    delay(1);
    wei4=1;
}
void init()     //初始化子函数
{
    temp=0;
    TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    EA=1;
    ET0=1;
}
void timer0() interrupt 1    //中断服务
{
    TH0=(65536-10000)/256;     //重新赋初值
    TL0=(65536-10000)%256;
    aa++;                      //中断一次变量aa加1
    if(aa==100)                //中断100次后,定时时间为100*10ms=1s
        {                        //将temp的值加1
        aa=0;                 
        temp++;
        if(temp==100)            //秒表到达100s后回零
        temp=0;
        }
}
void delay(uint z)          //延时子函数
{
    uint x,y;
    for(x=z;x>0;x--)
       for(y=110;y>0;y--);
}
void key()       //按键定义
{
   if(key1==0)
         {
               delay(5);
               if(key1==0)
               {
                   while(!key1);
                     flag_start=~flag_start;
                     if(flag_start==1)
                         TR0=1;
                     else
                         TR0=0;
                 }
         }
         if(key2==0)
         {
             delay(5);
             if(key2==0)
             {
                 while(!key2);
                 if(flag_mode==0||i!=0)
                 {
                     shi=0;         //关闭定时器
                     ge=0;
                     fen=0;
                     hao=0;
                     aa=0;
                     temp=0;
                     TR0=0;
                     i=0;
                     num=0;
                     for(j=0;j<=10;j++)
                     {
                         time_data1[j]=0;
                         time_data2[j]=0;
                     }
                 }
                 else
                 {
                     num++;
                     if(num==11)
                     num=1;
                     aa1=aa;
                     temp1=temp;
                     time_data1[num]=aa1;
                     time_data2[num]=temp1;
                     flag_5sec=0;
                 }
          }
        }
    if(key3==0)
        {
            delay(5);
            if(key3==0)
            {
                while(!key3);
                flag_mode=!flag_mode;
            shi=0;         //关闭定时器
                     ge=0;
                     fen=0;
                     hao=0;
                     aa=0;
                     temp=0;
                     TR0=0;
                     i=0;
                     num=0;
            }
        }
        if(key4==0)
        {
            delay(5);
            if(key4==0)
            {
                while(!key4);
                i++;
                TR0=0;
                if(i==11)
                i=1;
            }
        }
}
void display_process()
{
      shi=temp%100/10;      //正常走时
        ge=temp%10;
        fen=aa%100/10;
        hao=aa%10;
      if(flag_mode==1&&num!=0&&flag_5sec==0)
        {
            fen=time_data1[num]/10;         
            hao=time_data1[num]%10;
            shi=time_data2[num]/10;
            ge=time_data2[num]%10;
            if(temp-time_data2[num]==5)
                flag_5sec=~flag_5sec;
        }
        if(i!=0)
        {
            shi=time_data2[i]/10;
            ge=time_data2[i]%10;
            fen=time_data1[i]/10;
            hao=time_data1[i]%10;
        }
}









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

使用道具 举报

沙发
ID:102817 发表于 2016-1-11 23:29 | 只看该作者
这还要每句解释啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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