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

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(单片机程序源代码.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

单片机程序源代码.doc

1、第二章 任务一:闪烁广告灯的设计 利用89c51单片机的端口控制两个LED(D0和D1),编写程序,实现两个LED互闪。 #include #define uint unsigned int #define uchar unsigned char sbit LED1=P0^0; sbit LED2=P0^1; void delayms(uint ms) { uint i; while(ms--) { for(i=0;i<120;i++); } } void main() { while(1

2、) { LED1=0; LED2=1; delayms(500); LED1=1; LED2=0; delayms(500); } } 任务二:流水广告灯的设计 利用89c51单片机的端口控制8个LED(D0~D7)循环点亮,刚开始时D0点亮,延时片刻后,接着D1点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7 ,然后再点亮D7->D6->D5->D4 ->D3->D2->D1->D0,重复循环。 #include #include #define uint unsign

3、ed int #define uchar unsigned char uint i; uchar temp; uint a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delayms(uint ms) { while(ms--) { uint j; for(j=0;j<120;j++); } } void main() { while(1) { P0=0xfe; while(P0!=0x7f) { //P1=temp;

4、 //delayms(500); P0=_crol_(P0,1); delayms(250); } temp=0x7f; while(P0!=0xfe) { P0=temp; delayms(500); temp=_cror_(temp,1); } } } 任务三:拉幕式与闭幕式广告灯的设计 利用89c51单片机的P0端口实现8个LED D0~D7的拉幕式与闭幕式广告灯设计。 拉幕式: 开始D0~D7全灭,延时片刻后首先D3和D4亮,其次是 D2和D5亮,

5、再是D1和D6亮,最后是D0和D7亮。 闭幕式:开始D0~D7全亮,延时片刻后首先D0和D7灭,其次是 D1和D6灭,再是D2和D5灭,最后是D3和D4灭。 #include #define uint unsigned int #define uchar unsigned char uchar code table[]={0xe7,0xc3,0x81,0x00}; void delay(uint x) { uint i,j; for(i=x;i>0;i--) for(j=120;j>0;j--); } void main() { uint

6、 i; while(1) { P1=0xff; delay(500); for(i=0;i<4;i++) { P1=table[i]; delay(500); } for(i=3;i>0;i--) { P1=table[i-1]; delay(500); } } } 任务四:复杂广告灯的设计 利用89c51单片机的端口实现8个LED(D0~D7)复杂广告灯的控制,要求显示规律为:正向流水->反向流水->隔灯闪烁3次->高四盏、低四盏闪烁2次->隔两盏闪烁3次,再重复循环。 #include

7、 #define uint unsigned int #include void delayms(uint ms) { uint i; while(ms--) { for(i=0;i<110;i++); } } void main() { uint i,j,xx[2]={0xaa,0xff},yy[2]={0xf0,0x0f},zz[2]={0xb6,0xff}; unsigned char aa; while(1) { aa=0xfe; for(i

8、0;i<7;i++) { P0=aa; aa=_crol_(aa,1); delayms(500); } for(i=0;i<8;i++) { P0=aa; aa=_cror_(aa,1); delayms(500); } for(i=0;i<3;i++) for(j=0;j<2;j++) { P0=xx[j]; delayms(500); } for(i=0;i<2;i++)

9、 for(j=0;j<2;j++) { P0=yy[j] ; delayms(500); } for(i=0;i<3;i++) for(j=0;j<2;j++) { P0=zz[j] ; delayms(500); } } } 任务五:单个LED数码管显示设计 使用89c51的P0口作为输出口,外接LED数码管,编写程序,使数码管循环显示从0~9的加1计数。 #include #define uint

10、 unsigned int #define uchar unsigned char uchar table[10]={ 0XC0,0XF9,0XA4,0XB0, 0X99,0X92,0X82,0XF8, 0X80,0X90}; uint key=0; void int_int() { EA=1; IT0=1; EX0=1; } void count_num() interrupt 0 { if(key==9)key=0; else key++; } void main() { int_int(); whil

11、e(1) { P0=table[key]; } } 任务六:多个LED数码管显示设计 使用单片机P0和P2口作为输出口,外接一个8位LED数码管,编写程序,使数码管显示“872AF635”。 #include #include #define uint unsigned int #define uchar unsigned char delay(ms) { while(ms--) { int i; for(i=0;i<110;i++); } } main() {

12、 uchar a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar b[8]={0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05},j; uint i; while(1) { j=0x01; for(i=0;i<8;i++) { P2=j; P0=a[b[i]]; j=_crol_(j,1); delay(3); } } } 任

13、务七:查询式按键设计 将8个按键从1~8进行编号,如果其中一个键被按下,则在LED数码管上显示相应的键值。 #include #define uint unsigned int #define uchar unsigned char main() { uchar a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; P0=0xff; while(P0!=0xff) { switch(P0) {case 0xfe:

14、 P2=a[1]; break; case 0xfd: P2=a[2]; break; case 0xfb: P2=a[3]; break; case 0xf7: P2=a[4]; break; case 0xef: P2=a[5]; break; case 0xdf: P2=a[6]; break; case 0xbf: P2=a[7]; break; case 0x7f: P2=a[8]; } } } 任务八:LED数码管显示矩阵键盘按键的设计 设计一个4*4的矩阵键盘,以P1.0~P1.3作为行线,以P1.4~P1

15、7作为列线。要求:未按下按键时,LED数码管显示“-”,按下按键时,在数码管上显示相应的键值。 #include #define uchar unsigned char #define uint unsigned int uchar table[17]={0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uint num=0; void delay(uint x) { uchar i,j; for(i=x;i>0;i--)

16、for(j=120;j>0;j--); } keyscan() { uint temp; temp=P2; temp&=0x0f; if(temp==0x0e) { P2=0xf0; temp=P2; temp&=0xf0; switch(temp) { case 0xe0:num=1;break; case 0xd0:num=2;break; case 0xb0:num=3;break; case 0x70:num=4; } } if(temp=

17、0x0d) { P2=0xf0; temp=P2; temp&=0xf0; switch(temp) { case 0xe0:num=5;break; case 0xd0:num=6;break; case 0xb0:num=7;break; case 0x70:num=8; } } if(temp==0x0b) { P2=0xf0; temp=P2; temp&=0xf0; switch(temp) {

18、 case 0xe0:num=9;break; case 0xd0:num=10;break; case 0xb0:num=11;break; case 0x70:num=12; } } if(temp==0x07) { P2=0xf0; temp=P2; temp&=0xf0; switch(temp) { case 0xe0:num=13;break; case 0xd0:num=14;break; case 0xb0:num=15;break; c

19、ase 0x70:num=16; } } return num; } void display(uint num) { if(num==0) P0=0xbf; P0=table[num] ; } main() { uint temp; while(1) { P2=0x0f; temp=P2; if(temp!=0x0f) keyscan(); display(num); } } (2) #include #define

20、 uchar unsigned char #define uint unsigned int sbit LED1=P2^0; sbit LED2=P2^1; uchar num; uchar code LED_code[]= { 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e };//数码管字形码编码 void delay(uint x) { uchar i,j; for(i=x;i>0;i--) for(j=120;j>0;j-

21、); }//延时函数 void display(uchar num) { P0=LED_code[num]; }//数码管显示函数 void keyscan()//键盘扫描函数 { uchar temp; P1=0xfe;//key1-key4第一行按下 temp=P1; temp&=0xf0; if(temp!=0xf0) { delay(10);//消除抖动 temp=P1; temp&=0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { cas

22、e 0xee: num=1; break; case 0xde: num=2; break; case 0xbe: num=3; break; case 0x7e: num=4; break; } } while(temp!=0xf0)//等待按键释放 { temp=P1; temp&=0xf0; } } P1=0xfd;//key5-key8第二行按下 temp=P1; temp&=0xf0; if(temp!=0xf0)

23、 { delay(10);//消除抖动 temp=P1; temp&=0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xed: num=5; break; case 0xdd: num=6; break; case 0xbd: num=7; break; case 0x7d: num=8; break; } } while(temp!=0xf0)//

24、等待按键释放 { temp=P1; temp&=0xf0; } } P1=0xfb;//key9-key12第三行按下 temp=P1; temp&=0xf0; if(temp!=0xf0) { delay(10);//消除抖动 temp=P1; temp&=0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb: num=9; break; case 0xdb: num=10;

25、 break; case 0xbb: num=11; break; case 0x7b: num=12; break; } } while(temp!=0xf0)//等待按键释放 { temp=P1; temp&=0xf0; } } P1=0xf7;//key13-key16第四行按下 temp=P1; temp&=0xf0; if(temp!=0xf0) { delay(10);//消除抖动 temp=P1; temp&=0xf0; if(

26、temp!=0xf0) { temp=P1; switch(temp) { case 0xe7: num=13; break; case 0xd7: num=14; break; case 0xb7: num=15; break; case 0x77: num=16; break; } } while(temp!=0xf0)//等待按键释放 { temp=P1; temp&=0xf0; } } }

27、void main() { while(1) { keyscan(); if(num==0) P0=0xbf; else display(num-1); } } 任务九:简单拨号键盘的设计 使用4*4的矩阵式键盘及8位共阳极LED数码管设计一个简单拨号键盘,要求在初始状态时,8位数码管均显示“-”,每按下一个号码后,原8位LED数码管显示的内容向左移动1位。 #include #include #define uint unsigned int #define uchar unsigned

28、char uchar keycount=0,num; uchar code LED1_code[]= { 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e };//数码管字形码编码 uchar LED2_duan[8]={0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf};//8段共阳数码管编码 uchar LED2_wei[8]= {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; v

29、oid delay(uint x) { uchar i,j; for(i=x;i>0;i--) for(j=120;j>0;j--); } void display() { uchar i; //P2=0x80; for(i=0;i<8;i++) { P2=LED2_wei[i]; P0=LED2_duan[7-i]; delay(1); } } void keyscan() { uchar temp; P3=0xfe; temp=P3; temp&=0xf0; if(temp!=0xf0)

30、 { delay(10); temp=P3; temp&=0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:keycount++;num=0;break; case 0xde:keycount++;num=1;break; case 0xbe:keycount++;num=2;break; case 0x7e:keycount++;num=3;break; } } while(temp!=0xf0) {

31、 temp=P3; temp&=0xf0; } } P3=0xfd; temp=P3; temp&=0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp&=0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:keycount++;num=4;break; case 0xdd:keycount++;num=5;break; case 0xbd:keycount++;num=

32、6;break; case 0x7d:keycount++;num=7;break; } } while(temp!=0xf0) { temp=P3; temp&=0xf0; } } P3=0xfb; temp=P3; temp&=0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp&=0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:keyco

33、unt++;num=8;break; case 0xdb:keycount++;num=9;break; case 0xbb:keycount++;num=10;break; case 0x7b:keycount++;num=11;break; } } while(temp!=0xf0) { temp=P3; temp&=0xf0; } } P3=0xf7; temp=P3; temp&=0xf0; if(temp!=0xf0) { delay(10); temp=P3; t

34、emp&=0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7:keycount++;num=12;break; case 0xd7:keycount++;num=13;break; case 0xb7:keycount++;num=14;break; case 0x77:keycount++;num=15;break; } } while(temp!=0xf0) { temp=P3; temp&=0xf0; }

35、 } } void main() { uchar i; while(1) { display(); keyscan(); if(keycount!=0) { for(i=0;i<7;i++) LED2_duan[i]=LED2_duan[i+1]; LED2_duan[7]=LED1_code[num]; keycount=0; } } } 第五章 任务一:带中断控制的LED花样灯 P0端口作为输出口,外接8只LED,P3.2外接按键K。编写程序,当K未按下时,8只LED进行默认显示,其显示规律

36、为左移流水->右移流水->隔灯闪烁3次花样显示;如果按下K键后,8只LED暂停默认显示,而进行闪烁显示,当显示达到5次后,继续按默认规律显示。 #include #define uint unsigned int #define uchar unsigned char uint LED_table[14]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd}; void delayms(uint ms) { uint i; while(ms--)

37、 for(i=0;i<120;i++); } void int_int() { EA=1; EX0=1; IT0=1; } void LED_shan() interrupt 0 { uint k; for(k=0;k<5;k++) { P0=0xaa; delayms(500); P0=0xff; delayms(500); } } void main() { int_int(); while(1) { uint i; for(i=0;i<14;i++) {

38、 P0=LED_table[i]; delayms(500); } for(i=0;i<3;i++) { P0=0xaa; delayms(500); P0=0xff; delayms(500); } } } 任务二:采用外中断控制的条形LED彩灯设计 P0端口作为输出口,外接条形LED。编写程序,当按键K未按下时,LED进行循环左移显示。如果第1次按下按键K后,LED进行循环右移显示。如果第2次按下按键K后,LED进行拉幕式与闭幕式花样显示。如果第3次按下按键K后,又恢复循环左移显示。 #inclu

39、de unsigned char flag=0; //状态标志位 unsigned char led =0; //LED映射位 unsigned char table[]={ //花样数组 0x00,0x81,0xc3,0xe7, 0xff,0xe7,0xc3,0x81};//先闭幕式再开幕式 void delayms(unsigned int ms); //延时函数 void sysInit(void); //系统初始化 void step0(void); //状态0 void step1(void); //状态1 void step2(v

40、oid); //状态2 void main(void) { sysInit(); //初始化系统 while(1) { switch(flag) { case 0: step0();break; case 1: step1();break; case 2: step2();break; default:break; } P0 = ~led; //将led值映射到LED灯 delayms(500); //延时500ms } } void delayms(unsigned int ms) { uns

41、igned char i; for (;ms;ms--) for (i=110;i;i--); } void sysInit(void) { EX0 = 1; //打开外部中断0 EA = 1; //打开总中断 IT0 = 1; //外部中断0下降沿触发 } void step0(void) { led <<=1; //左移 if (led==0) //溢出处理 led = 0x01; } void step1(void) { led >>=1; //右移 if (led==0) //溢出处理 led = 0x80;

42、} void step2(void) { static char t; led = table[t++]; //开幕闭幕花样显示 if (t==8) t = 0; } void EX_0() interrupt 0 //外部中断0服务函数 { flag++; if (flag==3) flag = 0; } (2) #include//头文件 #define uchar unsigned char #define uint unsigned int //宏定义 uchar temp,key_count; uc

43、har code tab[]={ //开幕式闭幕式编码 0x00,0x81,0xc3,0xe7, 0xff,0xe7,0xc3,0x81}; void delay(uint ms) //延时子函数 { uint i,j; for(i=ms;i>0;i--) for(j=0;j<110;j++); } void loop_leftmove() { temp=temp<<1; if(temp==0) temp=0x01; } void loop_rightmove() { temp=temp>>1; if(temp=

44、0) temp=0x80; } void open_close() { uchar count; temp=tab[count]; count++; if(count>=8) count=0; } void init() { EA=1; EX0=1; IT0=1; temp=0; key_count=0; } void main() { init(); while(1) { switch(key_count) { case 0:loop_leftmove();break;

45、case 1:loop_rightmove();break; case 2:open_close();break; default:break; } P0=~temp; delay(250); } } void key_interrupt() interrupt 0//外部中断INT0中断服务程序 { key_count++; key_count%=3; /*if(key_count==3) key_count=0;*/ } 任务三:采用两个外中断的LED彩灯控制 P0端口作为输出口,外接8只LED,P3.2外接按键K1

46、P3.3外接按键K2。编写程序,没有按下任何按键时,LED隔灯闪烁,当按键K1为奇数次时,LED进行左移流水->右移流水显示。当按下按键K1为偶数次时,LED进行拉幕式显示;当按下按键K2时,LED暂停显示,蜂鸣器发出“叮咚”的开门声音,然后LED继续花样显示(K2按键优先)。 #include #include #define uchar unsigned char #define uint unsigned int sbit key1=P3^2; sbit key2=P3^3; sbit beep=P1^0; uchar code

47、tab[]={ 0xff,0xe7,0xc3,0x81, 0x00,0x81,0xc3,0xe7};//开幕式编码 uchar temp=0x01,key_count,flag,right,beep_FG; void delay(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void init() { EA=1;//打开总中断 EX0=1;//打开外部中断INT0 EX1=1;//打开外部中断INT1 IT0=1;//下降沿触发方式 IT1=1;//下降沿触发方式

48、PX0=0;//设置INT0为低中断优先级 PX1=1;//设置INT1为高中断优先级 } void interval_LED() { P0=0xff; delay(500); P0=0xaa; delay(500); } void left_right_move() { if(!right) temp=_crol_(temp,1); else temp=_cror_(temp,1); if(temp==0x01) { right=0; } if(temp==0x80) right=1; } void open

49、LED() { uchar count; temp=tab[count++]; if(count==8) count=0; } void Beep() { uchar i,j,k; for(i=100;i;i--) for(j=20;j;j--) { for(k=1000;k;k--) beep=~beep; } /*for(i=100;i;i--) for(j=200;j;j--) { for(k=1000;k;k--) beep=~beep; }*/ beep_FG=0; } void

50、 main() { init(); beep=0; while(1) { if(!flag) interval_LED(); else { if(beep_FG) { Beep(); } else { switch(key_count%2) { case 1: left_right_move(); break;//奇数次按键左移右移显示 case 0: open_LED(); break;//偶数次

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服