📄 单片机提高www.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0040)http://www.8951.com/test/test/6221ye.htm -->
<HTML><HEAD><TITLE>单片机提高WWW</TITLE><LINK href="单片机提高WWW.files/gpszx.css"
type=text/css rel=stylesheet><LINK href="../index.files/gpszx.css" type=text/css
rel=stylesheet>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2523" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY>
<DIV align=center>
<CENTER>
<TABLE height=356 cellSpacing=0 cellPadding=0 width=769 bgColor=#66ccff
borderColorLight=#000000 border=0>
<TBODY>
<TR>
<TD align=middle width=752 bgColor=#ffffff colSpan=5 height=356><FONT
font><FONT color=#ff0000>单片机提高</FONT><FONT color=#ff0000><IMG height=11
src="单片机提高WWW.files/gif091.gif" width=28 border=0></FONT><FONT
color=#454545>WWW.51C51.COM
自学单片机的网站:作中国单片机编程技术普及推广第一站!倚天一出宝刀屠龙</FONT></FONT><IMG height=100
src="单片机提高WWW.files/titou2.jpg" width=760 border=0> <FONT color=#454545
font><A href="http://www.8951.com/index.htm">返回主页 给我留言</A> <A
href="http://www.8951.com/jiaoxue.htm">单片机教学</A> <A
href="http://www.8951.com/tigao.htm">单片机提高</A> <A
href="http://www.8951.com/pinzhi.htm">品质技术</A> <A
href="http://www.8951.com/1000/WANGZHI.HTM">单片机网址</A> <A
href="http://www.8951.com/down/down.htm">软件下载</A> <A
href="http://www.8951.com/yejin/yejin.htm">学液晶显示</A> <A
href="http://www.8951.com/chanpin.htm">产品介绍</A> <A
href="http://www.8951.com/10/huikan.htm">如何购买</A></FONT>
<CENTER></CENTER>
<P align=left><FONT color=#454545 font>;倚天版用户: 飞扬工作室吴涛友情提供的倚天版套件演示遥控液晶!
按遥控器液晶将显示遥控器键值:非常感谢吴涛的热心支持!以下是它的来信: </FONT></P>
<DIV align=left><PRE><FONT color=#0069d2>51c51,您好!
我是湖北省枝江市你们倚天板的客户,请尽快告知如何解决不能访问外部存储器的问题。
除了这个问题外,倚天板其他地方可以说很完美,我写出了第一个程序:检测并在LCD上
显示红外线遥控器的按键值,以方便在程序中使用家用VCD等其它未知键值的遥控器。
此程序可能有一点实用价值,为了表示对你们的支持,现附上源程序,如果你们认为还
行,可以将它放到贵站上公布。
我一直是做PC软件开发的,最近刚刚转到单片机这一块来,希望和你们交一个朋友,以
后能够有和你们合作的机会(软硬结合,呵呵)。
致
礼!
飞扬工作室 吴涛
efly@vip.163.com
2003-11-16
<FONT size=2>;***************************************************************************
;* (程序转载请著明出处 ,未声明可适应本站腾龙/isp开发套件/倚天版开发套件 *
;* E-mail:sxj1974@163.com (51c51 test web) 51单片机学习网,自学单片机的网站 *
;* Create by :石学军 <A href="http://www.51c51.com/">http://www.51c51.com/</A> www.8951.com 更多例程请登陆网站 *
;***************************************************************************</FONT></FONT></PRE></DIV>
<P align=left><BR>RS_PIN equ p3.0<BR>RW_PIN equ p3.1<BR>E_PIN equ
p3.5<BR>PIN_6221 equ p3.7<BR><BR>XPOS equ 07eh<BR>YPOS equ
07fh<BR><BR>;------------------------------------------<BR><BR>using
0<BR><BR>org 0000H<BR>jmp start<BR><BR>code_str: db "Key code: ",
0<BR>wait_str: db "Please press key...", 0<BR><BR>start:<BR>lcall
clear_screen<BR>mov dptr, #wait_str<BR>lcall showtext<BR><BR>begin:<BR>mov
p3, #0ffH<BR>jnb PIN_6221, $ ;等待遥控信号出现<BR>mov r6, #10<BR>sb:<BR>lcall ys1
;调用882微秒延时子程序<BR>jb PIN_6221, begin
;延时882微秒后判断PIN_6221脚是否出现高电平如果有就退出解码程序<BR>djnz r6, sb
;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序<BR>;以上完成对遥控信号的9000微秒的初始低电平信号的识别。<BR>jnb
PIN_6221, $ ;等待高电平避开9毫秒低电平引导脉冲<BR>lcall ys2 ;延时4.74毫秒避开4.5毫秒的结果码<BR>mov
r1, #30H ;设定30h为起始ram区<BR>mov r2, #4 <BR>pp:<BR>mov r3,
#8<BR>jjjj:<BR>jnb PIN_6221, $ ;等待地址码第一位的高电平信号<BR>lcall ys1
;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态<BR>mov c, PIN_6221
;将PIN_6221引脚此时的电平状态0或1存入c中<BR>jnc uuu ;如果为0就跳转到uuu<BR>jb PIN_6221, $
;如果为1就等待高电平信号结束<BR>uuu:<BR>mov a, @r1 ;将r1中地址的给a<BR>rrc a
;将c中的值0或1移入a中的最低位<BR>mov @r1,a ;将a中的数暂时存放在r1中<BR>djnz r3, jjjj
;接收地址码的高8位<BR>inc r1 ;对r1中的值加1,换成下一个ram<BR>djnz r2, pp
;接收完16位地址码和8位数据码和8位数据反码,存放在30h/31h/32h/33h的ram中<BR><BR>;以下对代码是否正确和定义进行识别<BR>mov
a, 30H;比较高8位地址码<BR>xrl a, #00000000b ;判断1ah的值是否等于00000000,相等的话a为0<BR>jnz
exit;如果不相等说明解码失败退出解码程序<BR>mov a, 31H;比较低8位地址<BR>xrl a, #11111111b
;再判断高8位地址是否正确<BR>jnz exit;如果不相等说明解码失败退出解码程序<BR>lcall ys3<BR>mov a,
32H;比较数据码和数据反码是否正确?<BR>cpl a<BR>xrl a, 33H ;将1ch的值取反后和1dh比较
不同则无效丢弃,核对数据是否准确<BR>jnz exit;如果不相等说明解码失败退出解码程序<BR>lcall
ys3<BR><BR>;判断在118毫秒内是否有连发码<BR>aa:<BR>mov r1, #25<BR>xx:<BR>lcall
ys2<BR>jnb PIN_6221, hh; 跳转到判断连发代码是否正确的程序段<BR>djnz r1, xx<BR><BR>lcall
clear_screen<BR><BR>mov dptr, #code_str<BR>lcall showtext<BR><BR>mov r0,
#32h<BR>mov r7, #1<BR>lcall showhex<BR><BR>exit:<BR>sjmp
begin<BR><BR><BR>;连发码判断程序段-----------<BR>hh:<BR>mov r6,#4<BR>s:<BR>lcall
ys1 ;调用882微秒延时子程序<BR>jb PIN_6221, exit
;延时882微秒后判断PIN_6221脚是否出现高电平如果有就退出解码程序<BR>djnz r6, s
;重复4次,目的是确认连发码的低电平信号波形<BR>jnb PIN_6221, $ ;等待高电平<BR>sjmp
aa<BR><BR><BR>ys1:<BR>mov r4, #20 ;延时子程序1,精确延时882微秒<BR>d1:<BR>mov r5,
#20<BR>djnz r5, $<BR>djnz r4, d1<BR>ret<BR><BR><BR>ys2:<BR>mov r4, #10
;延时子程序2,精确延时4740微秒<BR>d2:<BR>mov r5, #235<BR>djnz r5, $<BR>djnz r4,
d2 <BR>ret<BR><BR><BR>ys3:<BR>mov r4, #2
;延时程序3,精确延时1000微秒<BR>d3:<BR>mov r5, #248<BR>djnz r5, $<BR>djnz r4,
d3<BR>ret<BR><BR><BR>showhex:<BR>; input:<BR>; r0: address r7: bytes
count<BR><BR>showhex_loop:<BR>push ar7<BR><BR>mov a, @r0<BR>swap a<BR>anl
a, #0fh<BR>clr c<BR>subb a, #0ah<BR>jc label2<BR>add a, #'A'<BR>sjmp
label1<BR>label2:<BR>add a, #(0ah + '0')<BR>label1:<BR>push ar0<BR>lcall
showchar<BR>pop ar0<BR><BR>mov a, @r0<BR>anl a, #0fh<BR>clr c<BR>subb a,
#0ah<BR>jc label4<BR>add a, #'a'<BR>sjmp label3<BR>label4:<BR>add a, #(0ah
+ '0')<BR>label3:<BR>push ar0<BR>lcall showchar<BR><BR>mov a, #'
'<BR>lcall showchar<BR>pop ar0<BR><BR>pop ar7<BR><BR>inc r0<BR>djnz r7,
showhex_loop<BR>ret<BR><BR><BR>showtext:<BR>; input:<BR>; dptr : text
buffer pointer<BR><BR>mov b, #0<BR><BR>loop_show:<BR>mov a, b<BR>movc a,
@a + dptr<BR>inc b<BR>jz showtext_quit<BR>lcall showchar<BR>sjmp
loop_show<BR><BR>showtext_quit:<BR>ret<BR><BR><BR>clear_screen:<BR>lcall
lcdreset<BR>mov XPOS, #0<BR>mov YPOS, #0<BR>ret<BR><BR>showchar:<BR>push
acc<BR>mov a, XPOS<BR>mov r7, YPOS<BR>cjne r7, #0, line2<BR>sjmp
setadr<BR>line2:<BR>add a, #040h<BR>setadr:<BR>orl a, #080h
;设置ddram地址<BR>lcall lcdwc<BR>pop acc<BR><BR>lcall lcdwd ;写字符<BR><BR>inc
XPOS<BR>mov a, XPOS<BR>cjne a, #10h, showchar_quit<BR>inc YPOS<BR>mov
XPOS, #0<BR>showchar_quit:<BR>ret<BR><BR><BR>lcdreset: ;初始化程序<BR>clr
E_PIN<BR>call delay5ms ;延时15ms<BR>call delay5ms<BR>call delay5ms<BR>mov
a,#38h ;显示模式设置(不检测忙信号)<BR>call lcdwcn ;共三次<BR>call delay5ms<BR>mov
a,#38h<BR>call lcdwcn<BR>call delay5ms<BR>mov a,#38h <BR>call
lcdwcn<BR><BR>mov a,#38h ;显示模式设置(以后均检测忙信号)<BR>call lcdwc<BR>mov a,#08h
;显示关闭<BR>call lcdwc<BR>mov a,#01h ;显示清屏<BR>call lcdwc<BR>mov a,#06h
;显示光标移动设置<BR>call lcdwc<BR>mov a,#0ch ;显示开及光标设置<BR>call
lcdwc<BR>ret<BR><BR>lcdwc: ;送控制字子程序(检测忙信号)<BR>call waitidle<BR><BR>lcdwcn:
;送控制字子程序(不检测忙信号)<BR>clr RS_PIN ;rs=0 rw=0 e=高脉冲<BR>clr RW_PIN<BR>mov
p1,a<BR>setb E_PIN<BR>nop<BR>clr E_PIN<BR>ret<BR><BR>lcdwd:
;写字符子程序<BR>call waitidle<BR>setb RS_PIN ;rs=1 rw=0 e=高脉冲<BR>clr
RW_PIN<BR>mov p1,a<BR>setb E_PIN<BR>nop<BR>clr
E_PIN<BR>ret<BR><BR>waitidle:<BR>push acc ;正常读写操作之前必须检测lcd控制器状态<BR>mov
p1,#0ffh<BR>clr RS_PIN ;rs=0 rw=1 e=高电平<BR>setb RW_PIN<BR>setb
E_PIN<BR>wtd_pa:<BR>nop ;db7: 0 lcd控制器空闲<BR>jb p1.7,wtd_pa ; 1
lcd控制器忙<BR>clr E_PIN<BR>pop acc<BR>ret<BR><BR>delay5ms:<BR>mov r1,#25
;延时子程序(5ms)<BR>dl5_pa:<BR>mov r2,#100<BR>djnz r2,$<BR>djnz
r1,dl5_pa<BR>ret<BR><BR>delay400ms:<BR>mov r0,#20
;延时子程序(400ms)<BR>dl4_pa:<BR>mov r1,#100<BR>dl4_pb:<BR>mov r2,#100<BR>djnz
r2,$<BR>djnz r1,dl4_pb<BR>djnz
r0,dl4_pa<BR>ret<BR><BR>end<BR><BR><BR>/*<BR>org 0<BR>ljmp
start<BR><BR>org 01bh<BR>ljmp time1<BR><BR>org 30h<BR><BR>start:<BR>mov
30h, 0<BR><BR>mov tmod, #060h<BR>mov tl1, #0ffh<BR>mov th1, #0ffh<BR>mov
ie, #088h<BR>setb tr1<BR>sjmp $<BR><BR>time1:<BR>inc 30h<BR>mov a,
30h<BR>xrl a, #0ffh<BR>cpl p1.0<BR>reti<BR><BR>showa:<BR>push acc<BR>lcall
to_showa<BR>pop acc<BR>ret<BR><BR>skiped:<BR>mov a, p1<BR>xrl a,
#0ffh<BR>inc a<BR>to_showa:<BR>xrl a, #0ffh<BR>mov p1,
a<BR><BR>waittime:<BR>; wait 1 second<BR>mov r2, #100<BR>loop1:<BR>mov r3,
#100<BR>loop2:<BR>mov r4, #50<BR>djnz r4, $<BR>djnz r3, loop2<BR>djnz r2,
loop1<BR>ret<BR><BR>tab: db
28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h<BR><BR>end<BR>*/<BR>/*<BR>mov
tmod, #20h<BR>mov tl1, #0f3h<BR>mov th1, #0f3h<BR>setb tr1<BR>mov scon,
#040h<BR>orl pcon, #080h<BR><BR>clr a<BR>mov p1,
#0ffh<BR><BR>loop:<BR>lcall showa<BR>mov sbuf, a<BR>jnb ti, $<BR>clr
ti<BR><BR>inc a<BR>sjmp
loop<BR>*/<BR><BR></P></TD></TR></TBODY></TABLE></DIV></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -