单片机跑马灯(流水灯)控制实验报告

时间:2024.4.8

单片机实验报告

姓名:      学号:

一、      实验实现功能:

1:计数器功能

2:流水灯

二、            具体操作:

1、计数器功能

    数码管的动态显示。每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。

2、流水灯

    当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms。

三、      程序流程图

单片机跑马灯(流水灯)控制实验报告                                                                                    

四、      程序

#include

typedef  unsigned char   uint8;    

typedef  unsigned int    uint16;    //类型定义

sbit P2_1 = P2^1;

sbit P2_2 = P2^2;

sbit P2_3 = P2^3;

sbit P2_4 = P2^4;          //位声明四个数码管开关

sbit Key2 = P3^2;

sbit Key3 = P3^3;                     //位声明2个按键K2和K3

sbit Ledk = P2^0 ;             //LED 开关

void delay(uint16 i);          //延时函数声明

void refresh ();              // 数码管刷新函数声明

void liushuideng();                 //流水灯函数声明

uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

               0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};   

                          //数码管的真值表

uint8 out[4] = {0};            // 数组变量

uint16 counter=0;                //用作计数器的变量

uint16 Time_counter=0;       //用作定时器的变量

void main()                 //主函数

       {

              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();

                     }

         }                                            //主函数结束

/*******************延时*************/

void delay(uint16 i)

       {

           uint8 j;                           // 定义局部变量

           for(i;i>0;i--)                 //循环 i*240 次

               for(j=240;j>0;j--);

       }

/************数码管刷新******************/

void refresh ()

       {

             uint8 j;

              for (j=0;j<4;j++)     //四次循环刷新数码管

                   {

                            switch(j)

                                   {

                                      case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break;

                                          case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break;

                                          case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break;

                                          case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;

                     //每次循环只选中一个数码管

                                         default:break;

                                   }

                            P0 = out[j];     // 位选,给数码管送值

                            delay (20);      //延时消抖

                     }

       }

/*************定时器的中断服务函数**************/

void Timer0_Overflow() interrupt 1   //定时器0溢出中断,这个语句1ms执行一次

       {

              TH0 = 0xFC;

              TL0 = 0x18;                //每1ms重新赋定时器初值  

              Time_counter++;          //计数,看经过了几个1ms  

       }

/***********************流水灯子函数****************************/   

void liushuideng()

   {      

                uint8 j = 0 ;             //定义局部变量

                P0 = 0xff;          // 小灯全关

                TR0 = 1;            //定时器1开始计时

             EA = 1;                   //中断开放

                ET0 = 1;            //定时器0中断开

             while(1)

                {

                     Ledk = 0 ;      //打开LED开关

                       P2 = P2|0x1E;        //关掉数码管

                 if(50 == Time_counter)    //50个毫秒

                          {  

                                 P0=~(1<

                                     Time_counter = 0;       //清零开始下一次循环定时 

                          }  

                 if (8==j)           //移完8次再重新移

                              {

                                  j=0;

                              }

                      

                }

       }

更多相关推荐:
单片机实验报告——流水灯

电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2流水灯实验时间:20xx-10-21班级:电信092姓名:蔡**学号:*********一、实验目的:进一步熟悉keil仿真软件、prote…

51单片机流水灯实验报告

51单片机流水灯试验一实验目的1了解51单片机的引脚结构2根据所学汇编语言编写代码实现LED灯的流水功能3利用开发板下载hex文件后验证功能二实验器材个人电脑80c51单片机开发板三实验原理单片机流水的实质是单...

单片机流水灯实验报告

单片机流水灯实验报告一实验目的1熟练掌握AT89S52型开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KEIL软件编辑编译源汇编程序的操作方法4掌握应用USBISP烧录软件的操作方法5帮...

流水灯单片机课程设计报告

井冈山大学机电工程学院单片机课程设计报告课程名称单片机设计题目流水灯姓名覃家应陈东阳专业生物医学工程班级10级医工本一班学号100615062指导教师王佑湖20xx年11月10日目录1引言211设计任务212设...

单片机流水灯实验报告 (2)

流水灯实验报告一实验目的1熟练掌握AT89S52开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KEIL软件编辑编译源汇编程序的操作方法4掌握应用AVRFIGHT烧录软件的操作方法二实验内...

流水灯实验报告

实验报告课程名称单片机实习专业班级姓名戴秀锋学号1104451216电气与信息学院和谐勤奋求是创新1234实验教学考核和成绩评定办法课内实验考核成绩严格按照该课程教学大纲中明确规定的比重执行实验成绩不合格者不能...

单片机并口简单应用(流水灯)实验报告

实验一单片机并口简单应用流水灯一实验目的1了解单片机汇编语言程序的基本结构2了解单片机汇编语言程序的设计和调试方法3掌握顺序控制程序的简单编程二实验仪器单片机开发板万利仿真机稳压电源计算机三实验原理1流水灯硬件...

C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟

学号班级姓名指导老师单片机核心板实验要求一流水灯实验1实验目的1简单IO引脚的输出2掌握软件延时编程方法3简单按键输入捕获判断2完成功能要求1开机是点亮12发光二极管闪烁三下2按照顺时针循环依次点亮发光二极管3...

单片机流水灯设计报告

第一部分实训准备1摘要近年来随着电子技术和微型计算机的发展单片机的档次不断提高起应用领域也在不断的扩大已在工业控制尖端科学智能仪器仪表日用家电汽车电子系统办公自动化设备个人信息终端及通信产品中得到广泛的应用成为...

基于单片机AT89C51控制的中断控制流水灯课程设计报告

宁波技师学院摘要随着计算机技术的迅猛发展计算机越来越广泛地应用于人们工作和生活的各个领域作为计算机领域里的一个重要方面单片机及其应用技术近年来也得到了长足的发展单片机被广泛地应用在工业自动化控制智能仪器仪表数据...

可控流水灯单片机课程设计报告(c语言)

目录1引言12课题综述121课题的来源122课题的意义123预期的目标124面对的问题125课题的技术23系统分析231涉及的基础知识23280C51单片机引脚图及引脚功能介绍233解决问题的基本思路334总体...

可控流水灯单片机课程设计报告

目录1引言12课题综述121课题的来源122课题的意义123预期的目标124面对的问题125课题的技术23系统分析231涉及的基础知识23280C51单片机引脚图及引脚功能介绍233解决问题的基本思路334总体...

单片机流水灯实验报告(26篇)