重拾单片机 第二天 数码管的使用 ( 按下加按键,数值增加直到最大值,按减按键,数值减小,直到最小值 )

1、

  1         /*--------------www.szjcdz.cn--------------------
  2   名称:2按键加减操作
  3   编写:szjcdz
  4   日期:2010.9
  5   内容:按下加按键,数值增加直到最大值,按减按键,数值减小,直到最小值
  6 ------------------------------------------------*/
  7 #include<reg52.h>
  8 #define uchar8 unsigned char
  9 #define uint16   unsigned int
 10 sbit KEY_ADD=P3^3;
 11 sbit KEY_DEC=P3^4;
 12 sbit LATCH1=P2^6;
 13 sbit LATCH2=P2^7;
 14 void display( );
 15
 16 uchar8 code DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 显示段码值0~F
 17 uchar8 code WeiMa[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//分别对应相应的数码管点亮,即位码
 18
 19 uchar8     Template;    // 存储显示值的全局变量
 20
 21 // 延时函数
 22 void DelayMS(uint16 val)
 23 {
 24        uint16  i,j;
 25        for(i=0;i<val;i++)
 26            for(j=0;j<113;j++);
 27
 28 }
 29
 30
 31 //*******************************主函数*******************************//
 32 void main(void)
 33 {
 34    uchar8 num;
 35
 36    KEY_ADD=1;
 37    KEY_DEC=1;
 38
 39   while(1)
 40   {
 41        if(!KEY_ADD)
 42        {
 43           DelayMS(10);
 44           if(!KEY_ADD)
 45           {
 46               while(!KEY_ADD); // 如果按下,KEY_ADD=0 ,那么为真,则 一直等待
 47
 48                 {
 49                  if(num<15)
 50                  num++;
 51
 52               }
 53           }
 54
 55        }
 56
 57         if(!KEY_DEC)
 58        {
 59           DelayMS(10);
 60           if(!KEY_DEC)
 61           {
 62               while(!KEY_DEC); // 如果按下没有释放,KEY_ADD=0 ,那么为真,则 一直等待
 63
 64                 {
 65                  if(num>0)
 66                  num--;
 67
 68               }
 69           }
 70
 71        }
 72
 73     // 以上实现了一个数字 num 等于 几 的功能
 74
 75
 76    Template=DuanMa[num];     // 全局变量 段码 ,用来确定要显示的数字是什么
 77
 78     display( );       // 显示
 79
 80    }
 81
 82
 83 }
 84
 85 /***************************************************************/

 87 void display( void )
 88 {
 89          P0=0;
 90       LATCH1=1;
 91       LATCH1=0;
 92
 93       P0=WeiMa[2];       //  也就是 选 第三个 数码管
 94       LATCH2=1;          // LATCH2 WEI P2^7 
 95       LATCH2=0;
 96
 97       P0=Template;     // 因为 段码是全局变量,所以 P0=Template=DuanMa[num];
 98       LATCH1=1;         // LATCH1 DUAN P2^6
 99       LATCH1=0;
100
101       DelayMS(2);
102
104 }

实验现象:

我们这里 位选 第3个 也就是 WeiMa[2],   按独立按键 INT1 是 +1 , 按独立按键 T0 是 -1,可以 从 0到 F

动态扫描数码管:

uchar8 code DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 显示段码值0~F

 1 void display( void )
 2 {
 3          int i;
 4
 5       P0=0;
 6       LATCH1=1;
 7       LATCH1=0;
 8
 9       P0=WeiMa[2];
10       LATCH2=1;
11       LATCH2=0;
12
13       for(i=0;i<16;i++)
14       {
15
16       P0=DuanMa[i];  //     // 动态扫描,还是很简单的,这样就实现了控制
17       LATCH1=1;
18       LATCH1=0;
19
20       DelayMS(200);
21
22       }
23 }
				
时间: 2024-12-13 13:37:15

重拾单片机 第二天 数码管的使用 ( 按下加按键,数值增加直到最大值,按减按键,数值减小,直到最小值 )的相关文章

重拾单片机 第二天 数码管的使用 (动态扫描数码管)

我们要实现的功能是什么呢? 从 第一个数码管扫描 1 到第二个数码管 2 ,第三个数码管 3,.......一直到 第8个数码管 显示8 1 /*--------------www.szjcdz.cn-------------------- 2 名称:数码管动态扫描 3 编写:shenhui 4 日期:2015.10.28 5 内容:数码管动态扫描 6 ------------------------------------------------*/ 7 #include<reg52.h>

重拾单片机 第三天 中断讲解(一)

52单片机: 中断源: INTO0--外部中断0,由P3.2端口线引入,低电平或下降沿引起. INTO1--外部中断1,有P3.3端口线引入,低电平或下降沿引起. T0--定时器/计数器0中断,由T0计数器计满回零引起. T1--定时器/计数器1中断,由T1计数器计满回零引起. T2--定时器/计数器2中断,由T2计数器计满回零引起. TI/RI--串口中断,串行端口完成一帧字符发送/接收后引起. 单片机在使用中断功能时,通常需要设置两个与中断有关的寄存器: ①中断允许寄存器IE ②中断优先级寄

重拾MVC——第二天:Vue学习与即时密码格式验证

今天是复习MVC的第二天,准备自己写一个后台管理,然后慢慢写大,做全. 个人感觉做 Web 的,前端知识是必备的,所有今天学习了一下 Vue,很多人用这个,我以前没有用过,今天把它补起来. 比较了各个学习 Vue 的地方,感觉官方文档讲得很详细,推荐一个学习的网站,将 Vue 讲的很清楚:http://how2j.cn/k/vuejs/vuejs-start/1744.html 这个网站主要是学 Java 的,不过 Java 部分我还没怎么看,只是大致浏览了一下前端部分,感觉很不错,站主很用心.

(二)重拾单片机 第一天 LED灯

由图知道 低电平 亮,高电平 灭 控制第一个 LED1 亮灭程序代码,如下 #include<reg52.h> #define uchar8 unsigned char #define uint16 unsigned int sbit LED1=P1^0; /*****************************/ // 函数名称: DelayMS( ) // 函数功能: 延时 // 入口函数: 延时毫秒 // 出口函数: 无 /********* *******************/

重拾单片机 第一天 LED灯

由图知道 低电平 亮,高电平 灭 控制第一个 LED1 亮灭程序代码,如下 1 #include<reg52.h> 2 #define uchar8 unsigned char 3 #define uint16 unsigned int 4 sbit LED1=P1^0; 5 /*****************************/ 6 // 函数名称: DelayMS( ) 7 // 函数功能: 延时 8 // 入口函数: 延时毫秒 9 // 出口函数: 无 10 /*********

使用JWT和Spring Security保护REST API,重拾后端之Spring Boot

通常情况下,把API直接暴露出去是风险很大的,不说别的,直接被机器***就喝一壶的.那么一般来说,对API要划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户开放对应的API.目前,比较主流的方案有几种: 用户名和密码鉴权,使用Session保存用户鉴权结果.使用OAuth进行鉴权(其实OAuth也是一种基于Token的鉴权,只是没有规定Token的生成方式)自行采用Token进行鉴权第一种就不介绍了,由于依赖Session来维护状态,也不太适合移动时代,新的项目就不要采用了.第二

重拾linux

重拾linux 起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使用linux.docker等.记录下过程,防止以后忘记!(所以不会涉及具体的安装步骤) 下载 到网易开源镜像站,挑选一个linux下载.我安装linux只要是为了学习运维方面的知识,同时用于进行网络知识方面的实践.如果你跟我一样,推荐Ubuntu server版本,纯字符界面,就跟一

重拾qt

最近公司又接了一个煤矿的项目,要写个小程序摘取数据,我是公司唯一c++程序员,本来搞ios搞好好的,现在又得重拾半年没摸得qt了.呵呵...呵呵呵. 这里只记录这次小程序的一些小的总结吧.. 1.中文字符: 函数:把一般字符串转为中文字符串: //中文处理 QString mysqlServerTs:: handleTheChinesCode(const char*words){ QTextCodec* tc = QTextCodec::codecForLocale(); return tc->

[51单片机] EEPROM 24c02 + 数码管 + 中断 [统计开机次数]

>_<:24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; >_<:delay.c 1 #include "delay.h" 2 /*------------------------------------------------ 3 uS延时函数,含有输入参数 unsigned char t,无返回值 4 unsigned char 是定义无符号字符变量,其值的范围是 5 0~255 这里使用