当前位置: 首页 > news >正文

海城 网站建设建设网站怎样做

海城 网站建设,建设网站怎样做,简洁的企业网站,定制网站开发接私活实验要求 两个单片机各驱动8个LED灯,构成两个跑马灯,要求甲单片机LED的点亮方式是从上至下,首先是最上面第一个点亮、其次是前两个点亮、其次是前三个点亮……直至8个灯全部点亮,8个灯全部灭,重复这个过程&#xff0c…

实验要求

两个单片机各驱动8个LED灯,构成两个跑马灯,要求甲单片机LED的点亮方式是从上至下,首先是最上面第一个点亮、其次是前两个点亮、其次是前三个点亮……直至8个灯全部点亮,8个灯全部灭,重复这个过程,乙单片机就是从下至上重复这个过程。按下甲单片机的独立按键S1,则乙单片机LED按照甲单片机的跑马灯方向运行三次,在继续原定程序;按乙单片机的独立按键S2,则甲单片机LED按照乙单片机的跑马灯方向先运行三次,在继续原定程序。

参考链接

串行口的工作原理及应用-CSDN博客

外中断的应用-CSDN博客

LED数码管的静态显示与动态显示(Keil+Proteus)_proteus数码管显示-CSDN博客

独立键盘接口设计(Keil+Proteus)-CSDN博客

51单片机入门之点亮LED灯_如何用单片机点亮led灯_yongy_u的博客-CSDN博客 

51单片机中断笔记 - 知乎 (zhihu.com)

【51单片机实验笔记】开关篇(一) 独立按键_单片机 按键-CSDN博客

单片机 | 51单片机原理_c51单片机原理-CSDN博客

元器件Proteus关键字
51单片机AT89C51
按钮BUTTON
LED灯LED
电阻RES
电源POWER
GROUND

Proteus软件操作 

LED数码管的静态显示与动态显示(Keil+Proteus)_proteus数码管显示-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134101256?spm=1001.2014.3001.5501

查询控制

当面对一个题目的时候可以进行分解,我这里是将题目分解成了以下三个部分:LED跑马灯、独立按键、双机通信。

LED跑马灯

之前经常实现的是流水灯,这个跑马灯是类似,如果对移位掌握的不好的话,就建议还是采用数组来存储将对应点亮的LED灯,数组储存起来之后遍历数组就行了,因为他情况有有限,用数组储存最好理解了,我这里采用的是共阳极的接法,给0表示亮,1表示不亮,然后8根线对应01,用十六进制数来表示将LED点亮的状态。

独立按键

独立键盘接口设计(Keil+Proteus)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134253686?spm=1001.2014.3001.5501这个的思路就是我给一个引脚接一个按钮,然后先给他赋值为1,如果读这个引脚他的值变成了0,就表示他被按下去了。

双机通信

串行口的工作原理及应用-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134761169?spm=1001.2014.3001.5501双机通信就是两个单片机的RX和TX交换连接,其中有两个变量,如果接收到/发送完数据就会产生中断变成1,我们要做的就是控制这两个变量,一旦接收到就执行其他的操作,传输数据的话需要双方规定好波特率。

这个我最开始想复杂了,还想读取一边LED输出口的状态传递给另一个单片机来显示,其实就只需要传递让另一个单片机知道就行了,直接定义两个输出的数组就行了,应该从上到下,一个从下到上。

甲机和乙机的代码几乎一样,就是输出的数组不一样,大家理解其中一个就可以了。

甲机

//甲机
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//定义跑马灯数组
uchar code paomadeng1[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xFF};
uchar code paomadeng2[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xFF};#define S1 P1^7//延时程序
void delay(uint t){uchar i;while(t--)for(i=0;i<200;i++);
}void main(){uchar i,j,k;TMOD=0x20;//设置定时器T1为方式2TH1=0xFD;//波特率9600TL1=0xFD;SCON=0x50;//设置串口为方式1接收PCON=0x00;//SMOD=0TR1=1;//启动T1while(1){while(RI==0){//如果RI=0,表示没有接收到数据//正常走马灯for(i=0;i<=8;i++){P2=paomadeng1[i];delay(123);//判断按钮是否被按下P1=0xFF;if((P1&0x80)!=0x80){delay(5);if(S1==0){//按钮被按下SBUF=0xFF;//数据送串口发送while(TI==0);//如果TI=0,表示没有发送完,循环等待TI=0;}}}}for(j=0;j<3;j++){//重复三次for(k=0;k<=8;k++){P2=paomadeng2[k];delay(123);}}RI=0;//软件清零}
}

乙机 

//乙机
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//定义跑马灯数组
uchar code paomadeng1[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xFF};
uchar code paomadeng2[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xFF};#define S1 P1^7//延时程序
void delay(uint t){uchar i;while(t--)for(i=0;i<200;i++);
}void main(){uchar i,j,k;TMOD=0x20;//设置定时器T1为方式2TH1=0xFD;//波特率9600TL1=0xFD;SCON=0x50;//设置串口为方式1接收PCON=0x00;//SMOD=0TR1=1;//启动T1while(1){while(RI==0){//如果RI=0,表示没有接收到数据//正常走马灯for(i=0;i<=8;i++){P2=paomadeng2[i];delay(123);//判断按钮是否被按下P1=0xFF;if((P1&0x80)!=0x80){delay(5);if(S1==0){//按钮被按下SBUF=0xFF;//数据送串口发送while(TI==0);//如果TI=0,表示没有发送完,循环等待TI=0;}}}}//跳出循环表示接收到数据for(j=0;j<3;j++){//重复三次for(k=0;k<=8;k++){P2=paomadeng1[k];delay(123);}}RI=0;//软件清零}
}

 原理图

 正常运行

 S1按钮被按下

 S2按钮被按下

中断控制

外中断的应用-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134360733?spm=1001.2014.3001.5501就是把查询要执行的函数主体写到中断服务函数,为了让他能够直接执行我在循环中还加了一个break,就是为了让按钮更加灵敏一点。

甲机

//甲机
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//定义跑马灯数组
uchar code paomadeng1[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xFF};
uchar code paomadeng2[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xFF};//延时程序
void delay(uint t){uchar i;while(t--)for(i=0;i<200;i++);
}void main(){uchar i,j,k;TMOD=0x20;//设置定时器T1为方式2TH1=0xFD;//波特率9600TL1=0xFD;SCON=0x50;//设置串口为方式1接收PCON=0x00;//SMOD=0TR1=1;//启动T1EA=1;//总中断允许EX0=1;//INT0开中断IT0=0;//选择外部中断为低电平触发方式while(1){if(RI==0){//如果RI=0,表示没有接收到数据//正常走马灯for(i=0;i<=8;i++){P2=paomadeng1[i];delay(123);	//有数据传过来直接中断if(RI!=0){//break;}}}else{for(j=0;j<3;j++){//重复三次for(k=0;k<=8;k++){P2=paomadeng2[k];delay(123);}}RI=0;//软件清零}}
}//用于串口传递数据
void int0() interrupt 0 using 0{EX0=0;//禁止外部中断0SBUF=0xFF;//数据送串口发送while(TI==0);//如果TI=0,表示没有发送完,循环等待TI=0;EX0=1;//中断返回前,打开外部中断0
}

乙机

//乙机
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//定义跑马灯数组
uchar code paomadeng1[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xFF};
uchar code paomadeng2[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xFF};//延时程序
void delay(uint t){uchar i;while(t--)for(i=0;i<200;i++);
}void main(){uchar i,j,k;TMOD=0x20;//设置定时器T1为方式2TH1=0xFD;//波特率9600TL1=0xFD;SCON=0x50;//设置串口为方式1接收PCON=0x00;//SMOD=0TR1=1;//启动T1EA=1;//总中断允许EX0=1;//INT0开中断IT0=0;//选择外部中断为低电平触发方式while(1){if(RI==0){//如果RI=0,表示没有接收到数据//正常走马灯for(i=0;i<=8;i++){P2=paomadeng2[i];delay(123);	//如果有信息传过来,直接中断if(RI!=0){break;}}}else{for(j=0;j<3;j++){//重复三次for(k=0;k<=8;k++){P2=paomadeng1[k];delay(123);}}RI=0;//软件清零}}
}//用于串口传递数据
void int0() interrupt 0 using 0{EX0=0;//禁止外部中断0SBUF=0xFF;//数据送串口发送while(TI==0);//如果TI=0,表示没有发送完,循环等待TI=0;EX0=1;//中断返回前,打开外部中断0
}

 采用中断之后灵敏多了,大家快去试试吧!!!

总结

继续加油。

http://www.yayakq.cn/news/210366/

相关文章:

  • 推广做网站南充长沙代理记账
  • 纯静态网站 后台建筑模板915 1830价格
  • 怎样用别人的网站做修改病句网站怎么做反链
  • 一步一步教你做网站后台视频阿里云个人备案可以做企业网站吗
  • 找网站建设wordpress 判断是否页面
  • 厦门城健建设有限公司网站专题网站建设策划
  • dwcc怎么做网站平面设计培训学校排名
  • 目前做的比较好的法律网站有哪些网站后台如何添加新闻
  • 可以做软件的网站无货源网店
  • 做dm页网站wordpress 定时发送
  • 必应网站首页的图片怎么做的wordpress网站主题插件
  • 济南网站优化哪里做的好手机做网站的
  • 学校网站制作素材seo快速优化软件
  • 网站定制开发合同公司小程序制作
  • 网站大多用源码来做吗如何仿制wordpress主题
  • 怎么给网站引流企业门户网站建设咨询
  • 新手网站建设教程网站开发 教材
  • 网站收录和反链都正常关键词却没有排名的原因定制开发 商城网站 最快
  • .net 大型网站开发重庆网站建设选圣矢
  • php wordpress单本小说网站源码+采集品牌网上和实体店质量一样吗
  • 建一个私人彩票网站如何提升网站流量
  • 自做淘宝客网站小语种网站怎么做
  • 长沙做门户网站的公司展馆设计案例
  • 郑州网站推广方案新开传奇新服
  • 拓者吧官网唐山网站建设方案优化
  • 自己如何制作一个网站做网站网站要找谁
  • 微信的网站怎么做的企业网站 多网站推广
  • 谢岗网站建设网站模板为什么不好
  • 租赁服务器做电影网站网站虚拟空间
  • 广州网站优化效果体育局网站建设方案