红外调时课程设计基于stc89c51的红外遥控电子时钟内容摘要:

字符 void delay(uchar x)。 //x* void delay1(int ms)。 uchar distemp = 0。 sbit IRIN = P3^3。 //红外接收器数据线 sbit led=P0^0。 uchar IRCOM[7]。 uchar a,count=0,flag=0。 uchar mh=0,ml=0,shh=0,shl=0,fenh=0,fenl=0,yueh=0,yuel=0,rih=0,ril=0,nianh=0,nianl=0。 uchar miao,fen,shi,ri,yue,nian,week。 uchar tempshi,tempge。 uchar table[12]。 sbit E=P2^5。 //1602 使能引脚 sbit RW=P2^6。 //1602 读写引脚 sbit RS=P2^7。 //1602 数据 /命令选择引脚 sbit SCLK = P1^6。 /*实时时钟时钟线引脚 */ sbit IO = P3^5。 /*实时时钟数据线引脚 */ sbit RST = P1^7。 /*实时时钟复位线引脚 */ sbit ACC0=ACC^0。 sbit ACC7=ACC^7。 /******************************************************************** * 名称 : Delay() * 功能 : 延时 ,延时时间大概为 1 毫秒 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Delay_1ms(uint i) { 15 uint x,j。 for(j=0。 ji。 j++) for(x=0。 x=148。 x++)。 } /******************************************************************** * 名称 : delay() * 功能 : 延时 ,延时时间大概为 140US。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Delay2() { int i,j。 for(i=0。 i=10。 i++) for(j=0。 j=2。 j++)。 } /******************************************************************** * 名称 : enable(uchar del) * 功能 : 1602 命令函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void enable(uchar del) { P0 = del。 RS = 0。 RW = 0。 E = 0。 Delay2()。 E = 1。 Delay2()。 } /******************************************************************** * 名称 : write(uchar del) * 功能 : 1602 写数据函数 * 输 入 : 需要写入 1602 的数据 * 输出 : 无 ***********************************************************************/ 16 void write(uchar del) { P0 = del。 RS = 1。 RW = 0。 E = 0。 Delay2()。 E = 1。 Delay2()。 } /******************************************************************** * 名称 : L1602_init() * 功能 : 1602 初始化,请参考 1602 的资料 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void L1602_init(void) { enable(0x38)。 Delay_1ms(5)。 enable(0x38)。 Delay_1ms(5)。 enable(0x38)。 Delay_1ms(5)。 enable(0x38)。 enable(0x08)。 enable(0x0c)。 enable(0x04)。 enable(0x01)。 } void write_byte(uchar dat)//写一个字节 { ACC=dat。 RST=1。 for(a=8。 a0。 a) { IO=ACC0。 SCLK=0。 SCLK=1。 ACC=ACC1。 } } 17 uchar read_byte()//读一个字节 { RST=1。 for(a=8。 a0。 a) { ACC7=IO。 SCLK=1。 SCLK=0。 ACC=ACC1。 } return (ACC)。 } // void write_1302(uchar add,uchar dat)//向 1302 芯片写函数,指定写入地址,数据 { RST=0。 SCLK=0。 RST=1。 write_byte(add)。 write_byte(dat)。 SCLK=1。 RST=0。 } uchar read_1302(uchar add)//从 1302 读数据函数,指定读取数据来源地址 { uchar temp。 RST=0。 SCLK=0。 RST=1。 write_byte(add)。 temp=read_byte()。 SCLK=1。 RST=0。 return(temp)。 } uchar BCD_Decimal(uchar bcd)//BCD 码转十进制函数,输入 BCD,返回十进制 { uchar Decimal。 Decimal=bcd4。 return(Decimal=Decimal*10+(bcdamp。 =0x0F))。 } // 18 void ds1302_init() //1302 芯片初始化子函数 (20200107,12:00:00,week4) { RST=0。 SCLK=0。 write_1302(0x8e,0x00)。 //允许写,禁止写保护 write_1302(0x80,0x00)。 //向 DS1302 内写秒寄存器 80H 写入初始秒数据 00 write_1302(0x82,0x00)。 //向 DS1302 内写分寄存器 82H 写入初始分数据 00 write_1302(0x84,0x12)。 //向 DS1302 内写小时寄存器 84H 写入初始小时数据 12 write_1302(0x8a,0x04)。 //向 DS1302 内写周寄存器 8aH 写入初始周数据 4 write_1302(0x86,0x07)。 //向 DS1302 内写日期寄存器 86H 写入初始日期数据 07 write_1302(0x88,0x01)。 //向 DS1302 内写月份寄存器 88H 写入初始月份数据 01 write_1302(0x8c,0x10)。 //向 DS1302 内写年份寄存器 8cH 写入初始年份数据 10 write_1302(0x8e,0x80)。 //打开写保护 } void change(void) { SCLK=0。 write_1302(0x8e,0x00)。 //允许写,禁止写保护 write_1302(0x80,0x80|miao)。 //向 DS1302 内写秒寄存器 80H 写入初始秒数据 00 write_1302(0x8e,0x80)。 //打开写保护 } void ok(void) { SCLK=0。 write_1302(0x8e,0x00)。 //允许写,禁止写保护 write_1302(0x80,miaoamp。 0x7f)。 //向 DS1302 内写秒寄存器 80H 写入初始秒数据 00 write_1302(0x8e,0x80)。 //打开写保护 } void dis_tim_lcd(uchar ,uchar dat) { uchar shi=0,ge=0。 shi=dat/10。 ge=dat%10。 if(count) enable(0x0c)。 enable()。 write(num[shi])。 write(num[ge])。 if(count) { switch(count) { case 1:enable(0x80+0x40+7)。 enable(0x0f)。 break。 case 2:enable(0x80+0x40+6)。 enable(0x0f)。 break。 19 case 3:enable(0x80+0x40+4)。 enable(0x0f)。 break。 case 4:enable(0x80+0x40+3)。 enable(0x0f)。 break。 case 5:enable(0x80+0x40+1)。 enable(0x0f)。 break。 case 6:enable(0x80+0x40)。 enable(0x0f)。 break。 case 7:enable(0x80+9)。 enable(0x0f)。 break。 case 8:enable(0x80+8)。 enable(0x0f)。 break。 case 9:enable(0x80+6)。 enable(0x0f)。 break。 case 10:enable(0x80+5)。 enable(0x0f)。 break。 case 11:enable(0x80+3)。 enable(0x0f)。 break。 case 12:enable(0x80+2)。 enable(0x0f)。 break。 default:break。 } } } void display() { EX1=0。 miao=BCD_Decimal(read_1302(0x81))。 fen=BCD_Decimal(read_1302(0x83))。 shi=BCD_Decimal(read_1302(0x85))。 ri=BCD_Decimal(read_1302(0x87))。 yue=BCD_Decimal(read_1302(0x89))。 nian=BCD_Decimal(read_1302(0x8d))。 week=BCD_Decimal(read_1302(0x8b))。 dis_tim_lcd(0x82,nian)。 dis_tim_lcd(0x85,yue)。 dis_tim_lcd(0x88,ri)。 dis_tim_lcd(0x80+0x40,shi)。 dis_tim_lcd(0x80+0x40+3,fen)。 dis_tim_lcd(0x80+0x40+6,miao)。 EX1=1。 } void init_dis() { uchar i。 enable(0x80)。 for(i=0。 i10。 i++) write(tab1[i])。 enable(0x80+0x40)。 for(i=0。 i8。 i++) write(tab2[i])。 } void change_finish() { 20 RST=0。 SCLK=0。 write_1302(0x8e,0x00)。 //允许写,禁止写保护 write_1302(0x80,(table[1]4|table[0])amp。 0x7f)。 //向 DS1302 内写秒寄存器 80H 写入初始秒数据 00 write_1302(0x82,table[3]4|table[2])。 //向 DS1302 内写分寄存器 82H写入初始分数据00 wr。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。