首页 > 其他分享 >51静态数码管实验

51静态数码管实验

时间:2023-06-08 23:36:33浏览次数:40  
标签:int 静态 void 51 unsigned 数码管 flag include


一、实验目的

1、了解数码管共阴极和共阳极接法。

2、了解数码管的段选和位选方式。

3、了解定时器初始化设置的方法。

二、实验内容

1、完成数码管显示数字每秒加一,八个数码管全亮;完成数码管八段全亮,八个数码管全亮。

1)实验要求:完成数码管八段全亮,八个数码管全亮,以此检验数码管是否正常。

2)实验目的:了解数码管共阴极和共阳极接法;了解数码管的段选和位选方式。

3)实验说明:通过本实验,可以了解了解数码管共阴极和共阳极接法;了解数码管的段选和位选方式,同时也可以了解单片机编程,调试方法。

4)、程序框图 2、完成数码管显示数字每秒加一,八个数码管全亮。

三、实验原理

51静态数码管实验_初始化

四、实验电路与程序

1、软件实验一:完成数码管八段全亮,八个数码管全亮。

1)实验要求:完成数码管八段全亮,八个数码管全亮,以此检验数码管是否正常。

2)实验目的:了解数码管共阴极和共阳极接法;了解数码管的段选和位选方式。

3)实验说明:通过本实验,可以了解了解数码管共阴极和共阳极接法;了解数码管的段选和位选方式,同时也可以了解单片机编程,调试方法。

4)、程序框图

51静态数码管实验_初始化_02

5)、代码
main.c
1. #include <reg52.h>
2. #include <key.h>
3. #include <tube.h>
4. #include <interrupt.h>
5. int task_flag;
6. int timer_flag;
7. int timer_flag_2;
8. void main()
9. {

10. Config_EXTI();//初始化外部中断
11. Config_Timer();//初始化定时器
12. while(1)//任务调度器
13. {

14. if(timer_flag)//每1000ms执行一次任务
15. {

16. timer_flag=0;
17. tube_static();
18. }
19. }
20. }
 tube.h21. #ifndef _TUBE_H
22. #define _TUBE_H
23. #include <reg52.h>
24. sbit WE = P2^7; //位定义数码管位选锁存器接口
25. sbit DU = P2^6; //位定义数码管段选锁存器接口
26. void delay1(unsigned int z);
27. void tube_all(void);
28. extern int timer_flag;
29. #endif
tube.c
1. #include <tube.h>
2. //共阴极数码管码表
3. unsigned char code leddata[]={

4. 
0x3F,  //"0"0x06,  //"1"0x5B,  //"2"0x4F,  //"3"0x66,  //"4"0x6D,  //"5"0x7D,  //"6"0x07,  //"7"0x7F,  //"8"0x6F,  //"9"0x77,  //"A"0x7C,  //"B"0x39,  //"C"0x5E,  //"D"0x79,  //"E"0x71,  //"F"1. 
};1. 
2. void delay1(unsigned int z)
3. {

4. unsigned int x,y;
5. for(x = z; x > 0; x–)
6. for(y = 114; y > 0 ; y–);
7. }
8. 
9. void tube_all(void)
10. {

11. //段选
12. P0=0xff;
13. DU=1;
14. delay1(1);
15. DU=0;
16. delay1(1);
17. 
18. //位选
19. P0=0x00;
20. WE=1;
21. delay1(1);
22. WE=0;
23. delay1(1);
24. }

2、软件实验二:完成数码管显示数字每秒加一,八个数码管全亮。

1)实验要求:成数码管显示数字每秒加一,八个数码管全亮,以此检验数码管是否正常。

2)实验目的:了解数码管共阴极和共阳极接法;了解数码管的段选和位选方式;了解定时器用法。

3)实验说明:通过本实验,可以了解了解数码管共阴极和共阳极接法;了解数码管的段选和位选方式;了解定时器用法;同时也可以了解单片机编程,调试方法。

4)、程序框图

51静态数码管实验_#include_03

5)、代码
main.c

#include <reg52.h>1. #include <key.h>
2. #include <tube.h>
3. #include <interrupt.h>
4. int task_flag;
5. int timer_flag;
6. int timer_flag_2;
7. void main()
8. {

9. Config_EXTI();//初始化外部中断
10. Config_Timer();//初始化定时器
11. while(1)//任务调度器
12. {

13. if(timer_flag)//每1000ms执行一次任务
14. {

15. timer_flag=0;
16. tube_static();
17. }
18. }
19. }
interrupt.h
1. #ifndef _INTERRUPT_H
2. #define _INTERRUPT_H
3. #include <reg52.h>
4. #include <key.h>
5. void delay(unsigned int z);
6. void Config_EXTI(void);
7. void Config_Timer(void);
8. extern int task_flag;
9. extern int timer_flag;
10. extern int timer_flag_2;
11. #endif
interrupt.c
1. #include <interrupt.h>
2. void delay(unsigned int z)//延时ms
3. {

4. unsigned int x,y;
5. for(x = z; x > 0; x–)
6. for(y = 114; y > 0 ; y–);
7. }
8. void Config_Timer(void)
9. {

TMOD=0x11;//设定时器0和1为工作方式1(M1 M0为01),是向上计数TH0=(65536-50000)/256;//装初值12M晶振定时50ms数为50000,高位TL0=(65536-50000)%256;//低位EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器01. 
TH1=(65536-50000)/256;//装初值12M晶振定时50ms数为50000,高位TL1=(65536-50000)%256;//低位EA=1;//开总中断ET1=1;//开定时器1中断TR1=1;//启动定时器11. }
2. 
3. 
4. void T0_Handle() interrupt 1
5. {

static int num=0;1. //重装初值
TH0=(65536-50000)/256;//高位1. TL0=(65536-50000)%256;//低位
2. 
3. if(num<20)//每1000ms把timer_flag置位
4. {

5. num++;
6. }
7. else
8. {

9. num=0;
10. timer_flag=~timer_flag;
11. }
12. }
tube.h
1. #ifndef _TUBE_H
2. #define _TUBE_H
3. #include <reg52.h>
4. sbit WE = P2^7; //位定义数码管位选锁存器接口
5. sbit DU = P2^6; //位定义数码管段选锁存器接口
6. void tube_init(void);
7. void tube_forward(void);
8. void delay1(unsigned int z);
9. extern int timer_flag;
10. #endif
tube.c
1. #include <tube.h>
2. //共阴极数码管
3. int wei_val[7]=0;//每一位要存的数
4. unsigned char code leddata[]={

5. 
0x3F,  //"0"0x06,  //"1"0x5B,  //"2"0x4F,  //"3"0x66,  //"4"0x6D,  //"5"0x7D,  //"6"0x07,  //"7"0x7F,  //"8"0x6F,  //"9"0x77,  //"A"0x7C,  //"B"0x39,  //"C"0x5E,  //"D"0x79,  //"E"0x71,  //"F"0x76,  //"H"0x38,  //"L"0x37,  //"n"0x3E,  //"u"0x73,  //"P"0x5C,  //"o"0x40,  //"-"0x00,  //熄灭0x00  //自定义1. 
};1. unsigned char code bitdata[]={

2. 
0xFE,  //"0"0xFD,  //"1"0xFB,  //"2"0xF7,  //"3"0xEF,  //"4"0xDF,  //"5"0xBF,  //"6"0x7F,  //"7"};1. void delay1(unsigned int z)
2. {

3. unsigned int x,y;
4. for(x = z; x > 0; x–)
5. for(y = 114; y > 0 ; y–);
6. }
7. void tube_init(void)
8. {

9. 
10. }
11. 
12. 
13. 
14. void tube_static(void)
15. {

16. static int i=0;
17. if(i>8)
18. {

19. i=0;
20. }
21. else
22. {

23. i++;
24. }
25. //段选
26. P0=leddata[i];
27. DU=1;
28. delay1(1);
29. DU=0;
30. delay1(1);
31. 
32. //位选
33. P0=0x00;
34. WE=1;
35. delay1(1);
36. WE=0;
37. delay1(1);
38. }

五、实验总结

  1. 因为是共阴极数码管,因此要点亮对应的段,应使用高电平。片选信号为低电平。
    2.P0口要输出高电平,应该接上拉电阻,不然proteus仿真会出错。
    3.由于是静态显示,因此先段选还是先位选没有影响。如果是动态显示,应该先段选为0消影,再位选,再段选赋值。


标签:int,静态,void,51,unsigned,数码管,flag,include
From: https://blog.51cto.com/u_16131692/6444201

相关文章

  • 51按键外部中断控制流水灯
    实验二外部按键输入一、实验目的1、了解单片机检测口方法2、了解单片机外部中断原理3、了解按键输入原理二、实验内容1、完成按键扫描控制流水灯2、完成按键外部中断控制流水灯三、实验原理四、实验电路与程序1、软件实验一:按键扫描控制流水灯1)实验要求:读取四个按键的输......
  • 51定时器中断控制流水灯
    一、实验目的1、了解读取和清零定时器标志位的方法。2、了解定时器中断的方法。3、了解定时器初始化设置的方法。二、实验内容1、完成读取定时器溢出标志位来控制流水灯2、完成定时器中断服务函数控制流水灯三、实验原理只用一个定时器:定时器级联:四、实验电路与程序1、软......
  • Codeforces 1514 C
    1514C题意给出一个数n,求[1,2,3...n-1]的某个最长子序列,这个子序列的元素乘积模n余1。思路这是个思维题,一个数学公式\[x\equiv1(modn)\rightarrowkx\equivk(mod kn)\]所以子序列中的元素与\(n\)互质,累乘结果模\(n\)后如果不是1,那么将序列中等于结果的元素去......
  • 静态资源映射
    静态资源映射概念:在web开发中,对静态资源映射是必不可少的,而所谓的静态资源映射,通俗来说,就是给项目导入图片,js,css等资源,同时可以进行访问。1.通过DefaultServlet处理静态资源在spring3.0.4以后的SpringMVC模块提供了静态资源映射器组件。通过mvc:resources标签配置静态资......
  • 动态ip和静态ip
    IP地址:IP协议中有一个非常重要的内容,那就是给互联网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。为了通过网络发送或接收数据,传输控制......
  • Codeforces 1515 B
    1515B题意有n只袜子(n为偶数),但左袜子有L只,右袜子有R只,每只袜子的颜色为\(C_i\),可以进行以下操作:换袜子的方向、或者将袜子变色,问进行多少次操作后变成(n/2)对袜子思路很曲折,想了很久后终于想清楚,排除配对的袜子后,对于某类袜子\(i\),剩下\(c\geq2\)(假设剩下的是右边)只,它的配对......
  • ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析
    编辑-Z本文将对TDK5100F射频模块进行详细的介绍与分析,包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述,希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点TDK5100F射频模块是一款高性能的无线通信模块,具有以下几个显著的......
  • ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析
    编辑-Z本文将对TDK5100F射频模块进行详细的介绍与分析,包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述,希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点TDK5100F射频模块是一款高性能的无线通信模块,具有以下几个显......
  • [LeetCode] 1351. Count Negative Numbers in a Sorted Matrix
    Givena mxn matrix grid whichissortedinnon-increasingorderbothrow-wiseandcolumn-wise,return thenumberof negative numbersin grid.Example1:Input:grid=[[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]Output:8Explanation:Thereare......
  • P1751 贪吃虫 题解
    题意:题目传送门在一棵n个结点的树上,有k个贪吃虫去吃食物。每个贪吃虫都走到达食物的唯一路径。当一条贪吃虫通向食物的道路上有另一条贪吃虫,则较远的那只停止移动。多条贪吃虫要进入同一节点时,编号最小的才能进入,其他的停止移动。贪吃虫的移动速度皆为1。一只贪吃虫吃......