ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:21.39KB ,
资源ID:10506944      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10506944.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机考试程序题.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机考试程序题.docx

1、单片机考试程序题单片机程序 1双向来回流水灯/-/ 名称: 八只LED双向来回点亮 /-/ 说明:程序利用循环移位函数_crol_和_cror_形成LED来回滚动显示效果/-#include #include #define INT8U unsigned char#define INT16U unsigned int/-/ 延时/-void delay_ms(INT16U x) INT8U t; while(x-) for(t=0;t110;t+);/-/ 主程序/-void main() P2=0x01; while(1) while(P20x01) P2=_cror_(P2,1); del

2、ay_ms(500); /* INT8U a,cishu; a=0x01; while(1) P2=a; delay_ms(500); cishu=8; while(-cishu) a=_crol_(a,1); P2=a; delay_ms(500); cishu=8; while(-cishu) a=_cror_(a,1); P2=a; delay_ms(500); */-2分立式数码管循环显示0-9/ 名称: 分立式数码管循环显示09/-/ 说明: 主程序中的循环语句反复将0-9的段码送P0口,形成数字0-9的/ 循环显示./-#include #define INT8U unsigned

3、 char#define INT16U unsigned int/09的共阴数码管段码表code INT8U SEG_CODE = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/-/ 延时函数/-void delay_ms(INT16U x) INT8U t; while(x-) for(t = 0; t 120; t+);/-/ 主程序/-void main() int i; while(1) P0=SEG_CODEi; i=(+i)%10; delay_ms(1000); /-/ 名称: 3集成式数码管动态扫描显示/-/ 说明: 本例

4、使用动态扫描显示方法在8位数码管上显示指定数组内容/ /-#include #define INT8U unsigned char#define INT16U unsigned int/共阳数码管09的数字段码表code INT8U SEG_CODE = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/待显示到数码管的8个数字code INT8U array = 2,0,1,5,1,0,0,8 ;/-/ 延时函数/-void delay_ms(INT16U x) INT8U t; while(x-) for(t = 0; t 120; t+

5、);/-/ 主程序 /-void main() INT8U i; while (1) for(i=0;i8;i+) / P2=0; /这句话有什么用,如果将这句话注释掉会有什么后果? P0=SEG_CODEarrayi; P2=0x01i; /0000 0010 delay_ms(5); /-/ 名称: 4.按键调节数码管数字显示/-/ 说明: 本例通过按键加减数码管所显示的数字,调节过程中数码管闪烁显示./ 确定后恢复正常显示,按下取消时将恢复到调节之前的值./-#include #define INT8U unsigned char#define INT16U unsigned int/调

6、节按键定义sbit K1 = P34; /加sbit K2 = P35; /减sbit K3 = P36; /确定sbit K4 = P37; /取消/数字09的数码管段码表INT8U code SEG_CODE = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;INT16U Count=2314;INT16U Temp;INT8U array=0,0,0,0;INT8U Adjust=0;INT8U Pre_key=0xF0;/-/ 延时函数/-void delay_ms(INT16U x) INT8U t; while(x-) for(

7、t = 0; t =1000) array0+; n=n-1000; array1=0; while(n=100) array1+; n=n-100; array2=0; while(n=10) array2+; n=n-10; array3=n;/-/ 按键处理函数/-void key_handle() P3=P3|0xf0; if(Pre_key=(P3&0xf0) return; Pre_key=P3&0xf0; if(!K1) delay_ms(10); if(!K1) if(Temp=0) Temp=Count; Count+; Adjust=1; while(!K1); if(!K

8、2) delay_ms(10); if(!K2) if(Temp=0) Temp=Count; Count-; Adjust=1; if(!K3) delay_ms(10); if(!K3) Temp=0; Adjust=0; if(!K4) delay_ms(10); if(!K4) if(Adjust) Count=Temp; Temp=0; Adjust=0; /-/ 主程序/-void main() INT8U i; INT8U t; while(1) /1.正常刷新显示- INT_TO_4Digit(Count); for(i=0;i30;i+) for(t=0;t4;t+) P3=

9、P3&0xF0; P0=SEG_CODEarrayt; P3=P3|(1t); delay_ms(2); key_handle(); if(Adjust) P0=0xff; for(i=0;i15;i+) delay_ms(10); key_handle(); /2.处于调节状态- /-/ 名称: 5数码管显示44 键盘矩阵按键序号/-/ 说明: 按下任意一按键时,数码管会显示它在键盘矩阵上的序号0 - F,/ 扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加/ 不同的值,从而得到键盘按键序号./ /-#include #define INT8U unsigned char#defin

10、e INT16U unsigned int/0F的共阳数码管段码,最后一个是黑屏const INT8U SEG_CODE = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF;sbit BEEP = P30; /上次按键和当前按键序号,该矩阵中序号范围为0-15,0xFF表示无按键INT8U Pre_key=0xff,key=0xff;/-/ 延时函数/-void delay_ms(INT16U x) INT8U t; while(x-) for(t = 0; t 120;

11、 t+);/-/ 键盘矩阵扫描子程序/-void Keys_Scan() P1=0x0f; delay_ms(1); if(P1=0x0f) key=0xff; return; switch(P1) case 0x0e: key=0; break; case 0x0d: key=1; break; case 0x0b: key=2; break; case 0x07: key=3; break; default: key=0xff; return; P1=0xf0; delay_ms(1); switch(P1) case 0xe0: key=key+0; break; case 0xd0:

12、key=key+4; break; case 0xb0: key=key+8; break; case 0x70: key=key+12; break; default: key=0xff; return; /-/ 蜂鸣器子程序/-void Beep() INT8U i; for(i=0;i100;i+) BEEP=BEEP; delay_ms(1); BEEP=0; /-/ 主程序/-void main() P0=0XFF; while(1) Keys_Scan(); if(key!=0xff) P0=SEG_CODEkey; Beep(); while(Keys_Scan(),key!=0

13、xff); #include 6.定时器每一秒亮灭数码管#define uint unsigned int;/uint i;sbit led=P20;void main() int j; led=0; /定时器0中断初始化 TMOD=0X01; /0000 0 0 0 1 将定时器0的工作方式设置为方式1/ /中断开关/ EA=1; /中断总开关/ ET0=1; /打开定时器0中断开关 TR0=1; /定时器0开始定时 while(1) /* 查询方式触发定时器溢出 */ if(TF0=1) TH0=(65536-50000)/256; TL0=(65536-50000)%256; j+; P

14、1=j; if(j=500) j=0; led=led; / TR0=1; /*/ /* 中断方式 void timer() interrupt 1 /定时器0的中断服务函数/ int i; TH0=(65536-50000)/256; / 重装定时器0寄存器的初值 TL0=(65536-50000)%256; i+; P1=i; if(i=5) i=0; led=led; / TR0=1; */*7.用定时器0的方式1实现第一个发光二极管以200ms间隔闪烁,用定时器1的方式1实现数码管前两位59S的循环计时*/#include #define uchar unsigned char#def

15、ine uint unsigned intuchar code dulatable16= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07 ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar code welatable8= 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f ;sbit led1=P17; uint shuzhi,temp1,temp2;void delay(uint xms);void display();void Init_timer0();void Init_timer1

16、();void main() Init_timer0(); Init_timer1(); /*初始化定时器 TMOD=0x11; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; */ while(1) display(); void Init_timer0()/ uint b;/ b=TMOD; TMOD|=0x01; EA=1; ET0=1; TR0=1;void Init_timer1()/ uint b;/ b=TMOD; TMOD|=0x10; EA=1; ET1=1; TR1=1;void display() uint gewei=0,shiwei=0; shiwei=shuzhi/10; gewei=shuzhi%10; P0=0; P0=dulatablegewei; P2=welatable0; delay(5); P0=0; P0=dulatableshiwei; P2=welatable1; delay(5);void delay(uint xms) uint a,b; for(a=xms;a0;a-) for(b=0;b10;b+);void timer() interrupt 1/ uint a; TH0=(65535-10000)/256; TL0=(65535-10000)%256; temp1+; if

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1