在51单片机上使用独立按键实现加减功能,并在12864上显示程序

作者&投稿:广姿 (若有异议请与网页底部的电邮联系)
51单片机C语言程序4个独立按键实现对数码管数字显示的加减清零等~

#include //P0是数码管。P1是LED.P2是按键sbit KEY_OUT_1 = P2^3;sbit KEY_OUT_2 = P2^2; sbit KEY_OUT_3 = P2^1;sbit KEY_OUT_4 = P2^0;#define uchar unsigned char#define ulint unsigned long#define Frequency 10//定时器中断时间 = f*T#define Time 1//一个周期1ms#define TubeNumber 6//数码管个数#define KeyLine 4//矩阵按键行数 #define KeyColumn 4//矩阵按键列数 //数码管真值表uchar code LED_Number[]={0x0C,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//uchar code LED_Alphabet[]={0x88,0x83,0xC6,0xA1,0x86,0x8E,0x89,0xC7,0x8C,0xC1,0x91,0x9C};/*0~9 A~F (b 、d为小写) H L P U y o */uchar LED_Buff[TubeNumber]={0xff,0xff,0xff,0xff,0xff,0xff};/*数码管显示缓冲区,0xff确保初始时都不亮.不可写成uchar code LED_Buff[]。code定义变量写入room,不可修改*/// 矩阵按键编号到标准盘码的映射表 uchar code KeyCodeMap[4][4] = { ( 0x31, 0x32, 0x33, 0x26 ), // 数字键 1、数字键 2、数字键 3、向上键( 0x34, 0x35, 0x36, 0x25 ), // 数字键 4、数字键 5、数字键 6、向左键 ( 0x37, 0x38, 0x39, 0x28 ), // 数字键 7、数字键 8、数字键 9、向下键 ( 0x30, 0x1B, 0x0D, 0x27 )}; // 数字键 0、ESC 键 、回车键 、向右键uchar StaFlag[KeyLine][KeyColumn] ={(1,1,1,1),(1,1,1,1),(1,1,1,1),(1,1,1,1)};//按键是否稳定标志 void StartTime0();void TubeDisplay(ulint sec);ulint pow(x,y);void TubeScan();void KeyAction(uchar keycode);void KeyDriver();void KeyScan();void main (){P1 = 0x08;//使能U3,选择数码管。StartTime0();while(1)KeyDriver();}//定时器0启动函数void StartTime0(){EA = 1;ET0 = 1;TMOD = 0x01;TH0 = (65536 - Time * 100) / 256;TL0 = (65536 - Time * 100) % 256;PT0 = 1;/*定时器0优先中断控制位。IP 这个寄存器的每一位,表示对应中断的抢占优先级,每一位的复值都是0,当我们把某一位设置为1的时候,这一位优先级就比其它位的优先级高了。比如我们设置了 PT0位为1后, 当单片机在主循环或其他中断程序执行时,一旦TO发生中断,作为更高优先级,程序马上执行T0.若在T0程序执行时,其他中断程序发生中断,仍执行TO直到T0中断结束后再执行其他程序。 */ }//中断服务函数 void To_time0()interrupt 1 using 0{static uchar cnt;//记录TO中断次数//static ulint sec;//记录经过秒速//判断是否溢出 if (TF0 == 1){TF0 = 0;TH0 = (65536 - Time * 100) / 256;TL0 = (65536 - Time * 100) % 256;}if (cnt >= Frequency){cnt = 0;//sec++;//Tube_Display(sec);TubeScan();KeyScan();}}//数码管显示函数void TubeDisplay(ulint nom){uchar m = 2;//小数部分位数uchar i;//传输索引//秒速达到上限清零if (nom > pow(10,TubeNumber - m))nom = 0;//分别传输小数部分和整数部分 for(i=0; i= TubeNumber)i=0;//索引递增循环,遍历整个缓冲区} //矩阵按键动作函数void KeyAction(uchar keycode){static ulint result;ulint nom = 0;//输入数字0~9 if ((keycode >= 0x30) && (keycode = 0x25) && (keycode > (4 + l)) & 0x01));//按键消抖 for(l=0; l <KeyLine; l++){if((keybuff [l][c] & 0x0f) == 0x00)//连续4次扫描都为0,判断4*4ms内都是按下状态,可认为按键已稳定按下StaFlag[l][c] = 0;else if ((keybuff [l][c] & 0x0f) == 0x0f)//连续4次扫描都为1,判断4*4ms内都是弹起状态,可认为按键已稳定弹起 StaFlag[l][c] = 1;}for(c=0; c <KeyColumn; c++){switch (c) // 根据索引,释放当前输出脚 拉低下次的根据索引{ case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break; }}}

很简单,加一个判断语气,当数值大于0时,不用处理,小于0时,加绝对值语气,在lcd上面显示一个-(负数),数据上自己处理一下就可以了

1,你先学会使用按键,用指示灯的亮灭来表示按键的状态,比如按一次亮,再按一次灭,做到了就会用按键了.
2,再单独调试12864液晶显示,直到会在上面显示字符和文字(这样的资料很多,就百度也有).
3,把1和2步结合起来,并实现更多功能.

加减速也就是PWM波嘛,你可以中断来控制定时器,12864有它的驱动程序直接套用就行了,祝你成功

邮箱多少?发给你,差不多的


单片机的独立按键
单片机独立按键:一个按键占用单独的一个IO口,矩阵键盘为了节省IO口,通常将按键排列成矩阵形式,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。51单片机接按键,按键一端接地,另一端与IO引脚相连,按键按下为低电平,未按下为高电平。 思路正确,如果用P0口需要加上拉电阻,其他...

51单片机中怎样位选一个端口出来单独使用,而不受其它端口的影响?_百度...
sbit P1_1=P1^1;选择p1.1出来。

我想用51单片机单独控制两台步进电机,实现一台电机停,一台电机转和两...
如果有驱动器的话,步进电机的控制一台只需要两个信号即CW(正转)和CCW(反转)信号就OK了,或者PAUSE(脉冲)+DIR(方向),因此控制两台步进电机只需要4路信号即可,所以任意实验板都可以达到,当然买最便宜的了。

只用单片机单独一个芯片能进行积分,微分等复杂运算吗?不能的话怎么办...
一般来说,如果是实时应用,传统8位51类单片机是不合适的,至少要使用单周期1T指令的增强型51单片机(如STC系列,C8051系列)或者AVR,或者用16位、32位单片机(如PIC24,PIC32系列等)。

51单片机控制数码管显示时钟,独立按键怎么弄
独立按键处理起来是非常简单的,一般都是IO口单独控制,所以只需要消抖和判断按键按下抬起状态就好。比如:sbit key=P1^0;if(key==0){ delay(10); if(key==0) { keyval=1; while(key==0); }}

51单片机中的P0口如何独立操作。
SETB P0.0 ; 置P0的位0为1 CLR P0.0 ; 清P0的位0为0

51单片机唯一一个可以直接使用的io
是的。51单片机是唯一个可以直接使用的io。目前为止还没有其他的设备。可以直接使用io。这属于五一单片机的一个优越于其他其设备的独特功能。但是未来有可能会有其他的设备。也能够直接使用

在51单片机中用数码管可不可以单独显示超过255的三位数字?
当然可以了,你把temp定义成unsigned int unsigned int temp=999;bai=temp\/100;temp=temp%100;shi=temp10;ge=temp%10;

请问如何在51单片机上实现8路独立计时器?
,那么你就选1s和1分钟做时间基数。用tmer0和tmer1分别来实现。比如在tmer0中断中用一个变量x计数,每中断一次,x就自加一(x++),比如:当在tmer0中断里当x为3的时候,就响应3s那路的定时。51系列有的有3个定时器,工作模式根据情况自选,其实时间基数可以选3个,用tmer加上中断即可处理。

单片机控制156个LED,单独控制每一个
这个简单,楼上的兄弟说的不错,但未免太大才小用了,我觉得普通的51就可以控制了 51系列是32个I\/O口。把电路组成矩阵方式,16个I\/O口为X方向信号,共16行,另外16个I\/O口为Y方向信号,共16列,例如X方向全接高电平至LED长引脚,Y方向接低电平至LED短引脚,X和Y各取一个,横轴和纵轴的交汇...

芜湖市17397143031: 在51单片机上使用独立按键实现加减功能,并在12864上显示程序 -
承生芩连: 1,你先学会使用按键,用指示灯的亮灭来表示按键的状态,比如按一次亮,再按一次灭,做到了就会用按键了.2,再单独调试12864液晶显示,直到会在上面显示字符和文字(这样的资料很多,就百度也有).3,把1和2步结合起来,并实现更多功能.

芜湖市17397143031: 想给51单片机写一段程序 就是用独立按键控制变量 就是按一次可以控制 -
承生芩连: 你好! 因为按键操作涉及寄存器配置和按键防抖,因此写了你也不一定用得上.而且你这个的逻辑比较简单,建议自己写.主要注意几个地方就可以了: 按键I/O口电平的配置:要结合硬件电路确认按键是低电平触发还是高电平触发.在程序中设置正确的I/O口电平. I/O口的输入输出状态的配置:I/O口作为按键输入必须是准双向模式或输入模式,这个不同单片机配置寄存器方式不同但大同小异. 按键防抖:在按键按下时有时会有短暂的接触不良,因此会多次判断按键按下和断开,因此一般在按键按下或断开时增加几十毫秒的防抖处理,具体就是连续多个循环判断按键是否是一个状态,如果状态不变,再进行下一步处理.

芜湖市17397143031: 51单片机如何用定时器中断,实现按键计数加减,两位数码管,C语言,谢谢 -
承生芩连: 用一个单元,存放计数值,每隔1秒加一,然后进行十进制调整,之后向P2输出即可.

芜湖市17397143031: 请教高手,用51单片机独立按键控制数码管数字加减,为什么在按下独立按键的时候会出现闪烁?怎么回事? -
承生芩连: 因为你按键的时候影响了数码管刷新;数码管一般都是动态扫描的,利用人眼的视觉暂留做的,你按下按键的时候,肯定有延时消抖,延时的时候就影响了数码管显示,所以数码管刷新的慢了,人眼就能分辨出来亮和灭的状态....解决办法 1、改进按键扫描 2、改进数码管显示 3、用嵌入式系统以上三选一即可解决

芜湖市17397143031: 51单片机按键加法运算,求教 -
承生芩连: 这是一个简易的计算器,有加减乘除运算.#include<reg51.h>#define uchar unsigned char; uchar LED1,LED2,LED3,LED4; uchar keyval,calflag,s_dat,d_dat; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa...

芜湖市17397143031: 51单片机实现按键数值加减,并显示在LCD上,有负数处理功能. -
承生芩连: 很简单,加一个判断语气,当数值大于0时,不用处理,小于0时,加绝对值语气,在lcd上面显示一个-(负数),数据上自己处理一下就可以了

芜湖市17397143031: 51单片机C语言编程如何实现长按按键实现数值的累加 -
承生芩连: 先设置一定时器,比如定时0.5s加一,再设置一个标志位,当加数达到一个标准值时,定时器定时改为更短时间. 关键是设置定时器,标志位,在中端程序检验按键的电位.

芜湖市17397143031: 51单片机C语言编程两个按键加减显示0 - 99的加减,求程序,自己编的有警告,不知道哪里错了 -
承生芩连: # include <reg52.h> # define uint unsigned int # define uchar unsigned char sbit K2 = P3^7; //按键 sbit K3 = P3^6; sbit W1 = P3^2; //位选 sbit W2 = P3^1; uint num, shi, ge; uchar code table[]={0xc0,0xf9,0xa4,0xb0, // 数码管 共阳0x99,0x92,0x...

芜湖市17397143031: 51单片机按键控制数码管数字加减问题 -
承生芩连: void keyScan() //1*5按键扫描函数 { P3 = P3 | 0xf8; //P3高5位置1,设置为输入,默认为高电平 0xf8=11111000 keyValue = ...

芜湖市17397143031: 51单片机按键加减清零汇编语言编程 -
承生芩连: K2 BIT P1.4 //+ K3 BIT P1.5 //- K4 BIT P1.6 //CLR K_OLD EQU 30H K_NEW EQU 31H K_COUNT EQU 32H S_BUF EQU 33H DISSTART EQU 40H ;显示单元首地址 LED_DATA EQU P0 ;数码管数据口定义;-----------------------------------------------...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网