例题18—5程序代码20120423.doc
上传人:yy****24 上传时间:2024-09-10 格式:DOC 页数:8 大小:87KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

例题18—5程序代码20120423.doc

例题18—5程序代码20120423.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

例题18-5程序代码(1)选项字设置程序onchip.asm(可参阅附录E)OPTCSEGAT0080H;地址定位在0080H单元OPTION:DB00H;0080H定义为00H,不使用看门狗定时器,可由软件停止内部低速振荡器DB00H;0081H定义为00H,选择1.59VPOC模式DB00H;0082H为保留区域DB00H;0083H为保留区域DB03H;0084H定义为03H,允许片上调试,END(2)C语言程序#pragmasfr//使用特殊功能寄存器#pragmaaccess//使用绝对地址指令#pragmaEI//使用开中断和关中断功能#pragmaDI#pragmainterruptINTKRinterRB1//定义按键中断inter#pragmainterruptINTRTChalf_sec_INTERRUPT//使用INTRTC中断功能,命名中断为half_sec_INTERRUPTvoidfreshddisplaybuffer();//显示缓冲区刷新函数voidplay4bit();//显示函数voidd_c_inter();//切换函数voidset_inter();//调时函数voidset_hour();//闹钟时显示函数voidset_minute();//闹钟分显示函数voidhour_inter();//闹钟调时函数voidminute_inter();//闹钟调分函数voiddelay();//延时函数voidnoise();//闹钟响铃函数unsignedinthalf_second=0,second=0;//初始化使0.5秒单元=0,秒单元=0unsignedintminute=0,hour=0;//初始化使分单元=0,小时单元=0unsignedintday=1,month=1;//初始化使日单元=1,月单元=1unsignedintyear=2001;//初始化使年单元=2001unsignedinthour1=0;//初始化闹钟时单元=0unsignedintminute1=0;//初始化闹钟分单元=0unsignedinttemp;//临时变量unsignedintnumbercode[10]={0x070d,0x0600,0x030e,0x070a,0x0603,0x050b,0x050f,0x0700,0x070f,0x070b};//数字"0"~"9"的显示码unsignedchari=0;/*显示转换标志,i=0显示年,i=1显示月,i=2显示月和日,i=3显示时,i=4显示时和分,i=5显示分和秒*/unsignedcharj=0;//定义INTRTC中断标志变量junsignedcharKEY=0;//定义全局变量KEYunsignedintbuffyear[4];//年的数码显示缓存区unsignedintbuffm[4];//月的数码显示缓存区unsignedintbuffmd[4];//月和日的数码显示缓存区unsignedintbuffh[4];//时的数码显示缓存区unsignedintbuffhm[4];//时和分的数码显示缓存区unsignedintbuffms[4];//分和秒的数码显示缓存区unsignedintbuffhm1[4];//闹钟的时和分数码显示缓冲区//--------------------------------------------------------------------计算当前月中天数的函数unsignedintm_days(unsignedintmmonth){unsignedintdays;if((mmonth==4)||(mmonth==6)||(mmonth==9)||(mmonth==11))days=30;//4,6,9,11月为30天elseif(mmonth==2){if((year%4==0&&year%100!=0)||(year%400==0))days=29;//闰年2月为29天else