基于51单片机的四路定时控制器设计报告(编辑修改稿)内容摘要:
R = 0。 //Close IAP function IAP_ADDRH = 0x80。 //Data ptr point to nonEEPROM area IAP_ADDRL = 0。 //Clear IAP address to prevent misuse } /* Read one byte from ISP/IAP/EEPROM area Input:addr (ISP/IAP/EEPROM address) Output: Flash data */ BYTE IapReadByte(WORD addr) { BYTE dat。 //Data buffer IAP_CONTR = ENABLE_IAP。 //Open IAP function,and set wait time IAP_CMD = CMD_READ。 //Set ISP/IAP/EEPROM READ mand IAP_ADDRL = addr。 //Set ISP/IAP/EEPROM address low IAP_ADDRH = addr8。 //Set ISP/IAP/EEPROM address high IAP_TRIG = 0x5a。 //Send trigger mand1 (0x5a) IAP_TRIG = 0xa5。 //Send trigger mand2 (0xa5) _nop_()。 //MCU will hold here until ISP/IAP/EEPROM //operation plete dat = IAP_DATA。 //Read ISP/IAP/EEPROM data IapIdle()。 //close ISP/IAP/EEPROM function return dat。 //Return Flash data } /* Programe one byte to ISP/IAP/EEPROM area Input: addr(ISP/IAP/EEPROM address) dat(ISP/IAP/EEPROM data) 12 Output: */ void IapProgramByte(WORD addr, BYTE dat) { IAP_CONTR = ENABLE_IAP。 //Open IAP function,and set wait time IAP_CMD = CMD_PROGRAM。 //Set ISP/IAP/EEPROM PROGRAM mand IAP_ADDRL = addr。 //Set ISP/IAP/EEPROM address low IAP_ADDRH = addr8。 //Set ISP/IAP/EEPROM address high IAP_DATA = dat。 //Write ISP/IAP/EEPROM data IAP_TRIG = 0x5a。 //Send trigger mand1 (0x5a) IAP_TRIG = 0xa5。 //Send trigger mand2 (0xa5) _nop_()。 //MCU will hold here until ISP/IAP/EEPROM //operation plete IapIdle()。 } /* Erase one sector area Input: addr (ISP/IAP/EEPROM address) Output: */ void IapEraseSector(WORD addr) { IAP_CONTR = ENABLE_IAP。 //Open IAP function,and set wait time IAP_CMD = CMD_ERASE。 //Set ISP/IAP/EEPROM ERASE mand IAP_ADDRL = addr。 //Set ISP/IAP/EEPROM address low IAP_ADDRH = addr8。 //Set ISP/IAP/EEPROM address high IAP_TRIG = 0x5a。 //Send trigger mand1 (0x5a) IAP_TRIG = 0xa5。 //Send trigger mand2 (0xa5) _nop_()。 //MCU will hold here until ISP/IAP/EEPROM 13 //operation plete IapIdle()。 } /************数码管显示函数 ******************/ void displays(uchar X2,X1) { W1=0。 P1=duanxuan[num0(X1)]。 delay_ms(5)。 W1=1。 P1=0x00。 //消影 W2=0。 P1=duanxuan[num1(X1)]。 delay_ms(5)。 W2=1。 P1=0x00。 W3=0。 P1=duanxuan[num2(X2)]|0x80。 delay_ms(5)。 W3=1。 P1=0x00。 W4=0。 P1=duanxuan[num3(X2)]。 delay_ms(5)。 W4=1。 P1=0x00。 } /**************定时器初始化 *****************/ void T_initialize() // { EA=1。 //开放 ALL 中断允许 Enable ET0=1。 //开放 T0 中断允许 Enable*/ TMOD=0x11。 //定时器 0、 1,工作方式 1,仅受 TCON 中 TR 控制 */ TH0=(65536N)/256。 TL0=(65536N)%256。 ET1=1。 //开放 T1 中断允许 Enable*/ TH1=(65536N)/256。 TL1=(65536N)%256。 TR0=1。 //定时器计时开始 } /****************************************************/ /************时钟实时时间、定时段设置(显示放后边) ****************/ void clk_weixuan()// { switch(k5){ case 1:{switch(k2){case 0:。 break。 case 1:{if(key==1){A0_shi++。 if(A0_shi==24)A0_shi=0。 /*shi=0~23*/} if(key==4){if(A0_shi==0)A0_shi=24。 A0_shi。 /*shi=23~0*/}}break。 case 2:{if(key==1){A0_fen++。 if(A0_fen==60)A0_fen=0。 /*fen=0~59*/} 14 if(key==4){if(A0_fen==0)A0_fen=60。 A0_fen。 /*fen=0~59*/}}break。 case 3:{if(key==1){A1_shi++。 if(A1_shi==24)A1_shi=0。 /*shi=0~23*/} if(key==4){if(A1_shi==0)A1_shi=24。 A1_shi。 /*shi=23~0*/}}break。 case 4:{if(key==1){A1_fen++。 if(A1_fen==60)A1_fen=0。 /*fen=0~59*/} if(key==4){if(A1_fen==0)A1_fen=60。 A1_fen。 /*fen=0~59*/}}break。 case 5:{IapEraseSector(0x0000)。 IapProgramByte(0x0000,A0_shi)。 IapProgramByte(0x0001,A0_fen)。 IapProgramByte(0x0002,A1_shi)。 IapProgramByte(0x0003,A1_fen)。 k2=0。 }break。 }}break。 case 2:{switch(k2){case 0:。 break。 case 1:{if(key==1){B0_shi++。 if(B0_shi==24)B0_shi=0。 /*shi=0~23*/} if(key==4){if(B0_shi==0)B0_shi=24。 B0_shi。 /*shi=23~0*/}}break。 case 2:{if(key==1){B0_fen++。 if(B0_fen==60)B0_fen=0。 /*fen=0~59*/} if(key==4){if(B0_fen==0)B0_fen=60。 B0_fen。 /*fen=59~0*/}}break。 case 3:{if(key==1){B1_shi++。 if(B1_shi==24)B1_shi=0。 /*shi=0~23*/} if(。基于51单片机的四路定时控制器设计报告(编辑修改稿)
相关推荐
位(地址 8EH)可打开或关闭该功能。 DISRT0 位缺省为 RESET 输出高电平打开状态。 ALE/ PROG:当访问外部程序存储器或数据存储器时, ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。 即使不访问外部存储器, ALE 仍以时钟振荡频率的 1/ 6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。 要注意的是:每当访问外部数据存储器时将跳过一个 ALE
单片机的时序。 MCS51 单片机芯片内部有一个高增益反相放大器,用于构成震荡器, XTAL1 为该放大器的输入端, XTAL2 为该放大器输出端,但形成时钟电路还需附加其他电路。 本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和 2 个电容即可,如图 210 所示。 图 210 单片机时钟发生电路 电路中的器件选择可以通过计算和实验确定,
体程序如下: while(temp!=0xf0) { delay(5)。 P3=0xfd。 temp=P3。 temp=tempamp。 0xf0。 while(temp!=0xf0) 上述程序是两个 while 循环之间的嵌套,第一个 while()语句判断有键按下后,延时一段时间再进行判断,如果第二次判断也认为由键按下,则可以确认的确由键盘操作,并不是抖动。 具体按下后的操作可以在后一个
以反复擦除 1000 次。 该器件采用 ATMEL 高密度非易失 存储器 制造技术制造,与工业标准的 MCS51 指令集和输出管脚相兼容。 由于将多功能 8 位 CPU 和闪速 存储器 组合在单个芯片中, ATMEL 的 AT89C51 是一种高效微控制器, AT89C51单片机 为很多 嵌入式控制系统 提供了一种灵活性高且价廉的方案。 AT89C51 的主要特性 与 MCS51
IG 触发测距,给最少 10us 的高电平信号; 模块自动发送 8 个 40KHz 的方波,自动检测是否有信号返回; 有信号返回,通过 I/O 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。 测试距离 =(高电平时间 *声速 (340M/S))/2。 基本参数: 工作电压: DC 5V; 工作电流: 15mA; 工作频率: 40KHz; 探测距离范围
出 4 个 TTL 门电流。 当 P3 口写入 “1”后,它们被内部上拉为高电平,并用作输入。 作为输入,由于外部下拉为低电平, P3 口将输出电流( ILL)这是由于上拉的缘故。 P3 口也可作为 AT89S51 的一些特殊功能口,如下表所示: P3 口管脚 备选功能 RXD(串行输入口) TXD(串行输出口) /INT0(外部中断 0) /INT1(外部中断 1) T0(记时器 0