⑴ 单片机 汇编语言如果要实现按键按下后连加或连减的效果,程序该怎么编写
汇编很久没用过了,提供一下思路,供参考!
可采用计时的方式,检测按键按下状态超过2秒后,数据开始增大递加递减的步距(之前是每次加减1,增大后,每次加减10),松开按键后,计时器清零!
采用计次的方式也可以实现,按键后,数据递加或递减一次,延时300毫秒,再次检测按键,未松开,继续递加,加满5次后,开始增发递加或递减步距,松开按键后,计次清零!
⑵ 单片机中计算器程序c语言加减乘除怎么写
void mian(void)--写错了。
{
……
http://hi..com/do_sermon/item/a16790e1db9dded6ea34c986
⑶ 51单片机怎么实现两位数的加减
51单片机
51单片机是对所有兼容Intel 8051指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
中文名
51单片机
外文名
mcu
定义
兼容Intel 8031系统的单片机统称
始祖
Intel公司始创的8004单片机
缺点
不具备自编程能力
快速
导航
功能
学习
仿真
区别
主要产品
*Intel(英特尔)的:80C31、80C51、87C51,80C32、80C52、87C52等;
*ATMEL(爱特梅尔)的:89C51、89C52、89C2051,89S51(RC),89S52(RC)等;
*Philips(飞利浦)、华邦、Dallas(达拉斯)、Siemens(西门子)等公司的许多产品;
STC(国产宏晶)单片机:89c51、89c52、89c516、90c516等众多品牌。
功能
·8位CPU·4kbytes程序存储器(ROM) (52为8K)
·128bytes的数据存储器(RAM) (52有256bytes的RAM)
·32条I/O口线·111条指令,大部分为单字节指令
·21个专用寄存器
·2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
·一个全双工串行通信口
·外部数据存储器寻址空间为64kB
·外部程序存储器寻址空间为64kB
·逻辑操作位寻址功能·双列直插40PinDIP封装
·单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。
学习
作为一个初学者,如何单片机入门?
实际上,其实不需要多少东西,会简单的C语言,知道51单片机的基本结构就可以了。一般的大学毕业生都可以了,自学过这2门课程的高中生也够条件。设备上,一般是建议购买一个仿真器,例如,的“双功能下载线”就具有良好的稳定性和较快的下载速度,上位机可扩展,可以下载更多的单片机及嵌入式芯片。通过实验,这样才可以进行实际的,全面的学习。日后在工作上,仿真器也大有用处。还有,一般光有仿真器是不行,还得有一个实际的电路,即学习板,如图,即为,单片机最小系统。
⑷ 单片机加法程序
1L的程序怎么看着都像是有问题。
要100以内的奇数相加,奇数就是1,3,5,7,9……99,一共50个数字,如果从1开始,那就是每次加2,重复49次到(2*49)+1=99,所以程序这样简单些:
ORG
0000H
CLR
A,
MOV
50H,
A
MOV
51H,
A
MOV
R2,
#01H
;从1开始
MOV
R3,#49
;重复49次
LOOP:
CLR
C
;么次进行加法前先清除C,以免出问题
MOV
A,
R2
ADD
A,
51H
MOV
51H,
A
CLR
A
ADDC
A,
50H
MOV
50H,
A
INC
R2
INC
R2
DJNZ
R3,
LOOP
SJMP
$
END
⑸ 单片机怎样编写加一减一
第一次按下设置键对第一个数码管进行加减设置,再按下设置键对第二个数码管进行加减数的设置,如此类推设置完第四个数码管后再按下设置键表示完成设置,并对设置结果进行保存。
⑹ 在学习51单片机:s1,s2,控制加减,在数码管显示0-99的程序怎么写 谢谢
ORG 0000H
AJMP MAIN
ORG 30H
MAIN: MOV R1,#0
XUNH:
LCALL DISP
LCALL DELAY
INC R1
CJNE R1,#100,XUNH
AJMP MAIN
;显示P1口十位P2口个位,这样做就怎么也不会闪烁了把
DISP: MOV DPTR,#TAB ;共阴
MOV A,R1
MOV B,#10
MUL AB
MOV A
MOVC A,@A+DPTR
MOV P1,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;延时1s,要精确延时可以稍微调一下数值
DELAY:MOV R2,#25
DEL1: MOV R3,#100
DEL2: MOV R4,#200
DEL3: DJNZ R4,$
DJNZ R3,DEL2
DJNZ R2,DEL1
RET
END
;做动态显示也可以,人眼是看不出闪烁的。那样会省点口线,嘿嘿反正你只有2个 数码管没别的东西,就干脆做个静态的咯。怎么也闪烁不了的
⑺ 一个简单51单片机加法程序问题
说错了呗。——要知道 221bH是一个16位(bit)的(16进制)数,41h只是一个8位(bit)的存储单元,怎么可能放得下这么大个数呢?
正确说法应该是:把221bh存放到41h、40h两个连续的存储单元中。
⑻ 8位单片机怎么实现32位加减法
你说的实现32位加减法指的是双字节的运算吧.
;双字节减法子程序
;参数:R6R5,R4R3
;返回:R2R3
DSUB:
MOV
A,R5
CLR
C
SUBB
A,R3
MOV
R3,A
MOV
A,R6
SUBB
A,R4
MOV
R2,A
RET
;双字节加法子程序
;参数:R6R5,R4R3
;返回:R2R3
LADD:
MOV
A,R5
ADD
A,R3
MOV
R5,A
MOV
A,R6
ADDC
A,R4
MOV
R6,A
MOV
A,R5
MOV
R3,A
MOV
A,R6
MOV
R2,A
RET
;双字节乘法子程序
;参数:R6R5,R4R3
;返回:R2R1R4R3
DMUL:
MOV
A,R5;
MOV
B,R3
MUL
AB;R5*R3
XCH
A,R3;低位→R7,R7→A准备乘数
MOV
R1,B;高位暂存R1
MOV
B,R6
MUL
AB;R6*R3
ADD
A,R1;乘积低位加上一乘积高位暂存R4
MOV
R4,A
CLR
A;清A
ADDC
A,B;高位加低位来的进位存R5
MOV
R1,A
MOV
A,R4
MOV
B,R5
MUL
AB;R5*R4
ADD
A,R1;第三次乘积低位加R5暂存R6
XCH
A,R4
XCH
A,B
ADDC
A,R1;第三次乘积高位加R5存R5
MOV
R1,A
MOV
FO,C;保存进位位
MOV
A,R6
MUL
AB;R6*R4
ADD
A,R1;第四次乘积低位加R5存R5
MOV
R1,A
CLR
A
MOV
ACC.0,C
MOV
C,FO
ADDC
A,B;第四次乘积高位加低位来的进位后存于R4
MOV
R2,A
RET
;双字节除法程序
;参数:R2R1R4R3,R6R5
;返回:R4R3(商),R2R1(余数)
DDIV:
MOV
A,R1
CLR
C
SUBB
A,R5
MOV
A,R2
SUBB
A,R6
JNC
DIV1;被除数高位字节大于除数,转溢出处理
MOV
B,DIV1;无溢出执行除法,置循环次数
MOV
B,#16;被
⑼ c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序
1、首先先在proteus画出仿真图,方便仿真程序。
⑽ 单片机:K1~K4控制数码管加减演示 流程图!!!
玩单片机这么久了,从没见过这样进行按键处理的
别的不多说了,给你一个我自己编写的加减数程序吧
端口已经按照你的板子连线改好了,至于数码管的编码,如果不对,你再自行修改吧
如果看不懂,或任何疑问,可以随时追问,也可私密我加个好友
#include<reg52.h>
sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2;//按键端口定义
unsigned int count;//数码管显示用变量
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
/***************************************************************************/
void delay(char x) {char j;for(;x>0;x--){for(j=100;j>0;j--);}}//延时
/***************************************************************************/
void display(int xs)//四位数码管显示
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10;
d3=(xs/100)%10; d4=(xs/1000)%10;
P0=table[d1]; P2=0x01; delay(5); P2=0x00;
P0=table[d2]; P2=0x02; delay(5); P2=0x00;
P0=table[d3]; P2=0x04; delay(5); P2=0x00;
P0=table[d4]; P2=0x08; delay(5); P2=0x00;
}
/***************************************************************************/
void key()//按键处理
{
if(K1==0){delay(10);if(K1==0){count++;}while(!K1){display(count);}}//加一
if(K2==0){delay(10);if(K2==0){count--;}while(!K2){display(count);}}//减一
if(K3==0){delay(10);if(K3==0){count=0;}while(!K3){display(count);}}//清零
display(count); if(count>9999){count=0;}//调用显示函数 及 防止溢出
}
/***************************************************************************/
void main(){count=1234; while(1){key();}}//主函数
/***************************************************************************/