搜索
bottom↓
楼主: chchg

发个刚做的自行车测速、里程计!

  [复制链接]

出0入0汤圆

发表于 2011-9-10 10:01:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-9-11 19:37:10 | 显示全部楼层
自己以前也做了一个  不过没楼主的好!!顶一个!

出0入0汤圆

发表于 2011-9-11 22:31:55 | 显示全部楼层
mark   很好的教程 可以学了

出0入0汤圆

发表于 2011-9-12 09:27:03 | 显示全部楼层
回复【楼主位】chchg
-----------------------------------------------------------------------

出0入0汤圆

发表于 2011-9-12 20:04:05 | 显示全部楼层
谢谢啊

出0入0汤圆

发表于 2011-10-21 12:45:25 | 显示全部楼层
真是个好东西呀,强烈支持一下,把屏幕换成5110就更好了,显示成汉字的,程序改动的多么?楼主

出0入0汤圆

发表于 2011-10-21 13:57:26 | 显示全部楼层
回复【1楼】airwolf09921
-----------------------------------------------------------------------

可用红外对管,如一圈是N米,有X个车条,一分钟被挡了多少Y次,速度V=(N*Y)\X

出0入0汤圆

发表于 2011-10-21 13:57:59 | 显示全部楼层
回复【1楼】airwolf09921
-----------------------------------------------------------------------

可用红外对管,如一圈是N米,有X个车条,一分钟被挡了多少Y次,速度V=(N*Y)\X

出0入0汤圆

发表于 2011-10-21 16:08:09 | 显示全部楼层
学习了,我也爱车,到时候也去做一个

出0入0汤圆

发表于 2011-10-28 20:16:44 | 显示全部楼层
学习了,尝试做一下。

出0入0汤圆

发表于 2011-10-28 21:21:50 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-10-28 21:46:36 | 显示全部楼层
!!!!!!!!!!!!!!!!!!!!11!!!      1!!!!!!!!!!!!!!!!!        111111111111111111        11111     11111
!!!!!!!!!!!!!!!!!!!11!!!!      !!!!!!!!!!!!!!!!!!       11111111111111111111       11111    11111  
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111   11111
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111111111  
!!!!!     !!!!!     !!!!!      !!!!!!!!!!!!!!!!!!       111111111111111111         1111111111
!!!!!     !!!!!     !!!!!      !!!!!!!!!!!!!!!!!!       11111111111111111111       1111111111
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111   11111  
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111     11111
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111      11111

出0入0汤圆

发表于 2011-10-28 21:46:57 | 显示全部楼层
!!!!!!!!!!!!!!!!!!!!11!!!      1!!!!!!!!!!!!!!!!!        111111111111111111        11111     11111
!!!!!!!!!!!!!!!!!!!11!!!!      !!!!!!!!!!!!!!!!!!       11111111111111111111       11111    11111  
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111   11111
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111111111  
!!!!!     !!!!!     !!!!!      !!!!!!!!!!!!!!!!!!       111111111111111111         1111111111
!!!!!     !!!!!     !!!!!      !!!!!!!!!!!!!!!!!!       11111111111111111111       1111111111
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111   11111  
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111     11111
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111      11111

出0入0汤圆

发表于 2011-10-28 22:18:48 | 显示全部楼层
以前也想做过这东西,没做成,这下好了,可以再试试了,谢谢LZ

出0入0汤圆

发表于 2011-10-29 00:33:07 | 显示全部楼层
我也给自己的“小毛驴”做了一个。用半年了吧,代码写的有些问题,其它都还比较准,一直没时间改,不敢拿出来献丑。
实车调试ourdev_689753ELDRWL.JPG(文件大小:3.19M,只有400K以内的图片才能直接显示) (原文件名:DSC01216.JPG)
代码调试ourdev_689754IJVQT0.JPG(文件大小:3.75M,只有400K以内的图片才能直接显示) (原文件名:DSC01206.JPG)

出0入0汤圆

发表于 2011-10-29 11:45:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-29 12:40:40 | 显示全部楼层
MARK 一下,电池升压

出0入0汤圆

发表于 2011-10-29 12:41:18 | 显示全部楼层

出0入0汤圆

发表于 2011-10-29 13:29:33 | 显示全部楼层
受教了,MARK一下。

出0入0汤圆

发表于 2011-10-29 21:51:02 | 显示全部楼层
不错 一直想做个

出0入0汤圆

发表于 2011-10-29 23:55:04 | 显示全部楼层
顶楼主

出0入0汤圆

发表于 2011-11-3 14:42:25 | 显示全部楼层
电池怎么充电啊?

出0入0汤圆

发表于 2011-11-3 17:25:08 | 显示全部楼层
楼主做的真好!实在给本人很大鼓舞去做些身边使用的东西

出0入0汤圆

发表于 2011-11-3 20:38:42 | 显示全部楼层
回复【24楼】whitecloud588  
哦,原来只有我自己能看。
问一下,楼主骑车最快速度多少?我记得当时接近25km/h。可惜我的屏后来烧坏了
-----------------------------------------------------------------------

大概40多吧。八一桥上

出0入0汤圆

发表于 2011-11-3 23:45:34 | 显示全部楼层
我也做了个,骑车速度最快可以达到38公里/小时,下坡时才有。在平路时,最快踩到30公里/小时。平时比较轻松的骑车是15公里/小时。我的车不争气,最近踩到25公里/小时的时候,链条老是掉,还未来了级修理。

出0入0汤圆

发表于 2011-11-5 02:25:29 | 显示全部楼层
围观、、、

出0入0汤圆

发表于 2011-11-5 11:27:58 | 显示全部楼层
楼主很强大,学习一下!

出0入0汤圆

发表于 2011-11-5 20:09:14 | 显示全部楼层
好东西 值得好好看

出0入0汤圆

发表于 2011-11-5 22:51:52 | 显示全部楼层
想做个在摩托上玩玩,不知到显示数值尾数跳动厉害不

出0入0汤圆

发表于 2011-11-6 09:14:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-6 12:14:02 | 显示全部楼层
标记下,以后也做一个~

出0入0汤圆

发表于 2011-11-7 13:43:43 | 显示全部楼层
MARK,有空看看

出0入0汤圆

发表于 2011-11-7 23:11:54 | 显示全部楼层
不错,看看怎么样

出0入0汤圆

发表于 2011-11-7 23:13:19 | 显示全部楼层
顶楼主

出0入0汤圆

发表于 2011-11-8 16:50:26 | 显示全部楼层
mark一下,我也喜欢车,有空也做一个玩玩。。

出0入0汤圆

发表于 2011-11-10 18:54:31 | 显示全部楼层
好东西啊 非常得有参考价值。想请教楼主,要做成摩托车转速表 电路如何改,程序该怎样写,因是新手望赐教 谢谢

出0入0汤圆

发表于 2011-11-13 22:18:40 | 显示全部楼层
这么强大的小东东,顶一下,闲了自己也仿制一个学习一下。

顺便测试一下我的小宝马(自行车)最高速度有多快。

出0入0汤圆

发表于 2011-11-13 22:26:47 | 显示全部楼层
回复【320楼】cos12a  
我也做了个,骑车速度最快可以达到38公里/小时,下坡时才有。在平路时,最快踩到30公里/小时。平时比较轻松的骑车是15公里/小时。我的车不争气,最近踩到25公里/小时的时候,链条老是掉,还未来了级修理。
-----------------------------------------------------------------------

更换一条新链条就好了,我的也是同样的毛病,花了10元刚换了新链条,可以超速了。

出0入0汤圆

发表于 2011-11-13 23:37:54 | 显示全部楼层
不错!!

出0入0汤圆

发表于 2011-11-14 00:06:00 | 显示全部楼层
MARK!

出0入0汤圆

发表于 2011-11-14 08:49:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-14 13:09:40 | 显示全部楼层
mark,  复制中。。。。。

出0入0汤圆

发表于 2011-11-19 17:53:28 | 显示全部楼层
学习了,上班了就去做个

出0入0汤圆

发表于 2011-11-21 21:38:25 | 显示全部楼层
想克隆一个LED版本的,请问楼主图片上那些三极管的作用是什么?是对输入信号的波形整形吗?

出0入0汤圆

发表于 2011-11-22 13:33:21 | 显示全部楼层
强大

出0入0汤圆

发表于 2011-11-23 09:03:24 | 显示全部楼层
这么强大的小东东,顶一下,闲了自己也仿制一个学习一下。

出0入85汤圆

发表于 2011-11-23 16:07:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-23 16:46:02 | 显示全部楼层
顶一下,太牛了

出0入0汤圆

发表于 2011-11-23 18:51:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-24 10:53:53 | 显示全部楼层
!!!!!!!!!!!!!!!!!!!!11!!!      1!!!!!!!!!!!!!!!!!        111111111111111111        11111     11111  
!!!!!!!!!!!!!!!!!!!11!!!!      !!!!!!!!!!!!!!!!!!       11111111111111111111       11111    11111   
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111   11111  
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111111111   
!!!!!     !!!!!     !!!!!      !!!!!!!!!!!!!!!!!!       111111111111111111         1111111111  
!!!!!     !!!!!     !!!!!      !!!!!!!!!!!!!!!!!!       11111111111111111111       1111111111  
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111   11111   
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111     11111  
!!!!!     !!!!!     !!!!!      !!!!!        !!!!!       11111          11111       11111      11111
谢谢楼主分享

出0入0汤圆

发表于 2011-11-24 11:07:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-26 11:57:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-28 13:28:55 | 显示全部楼层
回复【7楼】chchg  
-----------------------------------------------------------------------

可以不可帮忙整一个驱动电机?

出0入0汤圆

发表于 2011-11-28 15:18:37 | 显示全部楼层
学习中,好东东!

出0入0汤圆

发表于 2011-11-28 21:28:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-30 10:40:05 | 显示全部楼层
猛人啊

出0入0汤圆

发表于 2011-12-2 22:59:30 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-12-2 23:59:54 | 显示全部楼层
mark
谢谢分享

出0入0汤圆

发表于 2011-12-3 17:10:18 | 显示全部楼层
什么时候自己也做一个玩玩。

出0入0汤圆

发表于 2011-12-5 09:21:13 | 显示全部楼层
非常感谢楼主的无私奉献

出0入0汤圆

发表于 2011-12-6 10:38:02 | 显示全部楼层
mark,某年电子大赛的题目!

出0入0汤圆

发表于 2011-12-18 21:29:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-19 15:42:03 | 显示全部楼层
可以买钕铁硼磁铁,磁性很强。距离可以增大不少。

出0入0汤圆

发表于 2011-12-19 21:46:39 | 显示全部楼层
很实用,留印!

出0入0汤圆

发表于 2011-12-20 02:29:23 | 显示全部楼层
mark 准备用低功耗的单片机比如MSP430做一个呢

出0入0汤圆

发表于 2011-12-20 11:32:41 | 显示全部楼层
一年前上大一刚买自行车的时候想自己做一个, 当时不会,
现在已经会了, 可是早已经买了一个里程计了...

出0入0汤圆

发表于 2011-12-20 12:33:32 | 显示全部楼层
马克

出0入0汤圆

发表于 2011-12-20 12:34:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-21 15:30:19 | 显示全部楼层
喜欢

出0入0汤圆

发表于 2011-12-21 17:12:00 | 显示全部楼层
好厉害哦

出0入0汤圆

发表于 2011-12-21 17:38:59 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2011-12-21 21:35:54 | 显示全部楼层
谢谢楼主!强人啊!!

出0入0汤圆

发表于 2011-12-23 12:08:20 | 显示全部楼层
回复【楼主位】chchg
-----------------------------------------------------------------------

顶一个

出0入0汤圆

发表于 2012-1-3 19:55:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-3 21:41:43 | 显示全部楼层
回复【楼主位】chchg
-----------------------------------------------------------------------

:-O!!!!!!!!!!!!!学习了

出0入0汤圆

发表于 2012-1-3 21:44:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-13 11:39:22 | 显示全部楼层
回复【309楼】mcu_007 自得悠然
我也给自己的“小毛驴”做了一个。用半年了吧,代码写的有些问题,其它都还比较准,一直没时间改,不敢拿出来献丑。
实车调试
代码调试

-----------------------------------------------------------------------


(原文件名:QQ截图20120213113715.jpg)

原来的表被覆盖了。。。哈哈!

出0入0汤圆

发表于 2012-2-13 12:25:20 | 显示全部楼层
学习!

出0入0汤圆

发表于 2012-2-13 19:26:59 | 显示全部楼层
学习了,有时间做一个 谢谢。

出0入0汤圆

发表于 2012-2-14 12:18:00 | 显示全部楼层
顶就一个字,我只说一次

出0入0汤圆

发表于 2012-2-14 15:35:39 | 显示全部楼层

出0入0汤圆

发表于 2012-2-14 19:34:11 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2012-2-16 21:29:41 | 显示全部楼层
mark

出110入109汤圆

发表于 2012-2-17 01:01:41 | 显示全部楼层
Mark先

出0入0汤圆

发表于 2012-2-24 18:26:48 | 显示全部楼层
目标与方向就是这样产生的!吼吼吼

出0入0汤圆

发表于 2012-2-29 16:03:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-29 16:39:02 | 显示全部楼层
不错

出0入0汤圆

发表于 2012-2-29 19:34:26 | 显示全部楼层
很好

出0入0汤圆

发表于 2012-3-2 06:54:12 | 显示全部楼层
很强大,准备仿制用于自己的摩托车上,楼主如果看到,还请提示如何改程序适合摩托用。

出0入0汤圆

发表于 2012-3-3 10:49:25 | 显示全部楼层
创意不错

出0入0汤圆

发表于 2012-4-19 16:46:04 | 显示全部楼层
最近也想做一个, MARK一下。

出0入0汤圆

发表于 2012-4-19 22:17:06 | 显示全部楼层
谢谢分享

出145入215汤圆

发表于 2012-4-21 16:16:47 | 显示全部楼层
谢谢楼主,我也想做一个!

出0入0汤圆

发表于 2012-4-22 12:09:28 来自手机 | 显示全部楼层
谢谢楼主分享,辛苦了!

出0入0汤圆

发表于 2012-4-22 12:11:28 | 显示全部楼层
  顶一下      

出0入0汤圆

发表于 2012-5-4 16:22:56 | 显示全部楼层
楼主要是加个实时时钟芯片,把存储芯片换成大容量的,就可以做状态简单记录仪了。

出0入0汤圆

发表于 2012-5-4 18:28:14 | 显示全部楼层
chchg 发表于 2010-3-12 23:54
//下面是整理过,简化过的程序!
// LCM16 2*16字符         第一行0x80 第二行0xc0
// 模式(km/h)    0 0     47: ...

l楼主的这个强,顶一个,但是这样有点不好下载,帮楼主整理了一下,方便需用的人下载.
  1. //下面是整理过,简化过的程序!
  2. // LCM16 2*16字符         第一行0x80 第二行0xc0
  3. // 模式(km/h)    0 0     47:59:59
  4. //               99.9kh  999.99km
  5. // 24C02存储 0x00-0x03: 99 99 99 99 cm
  6. // 0x2e,0x6b,0x6d,0x05,0x06,0x07,0x20,0x3d   0x30-0x39开始是数字0-9
  7. //   . ,  k ,  m ,         ,/h ,black, =
  8. //------头--------------------------------------------------------
  9. //申明
  10. #include "REG2051.H"
  11. #include "INTRINS.H"
  12. #define uchar unsigned char
  13. #define uint  unsigned int

  14. //轮周长1.98m及各位值 0.5ms取 1.98*(1/0.5)*1000*10
  15. #define girth   39600
  16. #define girth_h 1
  17. #define girth_l 98

  18. //单片机IO连接
  19. #define LCM16_IO P1
  20. sbit LCM16_RS = P3^0;
  21. sbit LCM16_RW = P3^1;
  22. sbit LCM16_EN = P3^7;
  23. sbit AT24_SDA = P3^4;
  24. sbit AT24_SCL = P3^5;
  25. sbit KEY  = P3^3;
  26. sbit SIGN = P3^2;
  27. //液晶驱动函数定义
  28. void LCM_WR_CMD(uchar);   //写操作命令
  29. void LCM_WR_DAT(uchar);   //写数据
  30. void LCM_WR(uchar,uchar); //输出一个字符
  31. void LCM_WR_STR(uchar,uchar*);//输出字符串
  32. void LCM_CUSTOM_CHAR(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);//自定义字符
  33. //存储IC驱动函数定义
  34. uchar AT24_RD(uchar);       //从24c02的地址address中读取一个字节数据
  35. void  AT24_WR(uchar,uchar); //向24c02的address地址中写入一字节数据info
  36. //函数定义
  37. void _init(void);    //软硬件初始化
  38. void _nus(uchar);    //us延时
  39. void _nms(uchar);    //ms延时
  40. void mile_show(void); //距离数据输出
  41. void AT24_WRAMD(void);//24c02写入RAM数据
  42. //变量定义
  43. uchar d_var[4]={0,0,0,0};//距离的cm值0x00-0x03双数计算
  44. uint  timej;  //时间周期个数
  45. uint  int_tp; //周期个数传递
  46. bit   flg_cal;//允许计算
  47. uchar sj;     //s指示计数
  48. uchar svj;    //save
  49. uchar timei;  //外中断次数
  50. uchar t_var[3]={0,0,0};//时间变量
  51. uchar times;  //1s循环计数
  52. bit   flg_s;  //s标志位

  53. //---- 中断 -----------------------------------------------------
  54. //500us周期定时函数
  55. void T0_SEV(void) interrupt 1 using 1
  56. {
  57.         TR0 = 0; ET0 = 0; TH0 = 0xff; TL0 = 0x5a;  //计时初值        
  58.         timej++; //超过3.5S无中断相应,即判断速度为0,则最低速度2.04km/h
  59.         if(timej == 7000){ int_tp = 7000; timej = 0; flg_cal = 1;}
  60.         ET0 = 1; TR0 = 1;
  61. }
  62. //外部中断函数
  63. void Int0_SEV(void) interrupt 0 using 0
  64. {        
  65.         EX0 = 0;
  66.         int_tp = timej; timej = 0; flg_cal = 1;//读取计数周期数
  67.         EX0 = 1;
  68. }
  69. //100ms周期定时函数
  70. void T1_SEV(void) interrupt 3 using 3
  71. {
  72.         TR1 = 0; ET1 = 0; TH1 = 0x7d; TL1 = 0xcb;  //计时初值        
  73.         if(times>0) times--;//s计时 1s
  74.         else{
  75.                 times=9; flg_s = 1;
  76.                 t_var[2]++;
  77.                 if(t_var[2]==60){
  78.                         t_var[2]=0; t_var[1]++;
  79.                         if(t_var[1]==60){
  80.                                 t_var[1]=0; t_var[0]++;
  81.                                 if(t_var[0]==48)t_var[0]=0;
  82.                         }
  83.                 }        
  84.         }
  85.         if(sj>0) sj--;//s计数递减 800ms
  86.         if(svj>0) svj--;        
  87.         ET1 = 1; TR1 = 1;
  88. }

  89. //------主体--------------------------------------------------------
  90. //主函数                  
  91. void main()
  92. {
  93.         _init(); //初始化
  94.         while(1){
  95.                 if(flg_cal){ //清零 输出十分位" 0.0"
  96.                         if(int_tp == 7000){
  97.                                 LCM_WR(0xc0,0x20); LCM_WR(0xc1,0x30); LCM_WR(0xc3,0x30);
  98.                                 if(timei>0) timei = 5; //写入数据
  99.                         }
  100.                         else{//正常计算输出
  101.                                 timei++; LCM_WR(0x82,0x05);        sj=4;//外中断信号                        
  102.                                 //速度
  103.                                 if(int_tp>143){
  104.                                         int_tp = girth/int_tp; int_tp = (int_tp*18)/5; //kmh=3.6*ms
  105.                                         LCM_WR(0xc3,int_tp%10+0x30);      //输出十分位
  106.                                         int_tp = int_tp/10;        
  107.                                         LCM_WR(0xc1,int_tp%10+0x30);//输出个位
  108.                                         if(int_tp<10) LCM_WR(0xc0,0x20);  //输出十位0时清除
  109.                                         else LCM_WR(0xc0,int_tp/10+0x30); //输出十位
  110.                                 }//在99.9km/h范围内
  111.                                 //距离  
  112.                                 d_var[3] += girth_l;
  113.                                 if(d_var[3]>99){ d_var[3]-=100; d_var[2]++;        }
  114.                                 d_var[2] += girth_h;
  115.                                 if(d_var[2]>99){
  116.                                         d_var[2]-=100;
  117.                                         if(d_var[1]==99){
  118.                                                 d_var[1]=0;
  119.                                                 if(d_var[0]==99) d_var[0]=0;
  120.                                                 else d_var[0]++;                                       
  121.                                         }
  122.                                         else d_var[1]++;
  123.                                 }//步长1.98m
  124.                                 mile_show(); //输出距离
  125.                         }
  126.                         int_tp = 0; flg_cal = 0;//复位        
  127.                 }//输出计算的主要数据
  128.                 if(timei==5){
  129.                         timei=0;
  130.                         LCM_WR(0x84,0x06); svj=7;//0x06
  131.                         AT24_WRAMD();  //写入存储器
  132.                 }//每6个外中断信号写入数据一次
  133.                 if(flg_s){
  134.                         flg_s = 0;
  135.                         if(t_var[0]>9) LCM_WR(0x88,t_var[0]/10+0x30);
  136.                         LCM_WR(0x89,t_var[0]%10+0x30);
  137.                         LCM_WR(0x8b,t_var[1]/10+0x30); LCM_WR(0x8c,t_var[1]%10+0x30);
  138.                         LCM_WR(0x8e,t_var[2]/10+0x30); LCM_WR(0x8f,t_var[2]%10+0x30);
  139.                 }//时间
  140.                 if(!KEY){
  141.                         _nms(2); //去抖延时
  142.                         if(!KEY){
  143.                                 uchar key_tp = 136;
  144.                                 EA = 0; timej = 0;
  145.                                 do{        key_tp--; _nms(3);        }while(!KEY&&key_tp>0);        //长短按计时循环
  146.                                 EA = 1;
  147.                                 if(key_tp==0){
  148.                                         d_var[0] = 0; d_var[1] = 0; d_var[2] = 0; d_var[3] = 0; //清零
  149.                                         _nus(20); mile_show(); //输出距离
  150.                                 }//长按                                
  151.                                 //短按长按都要写入数据                                
  152.                                 LCM_WR(0x84,0x06); svj = 7;//0x06
  153.                                 AT24_WRAMD(); //24c02写入RAM数据
  154.                                 //等待释放按键
  155.                                 while(!KEY){ while(!KEY); _nms(2); }                                
  156.                         }
  157.                 }//按键功能,长按清除历程信息,短按储存历程信息
  158.                 if(sj==1){ sj=0; LCM_WR(0x82,0x20);}//外中断信号闪更新
  159.                 if(svj==1){ svj=0; LCM_WR(0x84,0x20);}//写存储器闪更新
  160.                                                         
  161.         }//主循环
  162. }

  163. //初始化
  164. void _init(void)
  165. {
  166.         _nus(255); //等待外围设备完成加电
  167.         //初始化液晶
  168.         LCM_WR_CMD(0x01); //清屏幕0x01
  169.         LCM_WR_CMD(0x38); //设置数据线模式0x38 8位 两行 5X7
  170.         LCM_WR_CMD(0x0C); //设置显示状态0x0C 整体显示开 光标关 光标闪烁关
  171.         LCM_WR_CMD(0x06); //设置输入方式0x06 增量方式 不移位        
  172.         LCM_WR_CMD(0x80); //设置光标初始位        
  173.         //输出 "CC Speedometer"
  174.         LCM_WR_STR(0x80,"(^_^)Speedometer"); LCM_WR_STR(0xc0,">>>>>>>>>>>>>>>>");
  175.         //初始化液晶自定义字符库
  176.         LCM_CUSTOM_CHAR(0x68,0x00,0x1E,0x1E,0x1F,0x1F,0x0F,0x0F); //自定义字符'信' 在0x05
  177.         LCM_CUSTOM_CHAR(0x70,0x00,0x1F,0x0E,0x04,0x04,0x0E,0x1F); //自定义字符'存' 在0x06
  178.         LCM_CUSTOM_CHAR(0x78,0x04,0x14,0x14,0x16,0x15,0x15,0x15); //自定义字符'/h' 在0x07
  179.         //初始化24c02
  180.         AT24_SCL = 1; _nop_(); AT24_SDA = 1; _nop_(); _nms(4);        
  181.         d_var[0] = AT24_RD(0x10); d_var[1] = AT24_RD(0x11);
  182.         d_var[2] = AT24_RD(0x12); d_var[3] = 0; //读24c02 初始化d_var[]        
  183.         //输入口初始化
  184.         KEY = 1; SIGN = 1;
  185.         //串口初始化
  186.         EA = 0; TMOD = 0x11; //定时中断0允许 方式0 使能off
  187.         TH0 = 0xff; TL0 = 0x5a; ET0 = 1; TR0 = 1;//500us (65536-166) /256=255 %256=90
  188.         TH1 = 0x7d; TL1 = 0xcb; ET1 = 1; TR1 = 1;         
  189.         PX0 = 1; IT0 = 1; EX0 = 0; //外中断0 跳变触 使能off        
  190.         //变量初始化
  191.         timej = 0; int_tp = 0; flg_cal = 0;
  192.         sj = 0; svj = 0; timei = 0; times = 0; flg_s = 0;        
  193.         _nms(200); _nms(200);
  194.         //界面初始化                                                  
  195.         LCM_WR_CMD(0x01); //清屏幕0x01                  
  196.         LCM_WR_STR(0x80,"["); LCM_WR_STR(0x86,"]"); LCM_WR_STR(0x89,"0:00:00");//[0 0     00:00:00]
  197.         LCM_WR_STR(0xc1,"0.0km"); LCM_WR_STR(0xca,"0.00km"); //[ 0.0km    0.00km]
  198.         LCM_WR(0xc6,0x07); //[ /h ]
  199.         mile_show(); _nms(56);
  200.         EX0 = 1; EA = 1; //开启各种中断 CPU中断使能
  201. }

  202. //24c02写入RAM数据
  203. void AT24_WRAMD(void)
  204. {
  205.         uchar mem_wram;
  206.         for(mem_wram=0;mem_wram<3;mem_wram++)
  207.                 AT24_WR(0x10+mem_wram,d_var[mem_wram]);
  208. }
  209. //距离数据显示
  210. void mile_show(void)
  211. {        
  212.         if(d_var[0]>9){        //高位3有数据,并且有两位
  213.                 LCM_WR(0xc8,d_var[0]/10+0x30); LCM_WR(0xc9,d_var[0]%10+0x30);
  214.         }
  215.         else{//高位3只有低位有数据,或没有数据
  216.                 LCM_WR(0xc8,0x20);//高位3高位没有数据
  217.                 if(d_var[0]>0) LCM_WR(0xc9,d_var[0]+0x30);//高位3低位有数据
  218.                 else LCM_WR(0xc9,0x20);//高位3没有数据
  219.         }
  220.         LCM_WR(0xca,d_var[1]/10+0x30); LCM_WR(0xcc,d_var[1]%10+0x30);
  221.         LCM_WR(0xcd,d_var[2]/10+0x30);
  222. }

  223. //---- 硬件应用层驱动 ------------------------------------------------
  224. void _nus(uchar us)
  225. {
  226.         for(;us>0;us--)
  227.                 ;
  228. }//短延时
  229. void _nms(uchar ms)
  230. {
  231.         for(;ms>0;ms--)
  232.                 _nus(255);        
  233. }//长延时4.6ms
  234. /*----液晶驱动函数定义------------------------------------------------------------
  235.   void LCM_WR_CMD(uchar);    //写操作命令
  236.   void LCM_WR_DAT(uchar);    //写数据
  237.   void LCM_WR(uchar,uchar);  //输出一个字符
  238.   void LCM_RD_BUSY(void);    //读忙信号
  239.   void LCM_WR_STR(uchar,uchar*);//输出字符串
  240.   void LCM_CUSTOM_CHAR(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);//自定义字符
  241. --------------------------------------------------------------------------------*/
  242. void LCM_RD_BUSY(void)
  243. {
  244.         uchar lcm_rdby = 0x00;        
  245.         LCM16_RS = 0;   //RS 0
  246.         LCM16_RW = 1;   //RW 1
  247.         LCM16_EN = 1;   //EN 1 读忙信号        
  248.         LCM16_IO = 0xff;
  249.         do{ lcm_rdby = LCM16_IO; }while(lcm_rdby&0x80); //MSB=0x80
  250.         _nop_();
  251. }//读忙信号
  252. void LCM_WR_CMD(uchar lcm_cmd)
  253. {
  254.         LCM_RD_BUSY();        
  255.         LCM16_RS = 0;   //RS 0
  256.         LCM16_RW = 0;   //RW 0        
  257.         LCM16_EN = 1;   //跳跃,写入数据
  258.         LCM16_IO = lcm_cmd; _nop_();
  259.         LCM16_EN = 0; _nop_();
  260. }//写操作命令
  261. void LCM_WR_DAT(uchar lcm_wrdat)
  262. {
  263.         LCM_RD_BUSY();        
  264.         LCM16_RS = 1;   //RS 1
  265.         LCM16_RW = 0;   //RW 0        
  266.         LCM16_EN = 1;   //跳跃,写入数据
  267.         LCM16_IO = lcm_wrdat; _nop_();
  268.         LCM16_EN = 0; _nop_();
  269. }//写数据
  270. void LCM_WR(uchar lcm_xy,uchar lcm_dat)
  271. {
  272.         EA = 0;
  273.         //设置光标位置  第一行0x80,第二行0xc0
  274.         LCM_WR_CMD(lcm_xy); LCM_WR_DAT(lcm_dat);
  275.         EA = 1;
  276. }//输出一个字符
  277. void LCM_WR_STR(uchar lcm_xys,uchar *str)
  278. {
  279.         EA = 0;
  280.         LCM_WR_CMD(lcm_xys);
  281.         while(*str){ LCM_WR_DAT(*str); str++;}
  282.         EA = 1;
  283. }//输出字符串
  284. void LCM_CUSTOM_CHAR(uchar gram_num,uchar d0,uchar d1,uchar d2,uchar d3,uchar d4,uchar d5,uchar d6)
  285. {   
  286.         LCM_WR_CMD(gram_num);
  287.         LCM_WR_DAT(d0); LCM_WR_DAT(d1);        LCM_WR_DAT(d2);        LCM_WR_DAT(d3);
  288.         LCM_WR_DAT(d4);        LCM_WR_DAT(d5);        LCM_WR_DAT(d6);        LCM_WR_DAT(0x00);        
  289. }//自定义字符
  290. /*---------------- 24C02驱动 --------------------------------------
  291.   void  AT24_START(void);     //开启
  292.   void  AT24_STOP(void);      //停止
  293.   void  AT24_CK(void);        //时钟
  294.   void  AT24_WR_byte(uchar);  //写入单字节
  295.   uchar AT24_RD_byte(void);   //读入单字节
  296.   uchar AT24_RD(uchar);       //从24c02的地址中读取一个字节数据
  297.   void  AT24_WR(uchar,uchar); //向24c02的地址中写入一字节数据
  298. -----------------------------------------------------------------*/
  299. void AT24_START()
  300. {
  301.         AT24_SDA = 1; _nop_(); AT24_SCL = 1; _nop_();
  302.         AT24_SDA = 0; _nop_(); AT24_SCL = 0; _nop_();
  303. }//24c02启动
  304. void AT24_STOP()
  305. {
  306.         AT24_SDA = 0; _nop_(); AT24_SCL = 1; _nop_(); AT24_SDA = 1; _nop_();
  307. }//24c02停止
  308. void AT24_WR_byte(uchar mem_wrbt)
  309. {
  310.         uchar mem_wrtp,mem_wrbtp;
  311.         mem_wrbtp = mem_wrbt;
  312.         for (mem_wrtp=8;mem_wrtp>0;mem_wrtp--){
  313.                 mem_wrbtp = mem_wrbtp<<1;
  314.                 AT24_SCL = 0; _nop_();
  315.                 AT24_SDA = CY; _nop_(); //(bit)(mem_wrbtp&0x80)
  316.                 AT24_SCL = 1; _nop_();
  317.         }
  318.         AT24_SCL = 0; _nop_(); AT24_SDA = 1; _nop_();
  319. }//24c02写入单字节
  320. uchar AT24_RD_byte()
  321. {
  322.         uchar mem_rdtp,mem_rdbit,mem_rdbt=0;
  323.         AT24_SCL = 0; _nop_(); AT24_SDA = 1;
  324.         for(mem_rdtp=8;mem_rdtp>0;mem_rdtp--){
  325.                 _nop_(); AT24_SCL = 1; _nop_();
  326.                 if (AT24_SDA) mem_rdbit = 1;
  327.                 else mem_rdbit = 0;
  328.                 mem_rdbt=(mem_rdbt<<1)|mem_rdbit;
  329.                 AT24_SCL = 0;
  330.         }
  331.         _nop_();
  332.         return mem_rdbt;
  333. }//24c02读入单字节
  334. void AT24_CK()
  335. {
  336.         uchar mem_ck = 255;
  337.         AT24_SCL = 1; _nop_();
  338.         while((AT24_SDA)&&(mem_ck>0)) mem_ck--;
  339.         AT24_SCL = 0; _nop_();
  340. }//24c02时钟等待
  341. uchar AT24_RD(uchar mem_rdaddr)
  342. {
  343.         uchar mem_rd; //在刚启动时使用,故EA不需复位
  344.         AT24_START();
  345.         AT24_WR_byte(0xa0); AT24_CK();
  346.         AT24_WR_byte(mem_rdaddr); AT24_CK();
  347.         AT24_START();
  348.         AT24_WR_byte(0xa1); AT24_CK();
  349.         mem_rd = AT24_RD_byte();  
  350.         AT24_STOP(); _nms(4);
  351.         return mem_rd;
  352. }//24c02读入
  353. void AT24_WR(uchar mem_wraddr,uchar mem_wrinfo)
  354. {
  355.         EA = 0; AT24_START();
  356.         AT24_WR_byte(0xa0); AT24_CK();
  357.         AT24_WR_byte(mem_wraddr); AT24_CK();
  358.         AT24_WR_byte(mem_wrinfo); AT24_CK();
  359.         AT24_STOP(); EA=1;
  360.         _nms(3);
  361. }//24c02写入
  362. //----END---------------------------------------------------------------
复制代码

出0入0汤圆

发表于 2012-5-4 21:44:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-6-2 21:13:14 | 显示全部楼层
换at89c52电路不要改吧?

出0入0汤圆

发表于 2012-6-2 23:24:21 | 显示全部楼层
good,support
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 21:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表