论坛风格切换切换到宽版
  • 63280阅读
  • 338回复

GPS OEM板+单片机+液晶显示 [复制链接]

上一主题 下一主题
离线bd7rf
发帖
10148
只看该作者 20楼 发表于: 2006-11-14
'
请教一下,我也想照着做一个,板上晶振是11.5902是哪个板上的晶振?是不是我把这个程序写到89c51里,照着图接好数据线就行了.
'
晶振是11.0592,是单片机的板上的.上面那个图是简化,还有几个外围零件要加上的.
离线dzyj
发帖
2275
只看该作者 21楼 发表于: 2006-11-14
'
晶振是11.0592,是单片机的板上的.上面那个图是简化,还有几个外围零件要加上的.
'
明白一点儿了,那你有单片机的板图吗?想了解一下,看看怎么弄,好弄的话,我自己也做一个.谢谢.
离线warason
只看该作者 22楼 发表于: 2006-11-15
有没有用keilC编写的中断程序和显示程序啊55555555555555
有没有用keilc编写的中断程序和显示程序啊55555555555555
离线BG8WJ
发帖
166
只看该作者 23楼 发表于: 2006-11-17
这个程序太复杂拉!这个非常简单啊。你是用中断方式接收信息,在构造个数组么完全可以啊!具体可以参考 求实科技的 单片机典型模块设计 一书!
离线warason
只看该作者 24楼 发表于: 2006-11-18
楼上的有没有电子版本推荐?
离线warason
只看该作者 25楼 发表于: 2006-11-21
中断程序还是进不去啊,
为什么?
离线loverslcn
发帖
621
只看该作者 26楼 发表于: 2006-11-21
呵呵,别着急,我给你写了一下,可能有部分错误,但是算法基本上就是这样的:
  1. #define data_end '*'
  2. #define cmd_len 7
  3. const char cmd = "$gpgga,";
  4. uchar pcmd = 0;
  5. sbit cmdready = 0;
  6. sbit datafull = 0;
  7. void serial() interrupt 4
  8. {
  9.   uchar tmp;
  10.  
  11.   ri = 0;
  12.   tmp = sbuf;
  13.  
  14.   if( cmdready && !datafull ){   //命令正确,接收数据
  15.     if( tmp == data_end ){
  16.         cmdready = 0;
  17.         datafull = 1;
  18.         //缓冲中已有全部数据,主程序可判断datafull,读出缓冲区数据,并清空缓冲区,置datafull为0,
  19.     }
  20.     //接收数据放入缓冲, adding
  21.   }
  22.   else{
  23.     if( tmp == cmd[pcmd] ){   //接收到正确命令
  24.         pcmd++;
  25.         if( pcmd >= cmd_len ){
  26.           pcmd = 0;
  27.           cmdready = 1;
  28.         }
  29.     }
  30.     else{
  31.         pcmd = 0;
  32.     }
  33.   }
  34. }
离线loverslcn
发帖
621
只看该作者 27楼 发表于: 2006-11-21
至于为什么进不了中断,我想你应该先从硬件下手,然后写一个简单的中断处理函数,一步一步排出法找出问题.最后才是逻辑问题.
离线warason
只看该作者 28楼 发表于: 2006-11-23
嗯嗯,是硬件问题,很容易忽略得一个问题,我为51焊接在面包板上面的底座rxd脚接触不良,晕死,
用了一个简单的串行中断接收发送程序测试通过,ok!!!!

现在要写一个能够显示gps数据的函数了!!!!
应该是什么样子的呐????
离线bd7rf
发帖
10148
只看该作者 29楼 发表于: 2006-11-24
'
嗯嗯,是硬件问题,很容易忽略得一个问题,我为51焊接在面包板上面的底座rxd脚接触不良,晕死,
用了一个简单的串行中断接收发送程序测试通过,ok!!!!
现在要写一个能够显示gps数据的函数了!!!!
应该是什么样子的呐????
'
看我上面的程序,那就是一个。可以在1602显示位置和时间。我在程序加了些注解,希望对你有帮助。
离线ding
发帖
3484
只看该作者 30楼 发表于: 2006-11-27
'
看我上面的程序,那就是一个。可以在1602显示位置和时间。我在程序加了些注解,希望对你有帮助。
'
这个汇编,我编译通过!但是我没有接gps,是不是1602没有显示的?!
离线bd7rf
发帖
10148
只看该作者 31楼 发表于: 2006-11-28
'
这个汇编,我编译通过!但是我没有接gps,是不是1602没有显示的?!
'
是的,清完屏就等数据了.
离线BG9TL
发帖
3637
只看该作者 32楼 发表于: 2006-12-02
顶!!!!!!!!!!!!!!
离线ding
发帖
3484
只看该作者 33楼 发表于: 2006-12-02
'
是的,清完屏就等数据了.
'
在等待数据的时候,最好写入一个"数据读取中"当定位了....就显示正常数据?!
怎么样.....
离线bd7rf
发帖
10148
只看该作者 34楼 发表于: 2006-12-03
'
在等待数据的时候,最好写入一个"数据读取中"当定位了....就显示正常数据?!
怎么样.....
'
完全可以啊.
离线ding
发帖
3484
只看该作者 35楼 发表于: 2006-12-03
'
完全可以啊.
'
写一个贴上来了,,,我试试看...........
离线bd7rf
发帖
10148
只看该作者 36楼 发表于: 2006-12-03
'
写一个贴上来了,,,我试试看...........
'
把前面的程序改一下就可以,加红字部分.
离线ding
发帖
3484
只看该作者 37楼 发表于: 2006-12-04
'
把前面的程序改一下就可以,加红字部分.
'
谢谢了..............
离线ding
发帖
3484
只看该作者 38楼 发表于: 2006-12-04
;来了,请大家多指教。22.1184m,89c51. 1602.
;用11.0592的话,改f4为fd就行了
;mov tmod,#20h
;mov th1,#0f4h
;mov tl1,#0f4h
;mov pcon,#00h
;我用是是me300a+学习板,11.0592晶体,89s52,1602
;lcd用的口为rs=p2.0,rw=2.1,en=2.2,输出口为p0.0-p0.7

rs equ p2.0
rw equ p2.1
e equ p2.2

org 00100h
mov p0,#00000001b;清屏
acall enable            ;这个子程序,是不是搞丢了,我就加了一个?
acall enable1
mov p0,#38h
acall enable
mov p0,#0ch
acall enable

clr ea ;关中断
mov tmod,#20h
mov th1,#0fdh;
mov tl1,#0fdh;设置速率
mov pcon,#00h
setb tr1
mov scon,#70h
mov r0,#10h

call nosignal;lcd显示字符

read:
call rec
cjne a,#04dh,read;'m'?;判断是否m,我只判断m和c
call rec
cjne a,#043h,read;'c'?
call rec
mov r0,#10h;数据储存起始地址
mov r1,#028h;数据位数
store: ;储存
call rec
mov @r0,a
inc r0
djnz r1,store

mov p0,#8ah
acall enable
mov r1,#06h
mov r0,#10h
display:
mov a,@r0;提取数据
call write;写往1602
inc r0
djnz r1,display
mov r0,#019h
mov r1,#09h
mov p0,#080h
acall enable
display1:
mov a,@r0
call write
inc r0
djnz r1,display1

mov r0,#026h
mov r1,#09h
mov p0,#0c0h
acall enable
display2:
mov a,@r0
call write
inc r0
djnz r1,display2
jmp read

rec:
jnb ri,$
clr ri
mov a,sbuf
;ret enable:     这行什么意思
clr rs
clr rw
clr e
acall delay1
setb e
ret

;=============================
;这一子程序我加的
enable:
clr rs
clr rw
clr e
acall delay
setb e
ret
;=============================

enable1:
clr rs
clr rw
clr e
acall delay
setb e
ret

write:
mov p0,a
setb rs
clr rw
clr e
call delay
setb e
ret

delay:
mov p0,#0ffh
clr rs
setb rw
clr e
nop
setb e
jb p0.7,delay
ret

delay1:
mov r7,#255
d1:mov r6,#255
d2:djnz r6,d2
djnz r7,d1
ret

;lcd 显示字符子程序
nosignal:
mov p0,#080h;ïôê¾î»öã
acall enable
mov r2,#0h
mov dptr,#nosig
back:
mov a,r2
movc a,@a+dptr
call write
inc r2
cjne a,#6ch,back
ret

nosig:db 4eh,6fh,20h,53h,69h,67h,6eh,61h,6ch
; n o s i g n a lend
end

请看注释,好像有问题!!!!!!!!
离线bd7rf
发帖
10148
只看该作者 39楼 发表于: 2006-12-04
应该没问题了.