2025年51单片机舵机驱动程序(5篇)
文件格式:DOCX
时间:2023-03-21 00:00:00    小编:我大侄子呢

2025年51单片机舵机驱动程序(5篇)

小编:我大侄子呢

每个人都曾试图在平淡的学习、工作和生活中写一篇文章。写作是培养人的观察、联想、想象、思维和记忆的重要手段。范文书写有哪些要求呢?我们怎样才能写好一篇范文呢?下面是小编为大家收集的优秀范文,供大家参考借鉴,希望可以帮助到有需要的朋友。

51单片机舵机驱动程序篇一

;给内存ram空间中40h单元起名second minute equ 41h

;给内存ram空间中41h单元起名minute hour equ 42h

;给内存ram空间中42h单元起名hour secondgewei equ 43h

;给43h单元起名secondgewei存秒的个位 secondshiwei equ 44h

;给44h单元起名secondshiwei存秒的十位 minutegewei equ 45h

;给45h单元起名minutegewei存分的个位 minuteshiwei equ 46h

;给46h单元起名minuteshiwei存分的十位 hourgewei equ 47h

;给47h单元起名hourgewei存小时的个位 hourshiwei equ 48h

;给48h单元起名hourshiwei存小时的十位 org 0000h

;复位时程序从此开始 sjmp start

;跳到start进行初始化 org 000bh

;定时器 0中断入口 ajmp timer0

;跳转到timer0处

org 0030h

;初始化程序从30h开始;---------------初始化start------------------------------start:

mov second, #0

;给秒存储单元second赋初始值0 mov minute, #0

;给分存储单元minute赋初始值0 mov hour , #12

;给小时存储单元hour赋初始值12 mov dptr , #tab

;给数据指针赋值,将dptr指向tab数据表头处 mov 30h, #0

;给30h单元赋初始值0(用于计20次的50ms中断)mov th0,#3ch

;给计数容器的高8位th0赋初始值3ch mov tl0,#0b0h

;给计数容器的低8位tl0赋初始值b0h mov tmod,#00000001b

;c/t位设置为0,m1m0设置位10,即模式1定时 mov tcon,#00010000b

;tr0设置为1,即启动定时器0开始工作 setb et0

;ie中的et0位设置为1,开定制器中断0 setb ea

;ie中的ea位设置为1,开总中断;-----------------------主程序main-----------------------------main:call key

;调按键子程序key call process

;调数据处理子程序process call display

;调显示子程序display sjmp main

;跳转到main标号处;------------------------------按键子程序key调时-------------------key:mov p1,#0feh

;行扫描 lcall delay

;jnb p1.4,hourjia

;p1.4引脚如果是低电平就跳到hourjia处

jnb p1.5,hourjian

;p1.5引脚如果是低电平就跳到hourjian处 jnb p1.6,minutejia

;p1.6引脚如果是低电平就跳到mimutejia处 jnb p1.7,minutejian

;p1.7引脚如果是低电平就跳到mimutejian处 fanhui:ret

;子程序返回(如果没有按键按下)

hourjia:call delay

;调延时程序目的是跳过按键抖动期(去抖)jb p1.4,fanhui

;p1.4如果是高电平就跳到fanhui处(没键按)jnb p1.4,$

;如果p1.4是低电平就停在当前位置等键释放 mov r4,hour cjne r4,#23,a1

;判断时数字是否为23 ajmp a2

a1:inc hour

;把小时位加1 mov second, #0

;小时进位,秒归0

ret

a2:mov hour,#0

;小时数为23时加一为0

mov second, #0

;小时进位,秒归0

ret

;子程序返回

hourjian:call delay

;调延时程序目的是跳过按键抖动期(去抖)jb p1.5,fanhui

jnb p1.5,$

mov r5,hour cjne r5,#0,a3

ajmp a4 a3:dec hour

mov second, #0

ret a4:mov hour,#23

mov second, #0 ret

minutejia:call delay

jb p1.6,fanhui

jnb p1.6,$

mov r6,minute

cjne r6,#59,a5

ajmp a6 a5:inc minute

mov second, #0

ret a6:mov second, #0

mov minute, #0

mov r4,hour cjne r4,#23,a10

mov hour,#0

ret a10:inc hour

ret

minutejian:call delay

jb p1.7,fanhui

jnb p1.7,$

mov r7,minute cjne r7,#0,a7

ajmp a8 a7:dec minute

;p1.5如果是高电平就跳到fanhui处(没键按)

;如果p1.5是低电平就停在当前位置等键释放

;判断时数字是否为23

;把小时位减1

;小时数为0时减一为23

;子程序返回

;调延时程序目的是跳过按键抖动期(去抖)

;p1.6如果是高电平就跳到fanhui处(没键按)

;如果p1.6是低电平就停在当前位置等键释放

;判断分钟数是否为59

;把分钟位加1

;给秒存储单元second赋初始值0

;分钟数为59则分钟归0

;判断时数字是否为23

;23时增1归0

;分钟数为59 自增1后小时增1

;子程序返回

;调延时程序目的是跳过按键抖动期(去抖)

;p1.7如果是高电平就跳到fanhui处(没键按)

;如果p1.7是低电平就停在当前位置等键释放

;判断分钟数是否为0

;分钟不为0把分钟位减1

mov second, #0

ret

a8:mov minute, #59

;分钟数为0时减一为59 mov r4,hour cjne r4,#0,a9

;判断时钟数是否为0 mov hour,#23

;时钟数为0减1为23 mov second, #0 ret

a9:dec hour

;时钟数不为0则减1 mov second, #0

ret

;子程序返回;-------------------处理子程序process-----------------------process:mov a, second

;把second中的秒值拷贝给a mov b, #10

;给寄存器b赋值10 div ab

;a除以b,结果存入a中,余数存入b中 mov secondshiwei , a

;结果即秒的十位数拷贝给secondshiwei mov secondgewei , b

;余数即秒的个位拷贝给secondgewei mov a, minute

;把minute中的分值拷贝给a mov b, #10

;给寄存器b赋值10 div ab

;a除以b,结果存入a中,余数存入b中 mov minuteshiwei , a

;结果即分的十位拷贝给minuteshiwei mov minutegewei , b

;余数即分的个位拷贝给minutegewei mov a, hour

;把hour中的小时值拷贝给a mov b, #10

;给寄存器b赋值10 div ab

;a除以b,结果存入a中,余数存入b中 mov hourshiwei , a

;结果即小时的十位拷贝给hourshiwei mov hourgewei , b

;余数即小时的个位拷贝给hourgewei ret

;子程序结束返回到主程序;-----------------显示子程序display--------------display:mov a, hourshiwei

;小时的十位拷贝给a movc a, @a+dptr

;到a+dprt这个数对应的地方找显示段码拷贝给a mov p0, a

;把显示段码(小时的十位)送到p0 clr p2.0

;将p2.0置低电平,对应的三极管导通 call delay

;调延时(让显示小时十位的数码管持续亮一段时间)setb p2.0

;将p2.0置高电平,对应三极管截止,对应数码管灭 mov a, hourgewei

;小时的个位拷贝给a movc a,@a+dptr

;到a+dprt这个数对应的地方找显示段码拷贝给a mov p0, a

;把显示段码(小时的个位)送到p0 clr p2.1

;将p2.1置低电平,对应的三极管导通

call delay

;调延时(让显示小时个位的数码管持续亮一段时间)setb p2.1 mov p0,#7fh clr p2.1 call delay setb p2.1

;将p2.1置高电平,对应三极管截止,对应数码管灭 mov a, minuteshiwei

;分钟的十位拷贝给a movc a,@a+dptr

;到a+dprt这个数对应的地方找显示段码拷贝给a mov p0, a

;把显示段码(分钟的十位)送到p0 clr p2.2

;将p2.2置低电平,对应的三极管导通 call delay

;调延时(让显示分钟十位的数码管持续亮一段时间)setb p2.2

;将p2.2置高电平,对应三极管截止,对应数码管灭 mov a, minutegewei

;分钟的个位拷贝给a movc a,@a+dptr

;到a+dprt这个数对应的地方找显示段码拷贝给a mov p0, a

;把显示段码(分钟的个位)送到p0 clr p2.3

;将p2.3置低电平,对应的三极管导通

call delay

;调延时(让显示分钟个位的数码管持续亮一段时间)setb p2.3

;将p2.3置高电平,对应三极管截止,对应数码管灭

mov p0,#7fh clr p2.3 call delay setb p2.3

mov a, secondshiwei

;秒的十位拷贝给a movc a,@a+dptr

;到a+dprt这个数对应的地方找显示段码拷贝给a mov p0, a

;把显示段码(秒钟的十位)送到p0 clr p2.4

;将p2.4置低电平,对应的三极管导通 call delay

;调延时(让显示秒钟十位的数码管持续亮一段时间)setb p2.4

;将p2.4置高电平,对应三极管截止,对应数码管灭 mov a, secondgewei

;秒的个位拷贝给a movc a,@a+dptr

;到a+dprt这个数对应的地方找显示段码拷贝给a mov p0, a

;把显示段码(秒钟的个位)送到p0 clr p2.5

;将p2.5置低电平,对应的三极管导通

call delay

;调延时(让显示秒钟个位的数码管持续亮一段时间)setb p2.5

;将p2.5置高电平,对应三极管截止,对应数码管灭 ret

;显示子程序结束返回主程序;--------------------中断服务子程序----------------------------timer0:mov r3, a

;把a中的数据送入r3保护起来 inc 30h

;30h单元中的数加1 mov a, 30h

;30h单元中的数据拷贝给a cjne a,#20,jixu

;a中的数据与20比较不相等就跳转到jixu处 mov 30h,#0

;(如果30h单元计满20了)给30h赋值0 inc second

;把second中的秒钟数加1 mov a,second

;把second中的数据拷贝给a cjne a, #60, jixu

;a中的数据与60比较不相等就跳转到jixu处 mov second, #0

;给秒second赋值0 inc minute

;把minute中的分钟数加1 mov a, minute

;把minute中的数据拷贝给a cjne a, #60, jixu

;a中的数据与60比较不相等就跳转到jixu处 mov minute, #0

;给分钟minute赋值0 inc hour

;把hour中的小时数据加1 mov a, hour

;把hour中的数据拷贝给a cjne a, #24, jixu

;a中的数据与24比较不相等就跳转到jixu处 mov hour, #0

;给小时hour赋值0 jixu: mov a,r3

;把刚才送入r3中的数据还给a mov th0,#3ch

;给计数容器的高8位th0赋初始值3ch mov tl0,#0b0h

;给计数容器的低8位tl0赋初始值b0h reti

;中断子程序返回主程序;---------------------------延时子程序----------------------------delay:mov r0, #50

;给r0赋值50 d2:mov r1, #10

;给r1赋值10 d1:djnz r1, d1

;r1减1不等于0跳到d1处 djnz r0, d2

;r0减1不等于0跳到d2处

ret

;延时子程序结束返回调用该程序的下一条;---------------下面的数据表中存储的是显示段码(共阳)-------------------tab:db 0c0h,0f9h,0a4h,0b0h,99h

;从tab处开始存储0、1、2、3、4

db 92h ,82h ,0f8h,80h ,90h

;5、6、7、8、9对应的显示段码 end

;程序结束

51单片机舵机驱动程序篇二

/*功能描述:

按下按键k检测距离,松开锁定结果

按下按键find 查询历史测量数据,本程序可查询5次历史数据 按下out键 退出历史数据查询功能 test可不接 */ #include #define uchar unsigned char #define uint unsigned int #define duan p1

精选文章
基于你的浏览为你整理资料合集
复制