下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 ADuC812单片机例程

ADuC812单片机例程.pdf

ADuC812单片机例程

116800682
2013-04-10 0人阅读 举报 0 0 暂无简介

简介:本文档为《ADuC812单片机例程pdf》,可适用于IT/计算机领域

跑马灯#include<ADUCH>此头文件用于将所有的端口变量和相应的寄存器关联全局变量申请作为循环点亮的控制变量unsignedchardeng=延时子程序voiddelay(inttime){inti=for(i=i<timei)}voidmain(void)主程序入口{P=灯端口初始化点亮第一个灯程序进入无限循环while(){if(deng==)deng=如果是第一个灯亮关第一个灯开第二个灯elseif(deng==)deng=如果是第二个灯亮关第二个灯开第三个灯elseif(deng==)deng=如果是第三个灯亮关第三个灯开第四个灯elseif(deng==)deng=如果是第四个灯亮关第四个灯开第一个灯elsedeng=如果不是以上情况恢复到第一个灯亮P=dengdelay()延迟一段时间}}显示按键号#include<ADUCH>sbitkey=P^sbitkey=P^sbitkey=P^sbitkey=P^voidmain(){P=初始化P写数码管显示P=x数码管显示while()无限循环{if(key==)P=|x按键数码管显示下同elseif(key==)P=|xelseif(key==)P=|xelseif(key==)P=|xelseP=x}}按键次数#include<ADUCH>voidmain(){intn=变量n用于记录按键次数初值取inti=变量i用于延时P=初始化P写while()无限循环{P=数码管显示while(n<=)n不大于时扫描按键信号显示按键次数{if((P)==)K按下{nfor(i=i<i)延时防抖}P=n个位P=(nn)十位}n=n=时计数清零}}时间中断跑马灯#include<ADUCH>此头文件用于将所有的端口变量和相应的寄存器关联全局变量申请作为循环点亮的控制变量unsignedchardeng=voidmain(void)主程序入口{配置并打开时间中断TMOD=x让时间中断工作在模式下TCON=x打开时间中断ET=允许响应时间中断EA=允许响应所有中断P=灯端口初始化点亮第一个灯程序进入无限循环while()P=deng不断向P端口写灯的控制变量此变量将在时间中断中修改}voidtimer(void)interrupt中断子程入口{if(deng==)deng=如果是第一个灯亮关第一个灯开第二个灯elseif(deng==)deng=如果是第二个灯亮关第二个灯开第三个灯elseif(deng==)deng=如果是第三个灯亮关第三个灯开第四个灯elseif(deng==)deng=如果是第四个灯亮关第四个灯开第一个灯elsedeng=如果不是以上情况数据出现问题恢复到第一个灯亮}蜂鸣器#include<ADUCH>intn=变量n用于记录中断次数以计时inti=变量i用于循环延时voidmain()主程序{TMOD=x让时间中断工作在模式下TCON=x打开时间中断ET=允许响应时间中断EA=允许响应所有中断while()无限循环}voidtimer()interrupt中断子程{nif(n==)中断次即计时秒后执行下面程序{for(i=i<=i)P=P置循环延时蜂鸣器响P=关蜂鸣器n=计数清零}}循环亮灯#include<ADUCH>intn=变量n用于记录中断次数intl=变量l用于表示灯亮状态intc=变量c用于表示按键状态以控制中断子程的执行voidmain()主程序{TMOD=x让时间中断工作在模式下TCON=x打开时间中断ET=允许响应时间中断EA=允许响应所有中断P=P置P=P置while()无限循环{if((P)==)c=按下K键后c=if((P)==)c=按下K键后c=}}voidtimer()interrupt{nif(n==)中断次计时约半秒{if(c==)c=时执行下面跑马灯程序{P=lif(l==)l=elseif(l==)l=elseif(l==)l=elseif(l==)l=elsel=}n=计数清零}}DAAD#include<ADUCH>此头文件用于将所有的端口变量和相应的寄存器关联全局变量申请作为循环点亮的控制变量unsignedchardataH,dataL储存转换结果分别读取ADCDATAHADCDATALunsignedchartriangleH,triangleLDA输出量unsignedintres存储位的转换结果unsignedcharwho显示变量指示当前显示的数码管bitflag加减标记voiddelay(inttime)延时子程序{inti=for(i=i<timei)}voidmain()主程序入口{数据初始化dataH=dataL=triangleH=triangleL=res=who=P=flag=配置并打开时间中断TMOD=x让时间中断工作在模式下TR=打开计时器ET=允许响应时间中断EA=允许响应所有中断设置并打开DA转换口DACCON=xD设置并打开AD转换口ADCCON=xADCCON=x打开AD中断EADC=允许响应AD中断EA=允许响应所有中断SCONV=开始一次AD转换出发AD中断程序程序进入无限循环生成三角波DA输出~while(){if((triangleH>=xD)(triangleL>=xFE))flag=输出到达最大变为减if((triangleH<=x)(triangleL<=x))flag=输出到达最小变为加手动实现加法减法和进位借位运算if(triangleL>=xFEflag==){triangleH=triangleHtriangleL=}elseif(triangleL<=xflag==){triangleH=triangleHtriangleL=xFF}else{if(flag==)triangleL=triangleelsetriangleL=triangle}DACH=triangleH写入高位数据DACL=triangleL写入低位数据(必须先写高位数据否则写完低位就更新)delay()写入数据保持}}voidtimer(void)interrupt{switch(who){case:显示千位who=P=(res)|xbreakcase:显示百位who=P=(res)|xbreak}}voidadci(void)interrupt{取转换结果dataL=ADCDATALdataH=ADCDATAH对转换的结果进行处理res=dataHxFres=res<<res=resdataLres=(res)SCONV=开始下一次AD转换}AD#include<ADUCH>此头文件用于将所有的端口变量和相应的寄存器关联全局变量申请作为循环点亮的控制变量unsignedchardataH,dataL储存转换结果分别读取ADCDATAHADCDATALunsignedintres存储位的转换结果intivoidmain(void)主程序入口{数据初始化dataH=dataL=res=P=设置并打开AD转换口ADCCON=xADCCON=x打开AD中断EADC=允许响应AD中断EA=允许响应所有中断开始一次AD转换出发AD中断程序SCONV=程序进入无限循环生成三角波DA输出~while(){dataL=ADCDATALdataH=ADCDATAH对转换的结果进行处理res=dataHxFres=res<<res=resdataLi=(((res))((res))*)*P=i|xP=((ii))|x开始一次AD转换SCONV=}}

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/11

ADuC812单片机例程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利