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

k20单片机

发布时间:2022-11-13 13:01:00

⑴ 用8051单片机和DAC0832制作信号发生器

这要费些时间的,不会有人专门给写的,除非有人正好做过。我现在发一个类似的,是别人的,正好被我看到了,你可以参考一下。

ORG0000H

LJMPMAIN

ORG0100H

MAIN:JNBP1.0,P10

JNBP1.1,P11

JNBP1.2,P12

JNBP1.3,P13

LJMPMAIN

P10:MOVR7,#00H

LCALLSQU

LJMPMAIN

P11:MOVR7,#01H

LCALLSAW

LJMPMAIN

P12:MOVR7,#02H

LCALLTRI

LJMPMAIN

P13:MOVR7,#03H

LCALLSIN

LJMPMAIN

SQU:JNBP1.1,N1

JNBP1.2,N2

JNBP1.3,N3

LJMPSSQU

N1:MOVR7,#01H

LJMPTC0

N2:MOVR7,#02H

LJMPTC0

N3:MOVR7,#03H

LJMPTC0

SSQU:CJNER7,#00H,TC0

MOVR0,#00H

MOVDPTR,#7FFFH

K00:MOVA,#0FFH

MOVX@DPTR,A

MOVP0,#0FFH

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L00:DECR3

CJNER3,#255,L00

INCR0

INCR0

CJNER0,#254,K00

MOVR0,#00H

K01:MOVA,#00H

MOVX@DPTR,A

MOVP0,#00H

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L01:DECR3

CJNER3,#255,L01

INCR0

INCR0

CJNER0,#254,K01

LJMPSQU

TC0:RET

SAW:JNBP1.0,N4

JNBP1.2,N5

JNBP1.3,N6

LJMPSSAW

N4:MOVR7,#00H

LJMPTC1

N5:MOVR7,#02H

LJMPTC1

N6:MOVR7,#03H

LJMPTC1

SSAW:CJNER7,#01H,TC1

MOVR0,#0FFH

MOVDPTR,#7FFFH

K10:MOVA,R0

MOVX@DPTR,A

MOVP0,R0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L10:DECR3

CJNER3,#255,L10

INCR0

CJNER0,#255,K10

LJMPSAW

TC1:RET

TRI:JNBP1.0,N7

JNBP1.1,N8

JNBP1.3,N9

LJMPTTRI

N7:MOVR7,#00H

LJMPTC2

N8:MOVR7,#01H

LJMPTC2

N9:MOVR7,#03H

LJMPTC2

TTRI:CJNER7,#02H,TC2

MOVR0,#00H

MOVDPTR,#7FFFH

K20:MOVA,R0

MOVX@DPTR,A

MOVP0,R0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L20:DECR3

CJNER3,#255,L20

INCR0

INCR0

CJNER0,#254,K20

K21:MOVA,R0

MOVX@DPTR,A

MOVP0,R0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L21:DECR3

CJNER3,#255,L21

DECR0

DECR0

CJNER0,#0,K21

LJMPTRI

TC2:RET

SIN:JNBP1.0,N10

JNBP1.1,N11

JNBP1.2,N12

LJMPSSIN

N10:MOVR7,#00H

LJMPTC3

N11:MOVR7,#01H

LJMPTC3

N12:MOVR7,#02H

LJMPTC3

SSIN:CJNER7,#03H,TC3

MOVR0,#00H

MOVDPTR,#7FFFH

K30:MOVA,R0

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#7FFFH

MOVX@DPTR,A

MOVP0,A

INCR0

MOVP2,#0FFH

MOVA,P2

CPLA

MOVR3,A

L30:DECR3

CJNER3,#255,L30

CJNER0,#255,K30

LJMPSIN

TC3:RET

TAB:DB

⑵ 哪种类型的8位pic单片机用来做可变速的循迹小车实验比较好!要求有pwm输出的

这个很多,目前有PWM的8位PIC单片机有289种型号!!!最好你还得有其他要求。
289种型号如下:
PIC12F1501
PIC12F1822
PIC12F1840
PIC12F615
PIC12F617
PIC12F683
PIC12F752
PIC12HV615
PIC12LF1840T48A
PIC16F1503
PIC16F1507
PIC16F1508
PIC16F1509
PIC16F1516
PIC16F1517
PIC16F1518
PIC16F1519
PIC16F1526
PIC16F1527
PIC16F1782
PIC16F1783
PIC16F1784
PIC16F1786
PIC16F1787
PIC16F1823
PIC16F1824
PIC16F1825
PIC16F1826
PIC16F1827
PIC16F1828
PIC16F1829
PIC16F1847
PIC16F1933
PIC16F1934
PIC16F1936
PIC16F1937
PIC16F1938
PIC16F1939
PIC16F1946
PIC16F1947
PIC16F616
PIC16F627A
PIC16F628A
PIC16F648A
PIC16F684
PIC16F685
PIC16F690
PIC16F707
PIC16F716
PIC16F72
PIC16F720
PIC16F721
PIC16F722
PIC16F722A
PIC16F723
PIC16F723A
PIC16F724
PIC16F726
PIC16F727
PIC16F73
PIC16F737
PIC16F74
PIC16F747
PIC16F76
PIC16F767
PIC16F77
PIC16F777
PIC16F785
PIC16F818
PIC16F819
PIC16F87
PIC16F88
PIC16F882
PIC16F883
PIC16F884
PIC16F886
PIC16F887
PIC16F913
PIC16F914
PIC16F916
PIC16F917
PIC16F946
PIC16HV616
PIC16HV785
PIC16LF722
PIC16LF723
PIC16LF724
PIC16LF726
PIC16LF727
PIC18F1220
PIC18F1320
PIC18F13K22
PIC18F13K50
PIC18F14K22
PIC18F14K50
PIC18F2220
PIC18F2221
PIC18F2320
PIC18F2321
PIC18F2331
PIC18F23K20
PIC18F23K22
PIC18F2410
PIC18F2420
PIC18F2423
PIC18F2431
PIC18F2450
PIC18F2455
PIC18F2458
PIC18F2480
PIC18F24J10
PIC18F24J11
PIC18F24J50
PIC18F24K20
PIC18F24K22
PIC18F2510
PIC18F2515
PIC18F2520
PIC18F2523
PIC18F2525
PIC18F2550
PIC18F2553
PIC18F2580
PIC18F2585
PIC18F25J10
PIC18F25J11
PIC18F25J50
PIC18F25K20
PIC18F25K22
PIC18F25K80
PIC18F2610
PIC18F2620
PIC18F2680
PIC18F2682
PIC18F2685
PIC18F26J11
PIC18F26J13
PIC18F26J50
PIC18F26J53
PIC18F26K20
PIC18F26K22
PIC18F26K80
PIC18F27J13
PIC18F27J53
PIC18F4220
PIC18F4221
PIC18F4320
PIC18F4321
PIC18F4331
PIC18F43K20
PIC18F43K22
PIC18F4410
PIC18F4420
PIC18F4423
PIC18F4431
PIC18F4450
PIC18F4455
PIC18F4458
PIC18F4480
PIC18F44J10
PIC18F44J11
PIC18F44J50
PIC18F44K20
PIC18F44K22
PIC18F4510
PIC18F4515
PIC18F4520
PIC18F4523
PIC18F4525
PIC18F4550
PIC18F4553
PIC18F4580
PIC18F4585
PIC18F45J10
PIC18F45J11
PIC18F45J50
PIC18F45K20
PIC18F45K22
PIC18F45K80
PIC18F4610
PIC18F4620
PIC18F4680
PIC18F4682
PIC18F4685
PIC18F46J11
PIC18F46J13
PIC18F46J50
PIC18F46J53
PIC18F46K20
PIC18F46K22
PIC18F46K80
PIC18F47J13
PIC18F47J53
PIC18F6310
PIC18F6390
PIC18F6393
PIC18F63J11
PIC18F63J90
PIC18F6410
PIC18F6490
PIC18F6493
PIC18F64J11
PIC18F64J90
PIC18F6520
PIC18F6527
PIC18F65J10
PIC18F65J11
PIC18F65J15
PIC18F65J50
PIC18F65J90
PIC18F65K22
PIC18F65K80
PIC18F65K90
PIC18F6622
PIC18F6627
PIC18F6628
PIC18F66J10
PIC18F66J11
PIC18F66J15
PIC18F66J16
PIC18F66J50
PIC18F66J55
PIC18F66J60
PIC18F66J65
PIC18F66J90
PIC18F66J93
PIC18F66K22
PIC18F66K80
PIC18F66K90
PIC18F6722
PIC18F6723
PIC18F67J10
PIC18F67J11
PIC18F67J50
PIC18F67J60
PIC18F67J90
PIC18F67J93
PIC18F67K22
PIC18F67K90
PIC18F8310
PIC18F8390
PIC18F8393
PIC18F83J11
PIC18F83J90
PIC18F8410
PIC18F8490
PIC18F8493
PIC18F84J11
PIC18F84J90
PIC18F8520
PIC18F8527
PIC18F85J10
PIC18F85J11
PIC18F85J15
PIC18F85J50
PIC18F85J90
PIC18F85K22
PIC18F85K90
PIC18F8622
PIC18F8627
PIC18F8628
PIC18F86J10
PIC18F86J11
PIC18F86J15
PIC18F86J16
PIC18F86J50
PIC18F86J55
PIC18F86J60
PIC18F86J65
PIC18F86J72
PIC18F86J90
PIC18F86J93
PIC18F86K22
PIC18F86K22
PIC18F86K90
PIC18F8722
PIC18F8723
PIC18F87J10
PIC18F87J11
PIC18F87J50
PIC18F87J60
PIC18F87J72
PIC18F87J90
PIC18F87J93
PIC18F87K22
PIC18F87K90
PIC18F96J60
PIC18F96J65
PIC18F97J60

⑶ pic18f46k20打开写保护烧写后单片机还能再烧写么

当然可以了,保护只是防止芯片内部的数据用仿真器读出来而已,不代表不能烧芯片。烧芯片是先把Flash内部的东西擦掉(有点像U盘格式化)然后写入新的数据。

⑷ 通过串口调试助手,可以给K20系列单片机发送can通信信息吗

可以通过232转can进行工作,这样就可以接串口助手了,协议测试类的,如格西烽火串口助手,比较方便,可以按照自己的要求自定义。

⑸ micrchip公司28脚单片机有哪些

Microchip公司的8位28pin单片机有:
芯片内有“F”的全部支持ISP,有"C"的仅仅是OTP(一次性编程)的芯片。比如:PIC16C72A仅仅是OTP的芯片。下面仅列出几款"F"的芯片。
PIC16F57 PIC16F722 PIC16F723 PIC16F882 PIC16F726 PIC16F1993 PIC16F883 PIC18F23K20 PIC18F24J10 PIC16F886 PIC18F25J10 PIC18F24K20 PIC16F913 PIC18F25J11 PIC18F24J50 PIC16F916 PIC18F26K20 PIC18F25J50 PIC18F26J11 PIC18F2450 PIC18F2550 PIC18F2480 PIC18F2553 PIC18F2580 PIC18F2680
请参见这里:
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1035&mid=10&lang=en&pageId=74

Microchip公司的16位28pin单片机有:
DSPIC30F1010 DSPIC33J06GS102 DSPIC33J06GS202 DSPIC30F2020 PIC24F16K12等多种芯片(没有全部列出的)DSPIC系列单片机支持DSP功能(数字信号处理功能)具体的请参考这里:
http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=8171&mid=14&lang=en&pageId=75

Microchip公司的32位单片机没有28PIN的。最少是64pin
如有兴趣可以参考这里:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2870

⑹ 谁能给我解释一下以下的单片机程序

ORG 0000H
LJMP MAIN
ORG 0100H ;主程序地址
MAIN: JNB P1.0,P10 ;哪个键按下,显示哪个波形
JNB P1.1,P11
JNB P1.2,P12
JNB P1.3,P13
LJMP MAIN ;没有键按下返回主程序循环

P10: MOV R7,#00H ;方波波形,R7为特征码,放00,表示方波
LCALL SQU ;调用方波波形函数
LJMP MAIN ;调用完返回主程序循环
P11: MOV R7,#01H ;01表示SAW波
LCALL SAW
LJMP MAIN
P12: MOV R7,#02H
LCALL TRI
LJMP MAIN
P13: MOV R7,#03H
LCALL SIN
LJMP MAIN

SQU: JNB P1.1,N1 ;方波函数,如果有其他键按下
JNB P1.2,N2 ;退出程序
JNB P1.3,N3
LJMP SSQU ;没有键按下,到SSQU函数产生方波
N1: MOV R7,#01H ;哪个键按下就在R7中记下特征码
LJMP TC0
N2: MOV R7,#02H
LJMP TC0
N3: MOV R7,#03H
LJMP TC0
SSQU: CJNE R7,#00H,TC0 ;R7不为0退出

MOV R0,#00H ;R0中放00
MOV DPTR,#7FFFH ;这个应该是DAC0832的地址
K00: MOV A,#0FFH ;A中放FF,高电平
MOVX @DPTR,A ;A到0832转换
MOV P0,#0FFH ;这一句不怎么懂,感觉可以去掉
MOV P2,#0FFH ;值P2输入方式,P2是通过拨码按钮改
MOV A,P2 ;变数值,P2越大,波形周期越小
CPL A
MOV R3,A
L00: DEC R3
CJNE R3,#255,L00 ;这个循环改变周期
INC R0
INC R0
CJNE R0,#254,K00 ;高电平波循环127次
MOV R0,#00H
K01: MOV A,#00H ;低电平,跟高电平差不多
MOVX @DPTR,A
MOV P0,#00H
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A

L01: DEC R3
CJNE R3,#255,L01
INC R0
INC R0
CJNE R0,#254,K01
LJMP SQU ;显示完一个波形,回到方波函数开始,判断有无其他按键
TC0: RET ;返回主函数

SAW: JNB P1.0,N4 ;判断有无其他按键,同方波
JNB P1.2,N5
JNB P1.3,N6
LJMP SSAW
N4: MOV R7,#00H
LJMP TC1
N5: MOV R7,#02H
LJMP TC1
N6: MOV R7,#03H
LJMP TC1
SSAW: CJNE R7,#01H,TC1 ;特征码不是01 退出
MOV R0,#0FFH ;RO中放即将输出的值
MOV DPTR,#7FFFH
K10: MOV A,R0 ;锯齿波的每个值
MOVX @DPTR,A ;输出
MOV P0,R0
MOV P2,#0FFH ;通过P2改变周期
MOV A,P2
CPL A
MOV R3,A
L10: DEC R3
CJNE R3,#255,L10
INC R0 ;通过R0加1 来显示锯齿波的斜坡
CJNE R0,#255,K10 ;RO不等于255,循环锯齿波的每个值
LJMP SAW ;等于255,完成一个锯齿波周期,回锯齿波开始
TC1: RET ;退出

TRI: JNB P1.0,N7 ;三角波,类似于两个相反的锯齿波
JNB P1.1,N8
JNB P1.3,N9
LJMP TTRI
N7: MOV R7,#00H
LJMP TC2
N8: MOV R7,#01H
LJMP TC2
N9: MOV R7,#03H
LJMP TC2
TTRI: CJNE R7,#02H,TC2

MOV R0,#00H
MOV DPTR,#7FFFH
K20: MOV A,R0
MOVX @DPTR,A
MOV P0,R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L20: DEC R3
CJNE R3,#255,L20
INC R0
INC R0
CJNE R0,#254,K20
K21: MOV A,R0
MOVX @DPTR,A
MOV P0,R0
MOV P2,#0FFH
MOV A,P2
CPL A
MOV R3,A
L21: DEC R3
CJNE R3,#255,L21
DEC R0
DEC R0
CJNE R0,#0,K21
LJMP TRI
TC2: RET

SIN: JNB P1.0,N10 ;正弦波,是通过存储在代码区的一个数
JNB P1.1,N11 ;组来显示值的
JNB P1.2,N12
LJMP SSIN
N10: MOV R7,#00H
LJMP TC3
N11: MOV R7,#01H
LJMP TC3
N12: MOV R7,#02H
LJMP TC3
SSIN: CJNE R7,#03H,TC3

MOV R0,#00H
MOV DPTR,#7FFFH
K30: MOV A,R0
MOV DPTR,#TAB ;数组的地址
MOVC A,@A+DPTR ;把第R0个数放到A中
MOV DPTR,#7FFFH
MOVX @DPTR,A ;输出A
MOV P0,A
INC R0 ;RO加1
MOV P2,#0FFH ;周期
MOV A,P2
CPL A
MOV R3,A
L30: DEC R3
CJNE R3,#255,L30
CJNE R0,#255,K30 ;不等于255表示一个周期内,跳到K30
LJMP SIN ;等于表示显示完一个周期,到SIN开始
TC3: RET ;退出

TAB: DB ;定义正弦函数的各个值

看了你的图和你的程序,感觉你的图画得简单了一点,特别是0832地址,控制信号都没接,看起来还在调试,建议P2口做地址总线,这样,编程比较方便,你可以把P3口做周期.或者把P1口的其他口做控制总线,这样要对0832时序比较熟悉才行.
我平时是用C开发的,很少用汇编,如果有什么错误,可以共同探讨.

⑺ 大功率led调光

你可以参考开关电源形式的制作。这样可以用PWM调节亮度,如图所示~

⑻ 单片机PIC18f46k20, c语言程序求助

你while(1){}里面的程序执行是需要时间的,所以导致会闪,因为我不知道你几个子程序都是怎么写的所以无法详细说,不过基本是在显示子程序【oled_fixeds_2x("\nScore");是这个吧】之后加个延时就可以实现保持,不过如果你要完全不闪的那就在后面加个while(1);

⑼ 飞思卡尔单片机怎么命名的

8位:MC9S08,MC9RS08
16位:MC9S12
32位:MCF51,MCF52,一直到MCF54
DSP:MC56
ARM:K10,K20,一直到K70
PowPC:MPC5xx,MPC5xxx
等等

⑽ 51单片机网站

这是我根据自己的单片机设计的程序。请根据自己的需要修改各个参数。
org 0000H
ajmp begin
org 000BH;时钟中断0入口
mov tl0,#00000B;每次中断设初值
mov th0,#110B
ajmp time0;转跳到定时器0子程序
org 0040H
begin:;初始化部分
;设置变量RAM位置
x equ 50H
y equ 51H
z equ 52H
times equ 53H;此变量是中断次数,只有中断250次,才能积累2M个机器周期,即1秒钟,
rtimes equ 54H
wtimes1 equ 55H
wtimes2 equ 56H
;设置字型码
mov 60H,#005H;0
mov 61H,#0DDH;1
mov 62H,#046H;2
mov 63H,#054H;3
mov 64H,#09CH;4
mov 65H,#034H;5
mov 66H,#024H;6
mov 67H,#05DH;7
mov 68H,#004H;8
mov 69H,#014H;9
mov 5FH,#0FEH;-
;设置各LED位数字的RAM单元
n8 equ 71H
n7 equ 72H
n6 equ 73H
n5 equ 74H
n4 equ 75H
n3 equ 76H
n2 equ 77H
n1 equ 78H
;设置数位选线的位置
l8 bit p3.0
l7 bit p3.6
l6 bit p3.5
l5 bit p3.7
l4 bit p3.1
l3 bit p3.2
l2 bit p3.3
l1 bit p3.4
;设置定时器
setb ea
setb et0
mov th0,#11111111B
mov tl0,#11111B
clr tr0
mov p3,#00H
start:;r2-小时/r3-分钟/r4-秒/r1是按键的值,无按键时为10H
mov r2,#00
mov r3,#00
mov r4,#00
;第3、6位显示横线“-”
mov n6,5FH
mov n3,5FH
main:;主程序
mov r1,#10H;r1赋10H,没按键
acall chcut;调用r2-r4值转换为字型码并存入n1-n8的子程序
acall show;扫描一遍LED
acall key;调用键盘扫描子程序(此程序在51dz提供的程序上略加修改,保留注释)
jb tr0,walkstop;若在走时,不允许调时,跳到walkstop
cjne r1,#4,s2;若r1不是4则跳到下一个计时部分s2(下同)
acall hinc;调用小时加1子程序
acall chcut
acall longdelay;调用长延时子程序
ajmp main;此次设置完成,跳到主程序
s2:
cjne r1,#5,s3
acall minc;调用分钟加1子程序
acall chcut
acall longdelay
ajmp main;此次设置完成,跳到主程序
s3:
cjne r1,#6,s4
acall sinc;调用秒加1子程序
acall chcut
acall longdelay
ajmp main;此次设置完成,跳到主程序
s4:
cjne r1,#7,s5
acall hdec;调用小时减1子程序
acall chcut
acall longdelay
ajmp main;此次设置完成,跳到主程序
s5:
cjne r1,#8,s6
acall mdec;调用分钟减1子程序
acall chcut
acall longdelay
ajmp main;此次设置完成,跳到主程序
s6:
cjne r1,#9,s7
acall sdec;调用秒减1子程序
acall chcut
acall longdelay
ajmp main;此次设置完成,跳到主程序
s7:
cjne r1,#0,walkstop
mov r2,#0;时分秒清0
mov r3,#0H
mov r4,#0H
acall chcut
acall longdelay
ajmp main;此次设置完成,跳到主程序
walkstop:
cjne r1,#11,s0
acall stop;调用停止走时子程序
ajmp main;此次设置完成,跳到主程序
s0:
cjne r1,#12,main
acall walk;调用开始走时子程序
ajmp main;此次设置完成,跳到主程序

;以下是子程序
show:;扫描子程序
mov p1,n8;将第8位数字型码送上P1(下同)
setb l8;使第8位LED亮
acall delay;调用扫描延时子程序
clr l8;使第8位LED灭
mov p1,n7
setb l7
acall delay
clr l7
mov p1,n6
setb l6
acall delay
clr l6
mov p1,n5
setb l5
acall delay
clr l5
mov p1,n4
setb l4
acall delay
clr l4
mov p1,n3
setb l3
acall delay
clr l3
mov p1,n2
setb l2
acall delay
clr l2
mov p1,n1
setb l1
acall delay
clr l1
ret

hdec:
cjne r2,#0,hdnext;如果小时不是0就到hdnext
jnb tr0,hskip;小时是0且tr0是0即不在计时,到hskip
acall warning;小时是0且tr0是1即在计时,就调用报警子程序
clr tr0;停止计时
ret;返回
hskip:mov r2,#100;小时是0又不在计时,就让r2赋100,到下一些条减1后就是59
hdnext:dec r2;如果小时不是0就到这里减1
ret

mdec:;分钟减1子程序
cjne r3,#00,mdnext;如果分钟不是0就到minext
mov r3,#60;如果分钟是0就到变为60,到下一些条减1后就是59
acall hdec;从小时退位
mdnext:dec r3;如果分钟不是0就到这里减1
ret

sdec:;秒减1子程序
cjne r4,#00,sdnext;如果秒不是0就到sdnext
mov r4,#60;如果秒是0就到变为60,到下一些条减1后就是59
acall mdec;从分钟退位
sdnext:dec r4;如果秒不是0就到这里减1
ret

hinc:;小时加1子程序
cjne r2,#99,hinext;如果小时不是99就到hinext
mov r2,#255;如果小时是23就到变为255,到下一些条加1后就是0
hinext:inc r2;如果小时不是99就到这里加1
ret

minc:
cjne r3,#59,minext;如果分钟不是23就到minext
mov r3,#255;如果分钟是59就到变为255,到下一些条加1后就是0
acall hinc;分钟满,向小时进位
minext:inc r3;如果分钟不是59就到这里加1
ret

sinc:
cjne r4,#59,sinext;如果秒不是23就到sinext
mov r4,#255;如果是秒是59就到变为255,到下一些条加1后就是0
acall minc;秒满,向分钟进位
sinext:inc r4;如果秒不是59就到这里加1
ret

chcut:;将r2-r4值转换为字型码并存入n1-n8的子程序
mov a,r2;小时值送Acc(下同)
mov b,#10;B赋10
div ab;AB相除,此时A是小时的十位,B是小时的个位
mov n7,b;小时的个位B送第七位数
mov n8,a;小时的十位A送第八位数
mov a,r3;分解分钟到第四、五位数
mov b,#10
div ab
mov n4,b
mov n5,a
mov a,r4;分解秒到第一、二位数
mov b,#10
div ab
mov n1,b
mov n2,a
;以下开始转换各数位的二进制数到字型码(第6、3位是横线,由定时器控制有无)
mov a,n8;第8位数送Acc(下同)
add a,#60H;Acc加60H,此时Acc中值所指的RAM地址中为第8位数的字型码
mov r0,a;Acc送r0
mov n8,@r0;r0间接地址送回n8
mov a,n7;转换第7位数
add a,#60H
mov r0,a
mov n7,@r0
mov a,n5;转换第5位数
add a,#60H
mov r0,a
mov n5,@r0
mov a,n4;转换第4位数
add a,#60H
mov r0,a
mov n4,@r0
mov a,n2;转换第2位数
add a,#60H
mov r0,a
mov n2,@r0
mov a,n1;转换第1位数
add a,#60H
mov r0,a
mov n1,@r0
ret

longdelay:;长延时子程序
mov r6,#0FFH
reshow1:acall show
djnz r6,reshow1
mov r6,#0FFH
reshow2:acall show
djnz r6,reshow2
ret

delay:;扫描延时子程序
mov r5,#40H
djnz r5,$
ret
ringdelay:mov r5,#0FFH
djnz r5,$
ret

time0:;定时器0子程序
push Acc;Acc压栈
mov a,times;已中断次数送Acc
inc a;次数加1
mov times,a;加1后送回次数变量
cjne a,#250,gotoend;如果Acc不是250说明不到1秒,跳过加秒操作
mov times,#0;是250说明到1秒了,次数变量清0
mov n6,#0FFH;第3、6位清除横线“-”
mov n3,#0FFH
acall sdec;调用秒减1子程序
ajmp next;退出
gotoend:cjne a,#125,next;若Acc不是125就退出
mov n6,5FH;若是125就给第3、6位显示5FH中的字型码横线“-”
mov n3,5FH
next:pop Acc;退出时,从栈中弹出Acc
reti;此程序中次数在0-124就不显示横线,在125-250就显示横线

walk:;开始走时子程序
setb tr0
ret
stop:;停止走时子程序
clr tr0
ret

warning:;报警子程序
;放入-FINISH-字型码
mov n8,#0FEH;-
mov n7,#02EH;F
mov n6,#0DDH;I
mov n5,#00DH;N
mov n4,#0DDH;I
mov n3,#034H;S
mov n2,#08CH;H
mov n1,#0FEH;-
mov wtimes1,#50;设置蜂鸣次数50次
res1:mov wtimes2,#08FH;一次蜂鸣开始
res2:clr p2.0;从此句开始蜂鸣器发声
mov p3,#0H;LED熄灭
mov r6,#5;扫描延时子程序延时太短,要重复5次
redelay:acall delay;此2句重复5次
djnz r6,redelay
setb p2.0
djnz wtimes2,res2;转到RES2让蜂鸣器发声,转wtimes2次,即8FH次
mov p3,#0H;从此句开始蜂鸣器不发声
mov r7,#08FH;LED扫描次数
reshow:acall show
djnz r7,reshow;LED扫描08FH次,即不发声延时
djnz wtimes1,res1;到RES1开始一次蜂鸣
finish:acall show;这两句使LED显示,并进入死循环
ajmp finish
key:mov p0,#00001111b;上四位和下四位分别为行和列,所以送出高低电压检查有没有按键按下
jmp k10;跳到K10处开始扫描,这里可以改成其它条件转移指令来决定本次扫描是否要继续,例如减1为0转移或者位为1或0才转移,这主要用来增加功能,确认上一按键功能是否完成?是否相当于经过了延时?是否要封锁键盘?
goend:jmp kend;如果上面判断本次不执行键盘扫描程序,则立即转到程序尾部,不要浪费CPU的时间
k10:jb p0.0,k20;扫描正式开始,先检查列1四个键是否有键按下,如果没有,则跳到K20检查列2
k11:mov p0,#11101111b;列1有键按下时,P0.0变低,到底是那一个键按下?现在分别输出各行低电平
jb p0.0,k12;该行的键不按下时,p0.0为高电平,跳到到K12,检查其它的行
mov r1,#13;如果正好是这行的键按下,将寄存器R0写下1,表示1号键按下了
k12:mov p0,#11011111b
jb p0.0,k13
mov r1,#15;如果正好是这行的键按下,将寄存器R0写下2,表示2号键按下了
k13:mov p0,#10111111b
jb p0.0,k14
mov r1,#0;如果正好是这行的键按下,将寄存器R0写下3,表示3号键按下了
k14:mov p0,#01111111b
jb p0.0,kend;如果现在四个键都没有按下,可能按键松开或干扰,退出扫描(以后相同)
mov r1,#14;如果正好是这行的键按下,将寄存器R0写下4,表示4号键按下了
jmp kend;已经找到按下的键,跳到结尾吧

k20:jb p0.1,k30;列2检查为高电平再检查列3、4
k21:mov p0,#11101111b;列2有健按下时,P0.0会变低,到底是那一行的键按下呢?分别输出行的低电平
jb p0.1,k22;该行的键不按下时p0.0为高电平,跳到到K22,检查另外三行
mov r1,#12;如果正好是这行的键按下,将寄存器R0写下5,表示5号键按下了(以后相同,不再重复了)
k22:mov p0,#11011111b
jb p0.1,k23
mov r1,#9
k23:mov p0,#10111111b
jb p0.1,k24
mov r1,#8
k24:mov p0,#01111111b
jb p0.1,kend
mov r1,#7
jmp kend;已经找到按下的键,跳到结尾吧(以后相同,不要重复了)

k30:jb p0.2,k40
k31:mov p0,#11101111b
jb p0.2,k32
mov r1,#11
k32:mov p0,#11011111b
jb p0.2,k33
mov r1,#6
k33:mov p0,#10111111b
jb p0.2,k34
mov r1,#5
k34:mov p0,#01111111b
jb p0.2,kend
mov r1,#4
jmp kend

k40:jb p0.3,kend
k41:mov p0,#11101111b
jb p0.3,k42
mov r1,#10
k42:mov p0,#11011111b
jb p0.3,k43
mov r1,#3
k43:mov p0,#10111111b
jb p0.3,k44
mov r1,#2
k44:mov p0,#01111111b
jb p0.3,kend
mov r1,#1
kend: ret
end

阅读全文

与k20单片机相关的资料

热点内容
dvd光盘存储汉子算法 浏览:758
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:383
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163