在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 1606|回复: 0

电子种程序

[复制链接]
发表于 2009-9-11 08:27:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
学C语言两个月了,忍不住就写了这个电子种程序。这是我学单片机的开初理由,就是有朝一日我要自已写一个电子钟程序,也是我坚持学下去的动力。今天我终于完成了这个愿望!这个程序已运行通过,在我的仿真板上运行良好。特此贴出来,请高手指点不足之处。

/*程序所用晶振频率为11.0592MHz,程序开始显示00:00:00。
  SW1秒调整按钮,SW2为分钟调整按钮,SW3为小时调整按钮。*/

#include "reg52.h"
#include "intrins.h"
void display();
scan_key();
regulate_key();
sbit SW1=P3^2;  //秒调整
sbit SW2=P3^3;  //分调整
sbit SW3=P3^4;  //小时调整
unsigned char key_s, key_v;
unsigned int count=0,sec,min,hour;
unsigned char displayTab[]={   
        0x28,/*0*/
        0x7E,/*1*/
        0xA2,/*2*/
        0x62,/*3*/
        0x74,/*4*/
        0x61,/*5*/
        0x21,/*6*/
        0x7A,/*7*/
        0x20,/*8*/
        0x60,/*9*/

         };


void delay10ms(unsigned int delay10ms)    /*延时程序10ms*/

{

       unsigned char i=0;
       for(; delay10ms>0; delay10ms--)
           {
               for(; i<124; i++)
                   {;}
           }

}


void time0() interrupt 1  using 0   /*中断程序*/
{

TH0 = 0xdb;
TL0 = 0xfb;    //重置定时值10ms

count++;
  if(count>=100)
    { count=0;
        sec++;
        if(sec>59)
         { sec=0;
            min++;
            if(min>59)
             {   min=0;
                  hour++;
                  if(hour>23)
                  hour=0;
   
             }     
         }
     }
display();
}


void main()         /*主程序*/
{
TMOD = 0x01;   //T0工作方式1
TH0 = 0xdb;
TH1 = 0xfb;    //预置定时值10ms
EA = 1;     //开总中断
TR0 = 1;       //开始计时
ET0= 1;        // 允许T0定时中断

   while(1)
    {
        if(scan_key())      //有键按下进入按键程序
         {
              delay10ms(10);
              if(scan_key())
                {
                   key_v = key_s;
                    regulate_key();
                }
         }
  
    }
}

scan_key()                  //按键程序
{
    key_s = 0x00;
    key_s |= SW1;
    key_s <<= 1;
    key_s |= SW3;
    key_s<<=1;
    key_s |= SW2;
    return(key_s ^ key_v);
}


regulate_key()          //调时函数
{
   EA=0;
   if((key_v&0x01)==0)  //SW1按下分调整
      {
          min++;
          if(min>59)
            {
                min=0;
            }
       }

  if((key_v&0x02)==0)   //SW2按下小时调整
        {
          hour++;
          if(hour>23)
            {
                hour=0;
            }
         }

   if((key_v&0x04)==0)   //SW3按下秒调整
      {
           sec++;
            if(sec>59)
               {
                    sec=0;
               }
      }

   EA=1;
}

void display()           /*显示程序*/
{
  unsigned char tmp1,tmp2;
tmp1=sec/10;     //秒显示程序
tmp2=sec%10;
P0=displayTab[tmp1];
P2=0xf7;
delay10ms(20);
P0=displayTab[tmp2];
P2=0xef;
delay10ms(20);

tmp1=min/10;      //分显示程序
tmp2=min%10;
P0=displayTab[tmp1];
P2=0xfd;
delay10ms(20);
P0=displayTab[tmp2];
P2=0xfb;
delay10ms(20);

tmp1=hour/10;     //小时显示程序
tmp2=hour%10;
P0=displayTab[tmp1];
P2=0x7f;
delay10ms(20);
P0=displayTab[tmp2];
P2=0xfe;
delay10ms(20);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-30 15:29 , Processed in 0.020042 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表