| 注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! • 打开购物车 • 查看留言 • 付款方式 • 联系我们 | 
![]()  | 
| 首页 | 电子入门 | 学单片机 | 免费资源 | 下载中心 | 商品列表 | 象棋在线 | 在线绘图 | 加盟五一 | 加入收藏 | 设为首页 | 
|   选择分类:当前分类——学单片机    相关联或者相类似的文章:    红外线遥控器解码程序(578) 万年历算法全集(577) 8. 按键识别方法之一(576) 串口调试助手源程序(575) 不如要饭!中关村月薪68元的日子(572) 功能齐全的单片机音乐程序(572) 红外线遥控器解码程序(569) ★单片机四路无线遥控解码程序(567) 红外线遥控器解码原理(565) 温度传感器ds1820 的汇编程序 (565) 实用单片机电子钟的制作 (564) 30. 四位数数字温度计(560) 基于DS1620和AT89C2051的数字温度计(557) ISD4004系列单片语音录放电路(557) 图解S51并口下载线的制作(552) 如何用KeilC51将ASM文件编译成Hex文件! (547) 为什么要使用仿真器(543) ★单片双路四位计数器程序(536) 27. ADC0809A/D转换器基本应用技术(533) 9. 一键多功能按键识别技术(533) 首页 前页 后页 尾页  本站推荐:        |    20.            数字钟﹝★﹞ 1. 实验任务  
(1.       开机时,显示12:00:00的时间开始计时; 
(2.       P0.0/AD0控制“秒”的调整,每按一次加1秒;  
(3.       P0.1/AD1控制“分”的调整,每按一次加1分;  
(4.       P0.2/AD2控制“时”的调整,每按一次加1个小时;  
2. 电路原理图  
![]() 图4.20.1 
3. 系统板上硬件连线  
(1.       把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上; 
(2.       把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上;  
(3.       把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上;  
4. 相关基本知识  
(1.       动态数码显示的方法 
(2.       独立式按键识别过程  
(3.       “时”,“分”,“秒”数据送出显示处理方法  
5. 程序框图  
6. 汇编源程序  
SECOND          EQU 30H  
MINITE                     EQU 31H  
HOUR            EQU 32H  
HOURK          BIT P0.0  
MINITEK         BIT P0.1  
SECONDK        BIT P0.2  
DISPBUF                    EQU 40H  
DISPBIT            EQU 48H  
T2SCNTA          EQU 49H  
T2SCNTB         EQU 4AH  
TEMP                      EQU 4BH  
        ORG 00H  
        LJMP START  
        ORG 0BH  
        LJMP INT_T0  
START:  MOV SECOND,#00H  
        MOV MINITE,#00H  
        MOV HOUR,#12  
        MOV DISPBIT,#00H  
        MOV T2SCNTA,#00H  
        MOV T2SCNTB,#00H  
        MOV TEMP,#0FEH  
        LCALL DISP  
        MOV TMOD,#01H  
        MOV TH0,#(65536-2000) / 256  
        MOV TL0,#(65536-2000) MOD 256  
        SETB TR0  
        SETB ET0  
        SETB EA  
WT:     JB SECONDK,NK1  
        LCALL DELY10MS  
        JB SECONDK,NK1  
        INC SECOND  
        MOV A,SECOND  
        CJNE A,#60,NS60  
        MOV SECOND,#00H  
NS60:   LCALL DISP  
        JNB SECONDK,$  
NK1:    JB MINITEK,NK2  
        LCALL DELY10MS  
        JB MINITEK,NK2  
        INC MINITE  
        MOV A,MINITE  
        CJNE A,#60,NM60  
        MOV MINITE,#00H  
NM60:   LCALL DISP  
        JNB MINITEK,$  
NK2:    JB HOURK,NK3  
        LCALL DELY10MS  
        JB HOURK,NK3  
        INC HOUR  
        MOV A,HOUR  
        CJNE A,#24,NH24  
        MOV HOUR,#00H  
NH24:   LCALL DISP  
        JNB HOURK,$  
NK3:    LJMP WT  
DELY10MS:  
        MOV R6,#10  
D1:     MOV R7,#248  
        DJNZ R7,$  
        DJNZ R6,D1  
        RET  
DISP:    
        MOV A,#DISPBUF  
        ADD A,#8  
        DEC A  
        MOV R1,A  
        MOV A,HOUR  
        MOV B,#10  
        DIV AB  
        MOV @R1,A  
        DEC R1  
        MOV A,B  
        MOV @R1,A  
        DEC R1  
        MOV A,#10  
        MOV@R1,A  
        DEC R1  
        MOV A,MINITE  
        MOV B,#10  
        DIV AB  
        MOV @R1,A  
        DEC R1  
        MOV A,B  
        MOV @R1,A  
        DEC R1  
        MOV A,#10  
        MOV@R1,A  
        DEC R1  
        MOV A,SECOND  
        MOV B,#10  
        DIV AB  
        MOV @R1,A  
        DEC R1  
        MOV A,B  
        MOV @R1,A  
        DEC R1  
        RET  
INT_T0:  
        MOV TH0,#(65536-2000) / 256  
        MOV TL0,#(65536-2000) MOD 256  
        MOV A,#DISPBUF  
        ADD A,DISPBIT  
        MOV R0,A  
        MOV A,@R0  
        MOV DPTR,#TABLE  
        MOVC A,@A+DPTR  
        MOV P1,A  
        MOV A,DISPBIT  
        MOV DPTR,#TAB  
        MOVC A,@A+DPTR  
        MOV P3,A  
        INC DISPBIT  
        MOV A,DISPBIT  
        CJNE A,#08H,KNA  
        MOV DISPBIT,#00H  
KNA:    INC T2SCNTA  
        MOV A,T2SCNTA  
        CJNE A,#100,DONE  
        MOV T2SCNTA,#00H  
        INC T2SCNTB  
        MOV A,T2SCNTB  
        CJNE A,#05H,DONE  
        MOV T2SCNTB,#00H  
        INC SECOND  
        MOV A,SECOND  
        CJNE A,#60,NEXT  
        MOV SECOND,#00H  
        INC MINITE  
        MOV A,MINITE  
        CJNE A,#60,NEXT  
        MOV MINITE,#00H  
        INC HOUR  
        MOV A,HOUR  
        CJNE A,#24,NEXT  
        MOV HOUR,#00H  
NEXT:   LCALL DISP  
DONE:   RETI  
TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H  
TAB:    DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH  
        END  
7. C语言源程序  
#include <AT89X51.H>  
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,  
                               0x66,0x6d,0x7d,0x07,  
                               0x7f,0x6f,0x77,0x7c,  
                               0x39,0x5e,0x79,0x71,0x00};  
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,  
                             0xef,0xdf,0xbf,0x7f};  
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};  
unsigned char dispbitcnt;  
unsigned char second;  
unsigned char minite;  
unsigned char hour;  
unsigned int tcnt;  
unsigned char mstcnt;  
unsigned char i,j;  
void main(void)  
{  
  TMOD=0x02;  
  TH0=0x06;  
  TL0=0x06;  
  TR0=1;  
  ET0=1;  
  EA=1;  
  while(1)  
    {  
      if(P0_0==0)  
        {  
          for(i=5;i>0;i--)  
          for(j=248;j>0;j--);  
          if(P0_0==0)  
            {  
              second++;  
              if(second==60)  
                {  
                  second=0;  
                }  
              dispbuf[0]=second%10;  
              dispbuf[1]=second/10;  
              while(P0_0==0);  
            }  
        }  
      if(P0_1==0)  
        {  
          for(i=5;i>0;i--)  
          for(j=248;j>0;j--);  
          if(P0_1==0)  
            {  
              minite++;  
              if(minite==60)  
                {  
                  minite=0;  
                }  
              dispbuf[3]=minite%10;  
              dispbuf[4]=minite/10;  
              while(P0_1==0);  
            }  
        }  
      if(P0_2==0)  
        {  
          for(i=5;i>0;i--)  
          for(j=248;j>0;j--);  
          if(P0_2==0)  
            {  
              hour++;  
              if(hour==24)  
                {  
                  hour=0;  
                }  
              dispbuf[6]=hour%10;  
              dispbuf[7]=hour/10;  
              while(P0_2==0);  
            }  
        }  
    }  
}  
void t0(void) interrupt 1 using 0  
{  
  mstcnt++;  
  if(mstcnt==8)  
    {  
      mstcnt=0;  
      P1=dispcode[dispbuf[dispbitcnt]];  
      P3=dispbitcode[dispbitcnt];  
      dispbitcnt++;  
      if(dispbitcnt==8)  
        {  
          dispbitcnt=0;  
        }  
    }  
  tcnt++;  
  if(tcnt==4000)  
    {  
      tcnt=0;  
      second++;  
      if(second==60)  
        {  
          second=0;  
          minite++;  
          if(minite==60)  
            {  
              minite=0;  
              hour++;  
              if(hour==24)  
                {  
                  hour=0;  
                }  
            }  
        }  
      dispbuf[0]=second%10;  
      dispbuf[1]=second/10;  
      dispbuf[3]=minite%10;  
      dispbuf[4]=minite/10;  
      dispbuf[6]=hour%10;  
      dispbuf[7]=hour/10;  
    }  
}   1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。  2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉!  |   
| 
 本站协议 |
 版权信息 | 
 关于我们 | 
 本站地图 | 
 营业执照 | 
 发票说明 | 
 付款方式 | 
 联系方式
 深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102 E-mail:51dz$163.com($改为@);Tel:(0755)27947428 工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389  |