⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单片机提高www.htm

📁 51单片机一些C语言程序包
💻 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>&nbsp; <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>&nbsp; <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>;倚天版用户: 飞扬工作室吴涛友情提供的倚天版套件演示遥控液晶! 
      按遥控器液晶将显示遥控器键值:非常感谢吴涛的热心支持!以下是它的来信:&nbsp;</FONT></P>
      <DIV align=left><PRE><FONT color=#0069d2>51c51,您好!
我是湖北省枝江市你们倚天板的客户,请尽快告知如何解决不能访问外部存储器的问题。
&nbsp;&nbsp;&nbsp;&nbsp;除了这个问题外,倚天板其他地方可以说很完美,我写出了第一个程序:检测并在LCD上
显示红外线遥控器的按键值,以方便在程序中使用家用VCD等其它未知键值的遥控器。
&nbsp;&nbsp;&nbsp;&nbsp;此程序可能有一点实用价值,为了表示对你们的支持,现附上源程序,如果你们认为还
行,可以将它放到贵站上公布。
&nbsp;&nbsp;&nbsp;&nbsp;我一直是做PC软件开发的,最近刚刚转到单片机这一块来,希望和你们交一个朋友,以
后能够有和你们合作的机会(软硬结合,呵呵)。
        致
礼!
&nbsp; 
        飞扬工作室&nbsp;吴涛
        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&nbsp;<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&nbsp;<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&nbsp;<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 + -