完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言
本次实验所用单片机为C51单片机,CPU为AT89C52,使用的开发软件是Keil uVision4,将程序下载到单片机所使用的软件为stc-isp-15xx-v6.85H.exe。 C51单片机流水灯实验的实现 1、点击File-》New创建一个新文档。 2、在文档中书写如下程序。 (注:第一种流水灯程序代码如下) #include《reg52.h》 //定义led灯变量 ***it led0=P1^0; ***it led1=P1^1; ***it led2=P1^2; ***it led3=P1^3; ***it led4=P1^4; ***it led5=P1^5; ***it led6=P1^6; ***it led7=P1^7; //延时函数延迟一秒 void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } int main() { while(1) { led0=0; Delay1000ms(); led1=0; Delay1000ms(); led2=0; Delay1000ms(); led3=0; Delay1000ms(); led4=0; Delay1000ms(); led5=0; Delay1000ms(); led6=0; Delay1000ms(); led7=0; Delay1000ms(); P1=0xFF; Delay1000ms() } return 0; } (注:第二种流水灯程序实现代码如下) #include《reg52.h》 //定义led灯变量 ***it led0=P1^0; ***it led1=P1^1; ***it led2=P1^2; ***it led3=P1^3; ***it led4=P1^4; ***it led5=P1^5; ***it led6=P1^6; ***it led7=P1^7; //延时函数,延迟一秒 void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } int main() { while(1) { P1=0x7F; Delay1000ms(); P1=0xBF; Delay1000ms(); P1=0xDF; Delay1000ms(); P1=0xEF; Delay1000ms(); P1=0xF7; Delay1000ms(); P1=0xFB; Delay1000ms(); P1=0xFD; Delay1000ms(); P1=0xFE; Delay1000ms(); } return 0; } 3、在如图所示界面点击下载编程,然后按下单片机上的蓝色按钮即可成功下载到,观察单片机上LED实现即可。 C51单片机按键实验的实现 1、点击File-》New创建一个新文档。 2、在文档中书写如下程序。 #include《reg52.h》 //定义LED灯变量 ***it led0=P1^0; ***it led1=P1^1; ***it led2=P1^2; ***it led3=P1^3; //定义按键变量 ***it key1=P3^3; ***it key2=P3^4; ***it key3=P3^6; ***it key4=P3^7; int main() { while(1) { if(key1==0) { if(led0==1) { led0=0; } else { led0=1; } } if(key2==0) { if(led1==1) { led1=0; } else { led1=1; } } if(key3==0) { if(led2==1) { led2=0; } else { led2=1; } } if(key4==0) { if(led3==1) { led3=0; } else { led3=1; } } } return 0; } 3、在如图所示界面点击下载编程,然后按下单片机上的蓝色按钮即可成功下载到,按下按钮,观察单片机上按键和LED实现即可。 3.1–第3步中遇到的问题 问题一:按下按钮出现接触不良的情况。 问题原因:按键抖动。 解决办法:软件消抖。 (注:消抖使用代码如下) #include《reg52.h》 //定义LED灯变量 ***it led0=P1^0; ***it led1=P1^1; ***it led2=P1^2; ***it led3=P1^3; //定义按键变量 ***it key1=P3^3; ***it key2=P3^4; ***it key3=P3^6; ***it key4=P3^7; //定义无符号字符变量 unsigned char k1,k2,k3,k4,k5,k6,k7,k8; //延时函数延时5毫秒 void Delay5ms() //@11.0592MHz { unsigned char i, j; i = 9; j = 244; do { while (--j); } while (--i); } int main() { while(1) { k1=key1; Delay5ms(); k2=key1; if(k1!=k2) //确保状态未变 { continue; } if(key1==0) { if(led0==1) { led0=0; } else { led0=1; } } while(key1==0); //确保状态改变 k3=key2; Delay5ms(); k4=key2; if(k3!=k4) { continue; } if(key2==0) { if(led1==1) { led1=0; } else { led1=1; } } while(key2==0); k5=key3; Delay5ms(); k6=key3; if(k5!=k6) { continue; } if(key3==0) { if(led2==1) { led2=0; } else { led2=1; } } while(key3==0); k7=key4; Delay5ms(); k8=key4; if(k7!=k8) { continue; } if(key4==0) { if(led3==1) { led3=0; } else { led3=1; } } while(key4==0); } return 0; } C51单片机蜂鸣器实验的实现 1、点击File-》New创建一个新文档。 2、在文档中书写如下程序。 #include《reg52.h》 //按键变量定义 ***it key1=P3^3; //蜂鸣器变量定义 ***it FM=P0^7 ; //延时函数延时5毫秒 void Delay5ms() //@11.0592MHz { unsigned char i, j; i = 9; j = 244; do { while (--j); } while (--i); } unsigned char k1,k2; int main() { while(1) { //蜂鸣器实验 k1=key1; Delay5ms(); k2=key1; if(k1!=k2) { continue; } if(key1==0) { if(FM==1) { FM=0; } else { FM=1; } } while(key1==0); } return 0; } 3、在如图所示界面点击下载编程,然后按下单片机上的蓝色按钮即可成功下载到,按下按钮,观察单片机上按键和蜂鸣器实现即可。 C51单片机综合实验的实现 1、点击File-》New创建一个新文档。 2、在文档中书写如下程序。 #include《reg52.h》 ***it led0=P1^0; ***it led1=P1^1; ***it led2=P1^2; ***it led3=P1^3; ***it led4=P1^4; ***it led5=P1^5; ***it led6=P1^6; ***it led7=P1^7; ***it key1=P3^3; ***it key2=P3^4; ***it key3=P3^6; ***it key4=P3^7; ***it FM=P0^7 ; unsigned char k1,k2,k3,k4,k5,k6,k7,k8; void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } void Delay5ms() //@11.0592MHz { unsigned char i, j; i = 9; j = 244; do { while (--j); } while (--i); } int main() { while(1) { //综合实验 k1=key1; Delay5ms(); k2=key1; if(k1!=k2) { continue; } if(key1==0) { if(FM==1) { FM=0; } else { FM=1; } } while(key1==0); k3=key2; Delay5ms(); k4=key2; if(k3!=k4) { continue; } if(key2==0) { P1=0x7F; Delay1000ms(); P1=0xBF; Delay1000ms(); P1=0xDF; Delay1000ms(); P1=0xEF; Delay1000ms(); P1=0xF7; Delay1000ms(); P1=0xFB; Delay1000ms(); P1=0xFD; Delay1000ms(); P1=0xFE; Delay1000ms(); } while(key2==0); k5=key3; Delay5ms(); k6=key3; if(k5!=k6) { continue; } if(key3==0) { led0=0; Delay1000ms(); led1=0; Delay1000ms(); led2=0; Delay1000ms(); led3=0; Delay1000ms(); led4=0; Delay1000ms(); led5=0; Delay1000ms(); led6=0; Delay1000ms(); led7=0; Delay1000ms(); P1=0xFF; Delay1000ms(); } while(key3==0); k7=key4; Delay5ms(); k8=key4; if(k7!=k8) { continue; } if(key4==0) { if(led3==1) { led3=0; } else { led3=1; } } while(key4==0); } return 0; } 3、在如图所示界面点击下载编程,然后按下单片机上的蓝色按钮即可成功下载到,按下按钮,观察单片机上LED和按键以及蜂鸣器实现即可。 轮询和中断的讲解 1、轮询和中断的工作形式。 2、C51单片机的中断源。 3、C51单片机的中断要考虑的问题一。 4、C51单片机的中断要考虑的问题二。 |
|
|
|
只有小组成员才能发言,加入小组>>
2497 浏览 0 评论
1060浏览 2评论
679浏览 1评论
441浏览 0评论
175浏览 0评论
293浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:55 , Processed in 0.984906 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号