单片机-4个独立按键的控制程序

发布者:MysticGlow最新更新时间:2024-07-23 来源: cnblogs关键字:单片机  独立按键  控制程序 手机看文章 扫描二维码
随时随地手机看文章

  1 #include '8051.h'

  2 typedef unsigned char u8;

  3 typedef unsigned int u16;

  4 u8 smgduan[]= {

  5 /*0        1      2        3      4        5      6        7 */

  6 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,

  7 /*8        9     A        B     C        D     E        F */

  8 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

  9 

 10 // P0口为数码管的位选的8位输入引脚

 11 // P0 = 0x00;

 12 

 13 

 14 void Delayms(u16 ms);

 15 void shumaguan(u8 n);

 16 void DigDisplay();

 17 

 18 void main()

 19 {

 20     while (1)

 21     {

 22         /*

 23         *   不推荐此做法

 24         *   此做法占用内存高

 25         */

 26         if (!K1)

 27         {

 28             // 软件延时消除抖动

 29             Delayms(10);

 30             if (!K1)

 31             {

 32                 LED_1 = !LED_1;

 33             }

 34             // 确认按键已经按下

 35             while(!K1);

 36         }

 37         if (!K2)

 38         {

 39             // 软件延时消除抖动

 40             Delayms(10);

 41             if (!K2)

 42             {

 43                 LED_2 = !LED_2;

 44             }

 45             while(!K2);

 46         }

 47         if (!K3)

 48         {

 49             // 软件延时消除抖动

 50             Delayms(10);

 51             if (!K3)

 52             {

 53                 LED_3 = !LED_3;

 54             }

 55             while(!K3);

 56         }

 57         if (!K4)

 58         {

 59             // 软件延时消除抖动

 60             Delayms(10);

 61             if (!K4)

 62             {

 63                 LED_4 = !LED_4;

 64             }

 65             while(!K4);

 66         }

 67     }

 68 }

 69 

 70 

 71 void Delayms(u16 ms)

 72 {

 73     unsigned int i, j;

 74     for(i = ms; i > 0; i--)

 75         for(j = 110; j > 0; j--);

 76     return;

 77 }

 78 

 79 void shumaguan(u8 n)

 80 {

 81     switch(n)

 82     {

 83         case 0:

 84             LSA = 0;LSB = 0;LSC = 0;break;

 85         case 1:

 86             LSA = 1;LSB = 0;LSC = 0;break;

 87         case 2:

 88             LSA = 0;LSB = 1;LSC = 0;break;

 89         case 3:

 90             LSA = 1;LSB = 1;LSC = 0;break;

 91         case 4:

 92             LSA = 0;LSB = 0;LSC = 1;break;

 93         case 5:

 94             LSA = 1;LSB = 0;LSC = 1;break;

 95         case 6:

 96             LSA = 0;LSB = 1;LSC = 1;break;

 97         case 7:

 98             LSA = 1;LSB = 1;LSC = 1;break;

 99     }

100 }

101 

102 void DigDisplay()

103 {

104     u8 i1 = 0;

105     u8 i2 = 0;

106     u8 i3 = 0;

107     u8 i4 = 0;

108     u8 i5 = 0;

109     u8 i6 = 0;

110     u8 i7 = 0;

111     u8 i8 = 0;

112     

113 

114 

115 

116     for (i8 = 0; i8 < 10; i8++)

117         for (i7 = 0; i7 < 10; i7++)

118             for (i6 = 0; i6 < 10; i7++)

119                 for (i5 = 0; i5 < 10; i5++)

120                     for (i4 = 0; i4 < 10; i4++)

121                         for (i3 = 0; i3 < 10; i3++)

122                             for (i2 = 0; i2 < 10; i2++)

123                                 for (i1 = 0; i1 < 10; i1++)

124                                 {

125                                     u16 cnt = 10;

126                                     while (cnt--)

127                                     {

128                                         shumaguan(0);       //选中第一个数码管

129                                         P0 = smgduan[i1];   //给他送一个数字

130                                         Delayms(1);         //稍微延时一下下

131                                         shumaguan(1);       //然后切换到第二个数码管。。。如此进行一直到最后一个数码管。。。最后再改变送入数码管的数值。。。再来一遍

132                                         P0 = smgduan[i2];

133                                         Delayms(1);

134                                         shumaguan(2);

135                                         P0 = smgduan[i3];

136                                         Delayms(1);

137                                         shumaguan(3);

138                                         P0 = smgduan[i4];

139                                         Delayms(1);

140                                         shumaguan(4);

141                                         P0 = smgduan[i5];

142                                         Delayms(1);

143                                         shumaguan(5);

144                                         P0 = smgduan[i6];

145                                         Delayms(1);

146                                         shumaguan(6);

[1] [2]
关键字:单片机  独立按键  控制程序 引用地址:单片机-4个独立按键的控制程序

上一篇:单片机-4x4个矩阵按键控制数码管显示数字程序
下一篇:KEIL CX51 ANSI C编译器(8051编译器)介绍

推荐阅读最新更新时间:2024-11-12 16:30

单片机和LED灯阵制作的贪吃蛇趣味小游戏
最近几天天气总是在下雨,对于不爱玩手机游戏的我来说过得太无聊了。 想想咋么才能让时间过得快一点呢,这个时候我看到电视里的一个广告类似贪吃蛇的,于是抱着试试看的想法 用单片机和LED灯阵做了一个贪吃蛇的游戏 基本功能都有,玩起来体验还可以,总算可以充分利用时间了。 下面我就把制作过程和文件分享给大家 用一个18650电池供电,用一个单片机进行控制 名称:8X8点阵贪吃蛇 功能: 按右键开始、中间可以选择速度1最慢9最快(飞一般的感觉) 速度2和9,哎呀呀,自己撞死了(可以穿墙,撞到自己的身体死亡) 按中间确定可查看吃到了多少 暂停 废话不多说先上实物图 实物图1 实物图2 焊接实物图1 由于时间比较急线
[单片机]
用<font color='red'>单片机</font>和LED灯阵制作的贪吃蛇趣味小游戏
51单片机原理与设计方案
一、单片机简介 单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口电路,从而构成了单芯片微型计算机,即单片机(single chip Microcomputer)也叫微控制器(MCU)。 MCS51是指由美国Intel公司在1980年推出一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机。 Intel公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司以8051为基
[单片机]
51<font color='red'>单片机</font>原理与设计方案
单片机常用功能模块的使用 Part1. 发光二极管 LED
1、具体参数:   发光二极管 LED 使用时,必须串联电阻,限制电流:R = ( E - U ) / I     注:E:电源电压,一般为 5 V       U:LED 正向压降,1.4~2.1 V       I:LED 一般工作电流,5~20 mA,一般为 10 mA 左右   对于多个发光二极管,使用 排阻 ,330~430 ,一般为 390 ,在 Protel 99SE 中,记为 RESPACK     注:是排阻中每一个电阻都是 390 2、连接方法:   图中断点是因为图片缩小的缘故,实际连接务必要求接触良好。并且还要注意,二极管是有方向的,二极管若与图中方向相反,则排阻电源端需要接 GND,并且
[单片机]
89C51单片机最小系统解析
学习过89C51单片机的同学,都比较了解单片机的最小系统电路,何谓最小系统电路呢? 最小系统电路是指能过使单片机工作时的最小电路,主要包括:电源电路、复位电路、时钟电路。 1:电源电路 电源电路就是单片机的供电电路,一般是3.3V或者5V,具体多少要参考各种型号的单片机的工作电压,通常情况下是5V,这里是指通常情况下。 2:复位电路:包括上电复位和手动复位 在接通电源瞬间,电容上的电压不能 跃变 ,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C1足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复
[单片机]
单片机实现的数字钟
一:电路原理和器件选择 制作电路:单片机(AT89S52)实现多功能数字钟 性能指标:该数字钟实现时钟运行,调整,倒计时,秒表功能,且精确度经调试一天的误差在2S内。 实现原理:利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电路主要模块及原理图: 1. 数码显示硬件驱动 iframe id="iframe_0.10293807508423924" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://uph
[单片机]
51单片机-LCD1602
1.硬件设计 1.1.LCD1602介绍 LCD1602是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 LCD1602主要用来显示数字、字母、图形以及少量自定义字符。可以显示2行16个字符,拥有16个引脚,其中8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节V0和背光源AK 关于LCD的工作原理,结构堆叠等的介绍,可参考如下链接:https://lishiyi.blog.csdn.net/article/details/124106767?spm=1001.2014.3001.550
[单片机]
51<font color='red'>单片机</font>-LCD1602
利用单片机系统可靠性设计
单论单片机硬件系统设计解决方案,一般从三个方面分析:优选设计方案、增加冗余和容错率、采用硬件抗干扰。本文详细的介绍了优化这三个方面对单片硬件可靠性带来的好处。 1、选优设计 在系统硬件设计和加工时,应该选用质量好的接插件,设计好工艺结构;选用合格的元器件,进行严格的测试、筛选和老化;设计时技术参数(如负载)要留有一定的余量或降额使用元器件;提高印制板和组装的质量。 2、采用硬件抗干扰措施 来自供电系统以及通过导线传输、电磁耦合等产生的电磁干扰信号,是单片机系统工作不稳定的重要因素,在系统硬件设计时必须采取有效的干扰抑制措施。单片机应用系统中还常使用系统监视电路检测系统发生的错误或故障,自动报警或使系统自动恢
[单片机]
利用<font color='red'>单片机</font>系统可靠性设计
飞思卡尔MCU和i.MX处理器引领智能新生活
生活在多媒体时代 曾几何时,我们印象中的嵌入式系统就是一种专用的计算机系统,作为装置或设备的一部分。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都在使用嵌入式系统。只是彼时,嵌入式系统似乎和多媒体应用以及多媒体人机交互还很远。 技术的脚步总是让我们看到以前无法想象的应用出现,如今,我们已经生活在多媒体时代。嵌入式产品的多媒体应用让人们尽情享受科技之美,智能多媒体已处处可见。在智能交通中,道路上的网络摄像以便车辆导航、流量控制、信息监测;汽车服务方面,GPS让你及时调整行车路线,享受畅爽出行;在智能家居中,冰箱、空调等的网络化和智能化将引领人们的生活步入一个崭新的空间,即使你不在家里,也可以通过手机、平板
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved