51单片机+ADC0809+LCD1602用汇编语言编程
51单片机+ADC0809+LCD1602用汇编语言编程,实现模拟信号经由0809芯片的转换,再由单片机的处理,在LCD1602上显示信号值的大小(此处要有数制的转换吧?...
51单片机+ADC0809+LCD1602用汇编语言编程,实现模拟信号经由0809芯片的转换,再由单片机的处理,在LCD1602上显示信号值的大小(此处要有数制的转换吧?),同时当信号值超过一定值(可假设该值大小)时,LCD1602上出现警告提示。应该不难吧?高分悬赏哦,大伙儿要给力啊,有引脚接法特殊的希望能给我备注一下
好吧,C的也可以,汇编的分更高哦 展开
好吧,C的也可以,汇编的分更高哦 展开
5个回答
展开全部
你把这两个程序合起来改下就差不多咯!时间忙 只能把自己以前学的子程序给你咯
; :1602显示
LCD_RS EQU P2.0
LCD_RW EQU P2.1
LCD_EN EQU P2.2
LCD_DATA EQU P0
;*******************************************************************
ORG 0000H
AJMP MAIN
ORG 0030H
;*******************************************************************
MAIN:
MOV SP,#60H
ACALL LCD_INIT ;LCD初始化
MAIN1:
ACALL CLR_LCD ;清LCD
MOV A,#90H ;在第一行第17列的位置
ACALL LCD_CMD
MOV DPTR,#LINE1 ;第一行字符串的起始地址送入DPTR。
ACALL WRITE
MOV A,#0D0H ;在第二行第17列的位置
ACALL LCD_CMD
MOV DPTR,#LINE2 ;第二行字符串的起始地址送入DPTR。
ACALL WRITE
MOV R3,#10H ;向左移动16格
LOOPA:
MOV A,#18H ;字符同时左移一格
ACALL LCD_CMD
MOV R5,#03H ;延时375MS
ACALL DELAY125MS
DJNZ R3,LOOPA
ACALL DELAY4 ;延时1.6s
ACALL DELAY4
MOV R4,#02H ;设置闪烁次数
ACALL FLASH ;开始闪烁
AJMP MAIN1
LINE1:
DB "YALONG:",00H
LINE2:
DB "welcome you!",00H
;***************************************************************
;LCD初始化设定子程序
;***************************************************************
LCD_INIT:
ACALL DELAY5MS ;延时15MS
ACALL DELAY5MS ;等待LCD电源稳定
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#08H ;显示关
ACALL LCD_CMD ;进行LCD忙检测
MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;进行LCD忙检测
MOV A,#0CH ;显示开,关光标
ACALL LCD_CMD ;进行LCD忙检测
RET
;***************************************************************
;清LCD子程序
;***************************************************************
CLR_LCD:
MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;进行LCD忙检测
RET
;***************************************************************
;写指令数据到LCD
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;***************************************************************
LCD_CMD:
CALL CHECKBUSY
LCD_CMD_NC:
CLR LCD_RS
CLR LCD_RW
MOV LCD_DATA,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
;写显示数据到LCD
;RS=H,RW=L,D0-D7=数据,E=高脉冲
;***************************************************************
LCD_WDATA:
ACALL CHECKBUSY
SETB LCD_RS
CLR LCD_RW
MOV LCD_DATA,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
;检测LCD控制器忙状态
;读数据
;RS=L,RW=H,E=H,输出:D0-D7=数据
;LCD_DATA.7=1,LCD忙,等待。LCD_DATA.7=0,LCD闲,可以进行读写操作。
;***************************************************************
CHECKBUSY:
PUSH ACC
MOV LCD_DATA,#0FFH
CLR LCD_RS
SETB LCD_RW
SETB LCD_EN
BUSYLOOP:
NOP
JB LCD_DATA.7,BUSYLOOP
CLR LCD_EN
POP ACC
RET
;***************************************************************
; 发送字符串子程序
;***************************************************************
WRITE:
PUSH ACC
WRITE1:
CLR A
MOVC A,@A+DPTR
JZ WRITE2
INC DPTR
ACALL LCD_WDATA
JMP WRITE1
WRITE2:
POP ACC
RET
;***************************************************************
;闪烁子程序
;***************************************************************
FLASH:
MOV A,#08H ;关闭显示
ACALL LCD_CMD
ACALL DELAY4
MOV A,#0CH ;开显示,关闭光标
ACALL LCD_CMD
ACALL DELAY4
DJNZ R4,FLASH
RET
;***************************************************************
;延时5MS子程序
;LCD初始化使用
;***************************************************************
DELAY5MS:
MOV R6,#10
DL1:
MOV R7,#249
DL2:
DJNZ R7,DL2
DJNZ R6,DL1
RET
;***************************************************************
;延时125MS子程序
;字符串移动时使用
;***************************************************************
DELAY125MS:
DL3:
MOV R6,#250
DL4:
MOV R7,#249
DL5:
DJNZ R7,DL5
DJNZ R6,DL4
DJNZ R5,DL3
RET
;***************************************************************
;延时800MS子程序
;闪烁时使用
;***************************************************************
DELAY4:
MOV R5,#40
DL6:
MOV R6,#100
DL7:
MOV R7,#100
DL8:
DJNZ R7,DL8
DJNZ R6,DL7
DJNZ R5,DL6
RET
;***************************************************************
ENd
; ADC0809子程序
; 引脚定义
ADC_EOC EQU P2.0
ADC_CS EQU P2.1
ADC_RD EQU P2.2
ADC_WR EQU P2.3
ADC_DATA EQU P0
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
SETB ADC_EOC
SETB ADC_WR
SETB ADC_RD
SETB ADC_CS
CLR ADC_CS ;START and ALE is H
CLR ADC_WR
NOP
NOP
NOP
SETB ADC_WR
SETB ADC_CS
NOP
JB ADC_EOC,$ ; JNB ADC_EOC,$
CLR ADC_CS
CLR ADC_RD
MOV ADC_DATA,#0FFH
MOV A,ADC_DATA
SETB ADC_RD
SETB ADC_CS
CJNE A,#00H,BELL
INC A
BELL:
MOV R5,A
BELL1: ACALL DELAY
DJNZ R5,BELL1
CPL P2.7
AJMP MAIN
DELAY:
MOV R7,#02H
D1:
MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,D1
RET
END
; :1602显示
LCD_RS EQU P2.0
LCD_RW EQU P2.1
LCD_EN EQU P2.2
LCD_DATA EQU P0
;*******************************************************************
ORG 0000H
AJMP MAIN
ORG 0030H
;*******************************************************************
MAIN:
MOV SP,#60H
ACALL LCD_INIT ;LCD初始化
MAIN1:
ACALL CLR_LCD ;清LCD
MOV A,#90H ;在第一行第17列的位置
ACALL LCD_CMD
MOV DPTR,#LINE1 ;第一行字符串的起始地址送入DPTR。
ACALL WRITE
MOV A,#0D0H ;在第二行第17列的位置
ACALL LCD_CMD
MOV DPTR,#LINE2 ;第二行字符串的起始地址送入DPTR。
ACALL WRITE
MOV R3,#10H ;向左移动16格
LOOPA:
MOV A,#18H ;字符同时左移一格
ACALL LCD_CMD
MOV R5,#03H ;延时375MS
ACALL DELAY125MS
DJNZ R3,LOOPA
ACALL DELAY4 ;延时1.6s
ACALL DELAY4
MOV R4,#02H ;设置闪烁次数
ACALL FLASH ;开始闪烁
AJMP MAIN1
LINE1:
DB "YALONG:",00H
LINE2:
DB "welcome you!",00H
;***************************************************************
;LCD初始化设定子程序
;***************************************************************
LCD_INIT:
ACALL DELAY5MS ;延时15MS
ACALL DELAY5MS ;等待LCD电源稳定
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#38H ;16*2显示,5*7点阵,8位数据
ACALL LCD_CMD_NC ;不进行LCD忙检测
ACALL DELAY5MS
MOV A,#08H ;显示关
ACALL LCD_CMD ;进行LCD忙检测
MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;进行LCD忙检测
MOV A,#0CH ;显示开,关光标
ACALL LCD_CMD ;进行LCD忙检测
RET
;***************************************************************
;清LCD子程序
;***************************************************************
CLR_LCD:
MOV A,#01H ;清除屏幕
ACALL LCD_CMD ;进行LCD忙检测
RET
;***************************************************************
;写指令数据到LCD
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;***************************************************************
LCD_CMD:
CALL CHECKBUSY
LCD_CMD_NC:
CLR LCD_RS
CLR LCD_RW
MOV LCD_DATA,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
;写显示数据到LCD
;RS=H,RW=L,D0-D7=数据,E=高脉冲
;***************************************************************
LCD_WDATA:
ACALL CHECKBUSY
SETB LCD_RS
CLR LCD_RW
MOV LCD_DATA,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
;检测LCD控制器忙状态
;读数据
;RS=L,RW=H,E=H,输出:D0-D7=数据
;LCD_DATA.7=1,LCD忙,等待。LCD_DATA.7=0,LCD闲,可以进行读写操作。
;***************************************************************
CHECKBUSY:
PUSH ACC
MOV LCD_DATA,#0FFH
CLR LCD_RS
SETB LCD_RW
SETB LCD_EN
BUSYLOOP:
NOP
JB LCD_DATA.7,BUSYLOOP
CLR LCD_EN
POP ACC
RET
;***************************************************************
; 发送字符串子程序
;***************************************************************
WRITE:
PUSH ACC
WRITE1:
CLR A
MOVC A,@A+DPTR
JZ WRITE2
INC DPTR
ACALL LCD_WDATA
JMP WRITE1
WRITE2:
POP ACC
RET
;***************************************************************
;闪烁子程序
;***************************************************************
FLASH:
MOV A,#08H ;关闭显示
ACALL LCD_CMD
ACALL DELAY4
MOV A,#0CH ;开显示,关闭光标
ACALL LCD_CMD
ACALL DELAY4
DJNZ R4,FLASH
RET
;***************************************************************
;延时5MS子程序
;LCD初始化使用
;***************************************************************
DELAY5MS:
MOV R6,#10
DL1:
MOV R7,#249
DL2:
DJNZ R7,DL2
DJNZ R6,DL1
RET
;***************************************************************
;延时125MS子程序
;字符串移动时使用
;***************************************************************
DELAY125MS:
DL3:
MOV R6,#250
DL4:
MOV R7,#249
DL5:
DJNZ R7,DL5
DJNZ R6,DL4
DJNZ R5,DL3
RET
;***************************************************************
;延时800MS子程序
;闪烁时使用
;***************************************************************
DELAY4:
MOV R5,#40
DL6:
MOV R6,#100
DL7:
MOV R7,#100
DL8:
DJNZ R7,DL8
DJNZ R6,DL7
DJNZ R5,DL6
RET
;***************************************************************
ENd
; ADC0809子程序
; 引脚定义
ADC_EOC EQU P2.0
ADC_CS EQU P2.1
ADC_RD EQU P2.2
ADC_WR EQU P2.3
ADC_DATA EQU P0
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
SETB ADC_EOC
SETB ADC_WR
SETB ADC_RD
SETB ADC_CS
CLR ADC_CS ;START and ALE is H
CLR ADC_WR
NOP
NOP
NOP
SETB ADC_WR
SETB ADC_CS
NOP
JB ADC_EOC,$ ; JNB ADC_EOC,$
CLR ADC_CS
CLR ADC_RD
MOV ADC_DATA,#0FFH
MOV A,ADC_DATA
SETB ADC_RD
SETB ADC_CS
CJNE A,#00H,BELL
INC A
BELL:
MOV R5,A
BELL1: ACALL DELAY
DJNZ R5,BELL1
CPL P2.7
AJMP MAIN
DELAY:
MOV R7,#02H
D1:
MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,D1
RET
END
更多追问追答
追问
你的ADC0809芯片和单片机怎么连的呢?
追答
不过要跟液晶显示的改下 冲突 换下单片机的IO口
ADC_EOC EQU P2.0
ADC_CS EQU P2.1
ADC_RD EQU P2.2
ADC_WR EQU P2.3
ADC_DATA EQU P0
展开全部
现在C编译器这么方便,谁还用汇编啊
要分能干吗?你这不是简单回答个问题,还要沉下心花上不少时间给你写程序。
要分能干吗?你这不是简单回答个问题,还要沉下心花上不少时间给你写程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数码管的倒是做过,是汇编的。不过现在谁还用这种0809?教材怎么还不与时俱进呀。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上周刚做出来~~~~C语言
看看我那个,室内可调式亮度控制系统
记得把单片机的端口占完了,呵呵~~
光敏电阻+ADC0809+数码管+PC机+继电器
看看我那个,室内可调式亮度控制系统
记得把单片机的端口占完了,呵呵~~
光敏电阻+ADC0809+数码管+PC机+继电器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,一分都没有,还高分悬赏!
网友采纳答案,基本正确。
但是,四年来,他都不采纳。
很明显,提问者,就是来骗人的。
他就是来耍弄百度和网友的。
建议百度知道,关闭这个题目,不要再让他打脸。
网友采纳答案,基本正确。
但是,四年来,他都不采纳。
很明显,提问者,就是来骗人的。
他就是来耍弄百度和网友的。
建议百度知道,关闭这个题目,不要再让他打脸。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询