单片机跑马灯(流水灯)控制实验报告_第1页
单片机跑马灯(流水灯)控制实验报告_第2页
单片机跑马灯(流水灯)控制实验报告_第3页
单片机跑马灯(流水灯)控制实验报告_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机实验报告姓名:学号:实验实现功能:1:计数器功能2:流水灯具体操作:计数器功能数码管的动态显示。每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。流水灯当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms。程序流程图开始开始定时器T0设置初值,启动定时器,打开中断复位Key2按下中断关闭计数器模式计数器加1Key3按下流水灯模式数码管显示数字加1跑马灯点亮间隔50msKey1按下按下中断打开 发送给PC 发送给PC程序#include<reg51.h>typedefunsignedcharuint8; typedefunsignedintuint16;//类型定义sbitP2_1=P2^1;sbitP2_2=P2^2;sbitP2_3=P2^3;sbitP2_4=P2^4;//位声明四个数码管开关sbitKey2=P3^2;sbitKey3=P3^3; //位声明2个按键K2和K3sbitLedk=P2^0; //LED开关voiddelay(uint16i); //延时函数声明voidrefresh(); //数码管刷新函数声明voidliushuideng(); //流水灯函数声明uint8number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管的真值表uint8out[4]={0}; //数组变量uint16counter=0; //用作计数器的变量uint16Time_counter=0; //用作定时器的变量voidmain() //主函数 { TMOD=0x01; //定时器0,工作方式一 TH0=0xFC; TL0=0x18; //定时器初值使每次循环为1ms TR0=0; //定时器0开始作 ET0=0; //定时器中断关 EA=0; //关中断 while(1) //计数器模式 { Ledk=1; //led开关关 out[0]=number[counter%10];//取个位 out[1]=number[counter%100/10];//十位 out[2]=number[counter%1000/100];//百位 out[3]=number[counter/1000];//千位 if(!Key2) //计数器加1 { ++counter;//自加 out[0]=number[counter%10];//取个位 out[1]=number[counter%100/10];//十位 out[2]=number[counter%1000/100];//百位 out[3]=number[counter/1000];//千位 while(!Key2)//等待键盘抬起 refresh();//刷新数码管 } refresh();//刷新数码管 if(!Key3)//进入跑马灯模式 liushuideng(); } } //主函数结束/*******************延时*************/voiddelay(uint16i) { uint8j;//定义局部变量 for(i;i>0;i--)//循环i*240次 for(j=240;j>0;j--); }/************数码管刷新******************/voidrefresh() { uint8j; for(j=0;j<4;j++) //四次循环刷新数码管 { switch(j) { case0:P2_1=1;P2_2=1;P2_3=1;P2_4=0;break; case1:P2_1=1;P2_2=1;P2_3=0;P2_4=1;break; case2:P2_1=1;P2_2=0;P2_3=1;P2_4=1;break; case3:P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;//每次循环只选中一个数码管 default:break; } P0=out[j];//位选,给数码管送值 delay(20);//延时消抖 } }/*************定时器的中断服务函数**************/voidTimer0_Overflow()interrupt1//定时器0溢出中断,这个语句1ms执行一次 { TH0=0xFC; TL0=0x18; //每1ms重新赋定时器初值 Time_counter++;//计数,看经过了几个1ms }/***********************流水灯子函数****************************/ voidliushuideng(){ uint8j=0; //定义局部变量 P0=0xff; //小灯全关 TR0=1; //定时器1开始计时 EA=1; //中断开放 ET0=1; //定时器0中断开 while(1) { Ledk=0; //打开LED开关 P2=P2|0x1E; //关掉数码管 if(50==Time_counter) //50个毫秒 {

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论