欢迎来到天天文库
浏览记录
ID:39554488
大小:50.50 KB
页数:10页
时间:2019-07-06
《单片机时钟程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、首先要掌握lcd1602编程,红外遥控原理,当然,单片机基本的要懂得此程序是用stc89c52单片机,所用的IO口程序有说明。#include#defineucharunsignedchar#defineuintunsignedint#definett46080//设置时间间隔,对应11.0592MHZ的晶振sbiten=P3^4;sbitrs=P3^5;//用于控制1602sbitrw=P3^6;sbitdula=P2^6;sbitwela=P2^7;//用于控制晶体管sbitIRIN=P3^2;//红外接收器数据线IO口bitL=1;uchart,
2、key=0,hh=0,mm=0,ss=0;ucharIRCOM[4]=0;//定义数组IRCOM,分别装解码后得到的数据//IRCOM[0]低8位地址码//IRCOM[1]高8位地址码//IRCOM[2]8位数据码//IRCOM[3]8位数据码的反码ucharcodetable[]="Inputpassword";ucharcodetable1[]="Welcometouse!";ucharcodetable2[]="Passworderror!";ucharcodenum[]="0123456789";ucharcodemima[]="5201314";ucharco
3、dewish[]="Happyeveryday!";ucharcodetime[]="00:00:00";ucharcodeloading[]="Loading...";/////////////////////////////////////////////////////voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=112;y>0;y--);//大约是1ms,因为单片机的时钟周期为11.0592mhz。}voidwrite_com(ucharcom){rs=0;//指令P0=com;//写指令函数delay(5);en
4、=1;delay(5);en=0;}voidwrite_data(uchardat){rs=1;//数据P0=dat;//写指令函数delay(5);en=1;delay(5);en=0;}voidLCD_init(){wela=0;dula=0;//用于关闭晶体管,因为都是用P0en=0;//初始时使能为0rw=0;write_com(0x38);//显示屏模式设置为1602方案write_com(0x0f);//显示开关/光标设置write_com(0x06);write_com(0x01);//清屏write_com(0x80);//指针置零}//////////
5、////////////////////////////////////////////////////////////////////////////////////////voiddelay014ms(ucharx)//x*0.14MSSTC10F04延时约0.15MS{uchari;while(x--){for(i=0;i<15;i++)//13;}}//////////////初始化////////////voidIR_init(void){EA=1;EX0=1;//允许总中断中断,使能INT0外部中断IT0=1;//触发方式为脉冲负边沿触发IRIN=1;//I
6、/O口初始化}////////////解码过程//////////////voidIR_CODE(void)interrupt0//在外部中断子程序中解码{voidshuanxin(ucharadd,uchardate);ucharj,k,N=0,h,m,n;EX0=0;//防止干扰delay014ms(15);//延时2.1msif(IRIN==1)//2.1ms能够检测出各种错误信号{EX0=1;return;}//确认IR信号出现while(!IRIN);//等IR变为高电平,跳过9ms的前导低电平信号。//////高电平后开始检测高电平持续的时间以确定是0还是1
7、/////for(j=0;j<4;j++)//收集四组数据{for(k=0;k<8;k++)//每组数据有8位{while(IRIN);//等IR变为低电平,跳过4.5ms的前导高电平信号。//引导码检验结束while(!IRIN);//等IR变为高电平开始检测while(IRIN)//计算IR高电平时长{delay014ms(1);N++;if(N>=30){EX0=1;return;}//0.14ms计数过长自动离开?}//高电平计数完毕IRCOM[j]=IRCOM[j]>>1;//数据最高位补"0"if(N>=8)//6*0.14=
此文档下载收益归作者所有