首页 ADuC812单片机例程

ADuC812单片机例程

举报
开通vip

ADuC812单片机例程 1-0 跑马灯 #include //此头文件用于将所有的端口变量和相应的寄存器关联 //全局变量申请,作为循环点亮的控制变量 unsigned char deng=0; //延时子程序 void delay(int time) { int i=0; for(i=0;i sbit key_1=P1^3; sbit key_2=P1^6; sbit key_3=P1^4; sbit key_4=P1^7; void main() { P1=0;...

ADuC812单片机例程
1-0 跑马灯 #include //此头文件用于将所有的端口变量和相应的寄存器关联 //全局变量申请,作为循环点亮的控制变量 unsigned char deng=0; //延时子程序 void delay(int time) { int i=0; for(i=0;i sbit key_1=P1^3; sbit key_2=P1^6; sbit key_3=P1^4; sbit key_4=P1^7; void main() { P1=0; //初始化,P1写 0,数码管显示 0 P2=0x60; //数码管显示 0 while(1) //无限循环 { if(key_1==1) P2=1|0x60; //按键 1,数码管显示 1,下同 else if(key_2==1) P2=2|0x60; else if(key_3==1) P2=3|0x60; else if(key_4==1) P2=4|0x60; else P2=0x60; } } 1-2 按键次数 #include void main() { int n=0; //变量 n用于记录按键次数,初值取 0 int i=0; //变量 i用于延时 P1=0; //初始化,P1写 0 while(1) //无限循环 { P2=64; //数码管显示 00 while(n<=20) //n不大于 20时,扫描按键信号,显示按键次数 { if((P1&8)==8) //K1按下 { n++; for(i=0;i<15000;i++) ; //延时防抖 } P2=96+n%10; //个位 P2=80+(n-n%10)/10; //十位 } n=0; //n=20时计数清零 } } 2-0 时间中断&跑马灯 #include //此头文件用于将所有的端口变量和相应的寄存器关联 //全局变量申请,作为循环点亮的控制变量 unsigned char deng=2; void main(void) //主程序入口 { //配置并打开时间 0中断 TMOD=0x01; //让时间中断 0工作在 1模式下 TCON=0x10; //打开时间中断 0 ET0=1; //允许响应时间中断 EA=1; //允许响应所有中断 P0=2; //灯端口初始化,点亮第一个灯 //程序进入无限循环 while(1) P0=deng; //不断向 P0端口写灯的控制变量,此变量将在时间中断中修改 } void timer1(void) interrupt 1 //中断子程入口 { if(deng==2) deng=4; //如果是第一个灯亮,关第一个灯,开第二个灯 else if(deng==4) deng=8; //如果是第二个灯亮,关第二个灯,开第三个灯 else if(deng==8) deng=16; //如果是第三个灯亮,关第三个灯,开第四个灯 else if(deng==16) deng=2; //如果是第四个灯亮,关第四个灯,开第一个灯 else deng=2; //如果不是以上情况,数据出现问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,恢复到第一个灯亮 } 2-1 蜂鸣器 #include int n=0; //变量 n,用于记录中断次数以计时 int i=0; //变量 i,用于循环延时 void main() //主程序 { TMOD=0x01; //让时间中断 0工作在 1模式下 TCON=0x10; //打开时间中断 0 ET0=1; //允许响应时间中断 EA=1; //允许响应所有中断 while(1) ; //无限循环 } void timer1() interrupt 1 //中断子程 { n++; if(n%15==0) //中断 15次,即计时 1秒后,执行下面程序 { for(i=0;i<=10000;i++) P0=8; //P0.3置 1,循环延时,蜂鸣器响 P0=0; //关蜂鸣器 n=0; //计数清零 } } 2-3 循环亮灯 #include int n=0; //变量 n,用于记录中断次数 int l=2; //变量 l,用于表示灯亮状态 int c=0; //变量 c,用于表示按键状态,以控制中断子程的执行 void main() //主程序 { TMOD=0x01; //让时间中断 0工作在 1模式下 TCON=0x10; //打开时间中断 0 ET0=1; //允许响应时间中断 EA=1; //允许响应所有中断 P0=0; //P0置 0 P1=0; //P1置 0 while(1) //无限循环 { if((P1&8)==8) c=1; //按下 K1键后 c=1 if((P1&64)==64) c=0; //按下 K2键后 c=0 } } void timer_0() interrupt 1 { n++; if(n==8) //中断 8次,计时约半秒 { if(c==1) //c=1时执行下面跑马灯程序 { P0=l; if(l==2) l=4; else if(l==4) l=8; else if(l==8) l=16; else if(l==16) l=2; else l=2; } n=0; //计数清零 } } 3-0 DA/AD #include //此头文件用于将所有的端口变量和相应的寄存器关联 //全局变量申请,作为循环点亮的控制变量 unsigned char dataH,dataL; //储存转换结果,分别读取 ADCDATAH,ADCDATAL unsigned char triangleH,triangleL; //DA输出量 unsigned int res; //存储 12 位的转换结果 unsigned char who; //显示变量,指示当前显示的数码管 bit flag; //加减标记 void delay(int time) //延时子程序 { int i=0; for(i=0;i=0x0D)&&(triangleL>=0xFE)) flag=1; //输出到达最大变为减 if((triangleH<=0x02)&&(triangleL<=0x10)) flag=0; //输出到达最小变为加 //手动实现加法/减法和进位/借位运算 if(triangleL>=0xFE&&flag==0) { triangleH=triangleH+1; triangleL=0; } else if(triangleL<=0x01&&flag==1) { triangleH=triangleH-1; triangleL=0xFF; } else { if(flag==0) triangleL=triangle+1; else triangleL=triangle-1; } DAC0H=triangleH; //写入高位数据 DAC0L=triangleL; //写入低位数据(必须先写高位数据,否则写完低位就更新) delay(10); //写入数据保持 } } void timer1(void) interrupt 1 { switch(who) { case 0://显示千位 who=1; P2=(res/10)%10|0x30; break; case 1://显示百位 who=0; P2=(res/1)%10|0x50; break; } } void adci(void) interrupt 6 { //取转换结果 dataL=ADCDATAL; dataH=ADCDATAH; //对转换的结果进行处理 res=dataH&0x0F; res=res<<8; res=res+dataL; res=(res-290)/32; SCONV=1; //开始下一次 AD转换 } 3-1 AD #include //此头文件用于将所有的端口变量和相应的寄存器关联 //全局变量申请,作为循环点亮的控制变量 unsigned char dataH,dataL; //储存转换结果,分别读取 ADCDATAH,ADCDATAL unsigned int res; //存储 12 位的转换结果 int i; void main(void) //主程序入口 { //数据初始化 dataH=0; dataL=0; res=0; P0=0; //设置并打开 AD转换口 ADCCON1=0x78; ADCCON2=0x00; //打开 AD中断 EADC=1; //允许响应 AD中断 EA=1; //允许响应所有中断 //开始一次 AD转换,出发 AD中断程序 SCONV=1; //程序进入无限循环,生成三角波 DA输出 0~1000 while(1) { dataL=ADCDATAL; dataH=ADCDATAH; //对转换的结果进行处理 res=dataH&0x0F; res=res <<8; res=res+dataL; i=(((res/41)%10)+((res/410)%10)*10-13)*100/76; P2=i%10|0x60; P2=((i-i%10)/10)%10|0x50; //开始一次 AD转换 SCONV=1; } }
本文档为【ADuC812单片机例程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_041338
暂无简介~
格式:pdf
大小:134KB
软件:PDF阅读器
页数:11
分类:互联网
上传时间:2013-04-10
浏览量:88