导航:首页 > 操作系统 > 单片机加1

单片机加1

发布时间:2022-04-03 13:17:01

A. C51单片机中,如何实现按一次键,技术器加1,就是每按一次计数器就加1

你说的这个计数器是单片机里面的定时器/计数器吗?还是用变量做计数器?

B. 一位数码管连在51单片机上,按键后数码管加1,按一下加1.怎样用汇编语言编写

一、图貌似有点问题:
1、用的是共阴极数码管,如果用单片机直接驱动的话,应该用共阳极的;
2、所有LED(包括数码管)都未接限流电阻,建议串接470欧左右的;
3、单片机直接驱动“sounder”,估计驱动电流不够,建议接三极管后再输出
二、程序可以借鉴楼上的,但需要修改:
......
SETB P1.0
JNB P1.0,$
......
在这2句之间需要加入:
JB 1.0 LP0
LCALL DELAY_50MS
另:加入子程序DELAY_50MS
DELAY_50MS:
MOV R7,#0C3H
LP_DL:
MOV R6,#00H
DJNZ R6,$
DJNZ R7,LP_DL
RET

如果换成共阳极数码管后,数据表换成以下的:
TABLE: ;表:共阳数码管 0-9 A-F
DB 0C0H,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
以上意见供参考

C. C51单片机1位数的加1计数显示

从你描述的现象来看,书上是写错了,P2口可能有一位是控制数码管的位选,因为只有一个,所以P2的一位是控制数码管是否显示。P0口控制段选。

D. 单片机按键按一次就加一

按键相对是个低速任务。你按的再快,一秒可以按十次吗?什么?你可以。。那你就是作弊了。因为哪怕你反应的过来。按键可不行。所以。这个本质你需要牢牢抓住。那么你可以选择一秒之内只检测几次按键。把几乎是连续在使用的机器时间碎片化。比如在一个碎片里只查一次按键。是的,你现在就是这么做的。只是循环太快。碎片太多。按键的抖动你都查到了。所以你需要的仅仅是慢下来。极限就是刚刚说的查10次。算算,这是一个100ms的定时。明白定时器的真正用途了吗?如果你实际这么实验了你会发现这的确有效。不会加个成百上千了。接下来你需要设置一个逻辑让按键检测只对下降沿起作用。最好的办法就是和前次的状态比较。如果上次的状态为高而此次状态为低。那么这就是个下降沿。于是你需要一个寄存器保存上一次的状态。并每次比较后更新。原来这寄存器是这么用的。。实际实验后发现这么干已经可以保证基本每次长按只会加1。但是短按似乎会丢失。那是因为。100ms实在是长了些。电平保持100ms有时是太难了。所以,你可以适当提高频率。比如提高10倍。以10ms为周期。基本能解决大多数问题。

E. 单片机 一个按钮设置按一下加1 另一个按键按一下减1 求帮忙编写程序

#include<reg52>
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P1^4;
sbit K2 = P1^5;
uchar data K1state;
uchar data K2state;
uint data num,ntmp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x06f,0x77,0x7c,0x39,0x5e,0x79,0x71} ;
uchar data showIndex,indexTmp;
uchar data W[8];
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);//能使之延时接近1毫秒就成 无需精确
}
void main()
{
K1state = 0xFF;
K2state = 0xFF;
num = 0;
while(1)
{
delay(1);//每毫秒轮询一回
//移位法,延时防抖
K1state = (K1state<<1);
K2state = (K2state<<1);
if(K1) K1state++;
if(K2) K2state++;
//检查开关状态
if(K1state==0x80) num++;
if(K2state==0x80) num--;
for(indexTmp=0,ntmp = num;indexTmp<=7;indexTmp++)
{
W[indexTmp] = num%10;
num /=10;
}
P0 = (0x01<<showIndex);//位选
P2 = table[W[showIndex]];//段选
showIndex++;
if(showIndex>=8)
showIndex=0;
}
}

看了你的全图,修改后了,用Keil uVision 3或4都可以,编译后可以查看对应的汇编代码

程序稍大一点的,不会有人用汇编来给你蘑菇,汇编设计写编码太慢了,开发代价不值得

F. 求救:c51单片机按键每按一次同时数码管显示数字加一

-
建立一个数组,用于存放 0-9的段码。
int Shuzu[]={---------};
如果会用指针
int *P;
P=Shuzu; //指针指向数组!
用外部中断,
每中断一次,中断服务程序将数组元素加一P0=Shuzu[ax++](或指针加一:P0=*P++)
以上假设P0口驱动数码管!
至于数码管使用的是共阳还是共阴,就把相对的数值存在数组中!
-
外部中断0的中断程序入口
void TI_0() interrupt 0
{
--------
}
都提示到这里了,下面自己该会吧?
如果是新手的新手---想要我帮你写全部程序--
那至少你得把你单片机芯片型号说给我才能帮你!
还有数码管是用单片机哪个IO口!
数码管是怎么连接的?(串/并)

G. 51单片机编程开关每按一次,显示器显示的内容就加1

单片机设计是个系统工程,包括硬件设计(含键盘,显示,外存储等)和软件设计,不是几句话就能说清的

H. c51单片机按键加1,保持

1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态。
2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。设按键接单片机p01引脚,故可采用以下程序实现按键扫描
if(p01==0)//按下按键,进入下降沿
{
delay2();//20ms延时去按键前抖动
while(p01==0);//等待上升沿到
来,即按键弹起
flag=~flag;//flag取反,实现状态切换
}
void
delay2()//20ms延时子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
注:根据按键的具体接法,若按下按键向单片机输入低电平,则采用以上程序;若按下按键向单片机输入高电平,则将两处p01==0均改为p01==1。

I. 单片机中,inc指令是在执行前加1还是执行后加1

具体执行方法如下
首先需要在编程区域输入指令的执行条件,在左母线右侧输入:LD X2,当X2接通时运行加1指令。

然后输入加1指令:INCP D0。其含义为当执行此指令时,D0的数据自动加1,INC与INCP的区别在于:INC是程序运行每个周期都加1,而INCP是脉冲指令型指令,只在第一个扫描周期执行加1.

编写好程序先对程序进行转换,然后点击模拟测试按钮将程序写入模拟PLC。

点击测试窗口的“菜单启动”然后选择“继电器内存监视”。

从监视窗口选择位软元件X和字软元件D。

通过模拟仿真可以看到:当X2每次接通时,目标操作数都会进行加1运算。

注意事项:
若不采用脉冲型,当X2接通时,D0会一直进行加1运算。
参考资料来源:吴鉴鹰吧
贡献文档:网络文库《吴鉴鹰单片机项目实战精讲》
参考实例:吴鉴鹰单片机开发板

阅读全文

与单片机加1相关的资料

热点内容
单片机可控硅开关电路 浏览:119
文件夹合并会变大 浏览:229
手游mc服务器怎么设置管理员 浏览:200
pso算法优化参数 浏览:606
java打开pdf文件怎么打开 浏览:369
用银行家算法拒绝死锁的例题 浏览:670
洗盘选股指标源码 浏览:705
百度云盘下载的压缩包怎么解压 浏览:737
加密类型是TKIP被我弄掉了 浏览:234
贝刻智能手环app如何下载 浏览:838
公司电脑上的加密文件解密 浏览:462
服务器怎么配置数据库 浏览:889
压缩机和制冷剂 浏览:182
树莓派手机版编程 浏览:926
谷歌编程挑战赛时间安排 浏览:438
自动学习机源码 浏览:938
明日之后星曳镇是什么服务器 浏览:474
编程学有年龄限制吗 浏览:571
工程可靠度pdf 浏览:900
包子解压玩具会爆吗 浏览:143