找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2253|回复: 3
收起左侧

求个测速lcd显示的程序,给100黑币

[复制链接]
ID:124943 发表于 2016-6-4 20:45 | 显示全部楼层 |阅读模式
100黑币
给位大大,我想要一个测速的程序,可以应用到我的98c52,我有4个测速的模块,还有一个1602的lcd,我想把四个所测得速显示到lcd上,顺便给个电路图和原理图,谢谢

6666.jpg
777.jpg
888.jpg
回复

使用道具 举报

ID:124943 发表于 2016-6-5 17:16 | 显示全部楼层
不要沉
回复

使用道具 举报

ID:79544 发表于 2016-6-5 20:04 | 显示全部楼层
给你个我用的程序
  1. #include<reg52.h>//51单片机头文件

  2. #define uchar unsigned char//宏定义
  3. #define uint unsigned int
  4. uchar code digit[]={"0123456789"};//定义字符数组数字
  5. uchar code DispTab_2[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//温度符号
  6. uchar disp[8];//存储拆开的数
  7. uint cnt;//中断次数
  8. uchar v;//电机0速度
  9. uchar s;//电机1速度
  10. uchar flag;        //计满1秒钟标志位
  11. /////////
  12. sbit rs=P3^4;//数据命令选择
  13. sbit rw=P2^6;//读写控制信号
  14. sbit e=P3^5;//使能信号
  15. ///////////////
  16. void delay_50us(uint t)//50us延时函数
  17. {
  18.         uchar j;
  19.         for(;t>0;t--)
  20.     for(j=190;j>0;j--);
  21. }
  22. /////////////
  23. /*
  24. void delay_50ms(uint t)//50ms延时函数
  25. {
  26. uint j;
  27.    for(;t>0;t--)
  28.    for(j=6245;j>0;j--);
  29. }
  30. /////////
  31. */
  32. void write_com(uchar com)//写地址
  33. {
  34.         e=0;
  35.         rs=0;
  36.         rw=0;
  37.         P2=com;
  38.         delay_50us(10);
  39.         e=1;
  40.         delay_50us(10);
  41.         e=0;
  42. }
  43. ///////
  44. void write_data(uchar dat)// 写数据
  45. {
  46.         e=0;
  47.         rs=1;
  48.         rw=0;
  49.         P2=dat;
  50.         delay_50us(10);
  51.         e=1;
  52.         delay_50us(10);
  53.         e=0;
  54. }
  55. //////
  56. void init(void)//液晶初始化
  57. {
  58.           delay_50us(300);
  59.           write_com(0x38);
  60.           delay_50us(100);
  61.           write_com(0x38);
  62.           delay_50us(100);
  63.           write_com(0x38);
  64.           write_com(0x38);
  65.           write_com(0x08);
  66.           write_com(0x01);
  67.           write_com(0x06);
  68.           write_com(0x0c);
  69. }
  70. /////////////
  71. void writeaddress(uchar x)//指定字符的实际地址
  72. {

  73.           write_com(x|0x80);//显示位置的确定方法规定为“80h+地址码x“
  74. }
  75. //////////
  76. void display_sym(void)//显示速度提示符
  77. {
  78.         writeaddress(0x00);//写显示地址第一行第一列
  79.         write_data('v');//写数据v
  80.         write_data('=');//写数据=
  81.         writeaddress(0x00+0x40);//写显示地址第一行第一列
  82.         write_data('s');//写数据v
  83.         write_data('=');//写数据=
  84. }
  85. //////
  86. void dispose()//
  87. {
  88.         disp[0]=v/1000;
  89.         disp[1]=(v%1000)/100;
  90.         disp[2]=(v/100)/10;
  91.         disp[3]=v%10;
  92.         disp[4]=s/1000;
  93.         disp[5]=(s%1000)/100;
  94.         disp[6]=(s/100)/10;
  95.         disp[7]=s%10;
  96. }
  97. /////////////
  98. void display_val(void)
  99. {
  100.         writeaddress(0x02);//写显示地址,第一行第三列
  101.           write_data(digit[disp[0]]);//千
  102.           write_data(digit[disp[1]]);//百
  103.           write_data(digit[disp[2]]);//时
  104.           write_data(digit[disp[3]]);//个
  105.            writeaddress(0x02+0x40);//写显示地址,第2行第三列
  106.           write_data(digit[disp[4]]);//千
  107.           write_data(digit[disp[5]]);//百
  108.           write_data(digit[disp[6]]);//时
  109.           write_data(digit[disp[7]]);//个
  110. }   
  111. ////////
  112. void display_uint(void)//显示速度单位
  113. {
  114.           writeaddress(0x06);//第1行第7列
  115.           write_data('r');//千
  116.           write_data('/');//百
  117.           write_data('m');//时
  118.           write_data('i');//个
  119.           write_data('n');//个
  120.         writeaddress(0x06+0x40);//第2行第7列
  121.           write_data('r');//千
  122.           write_data('/');//百
  123.           write_data('m');//时
  124.           write_data('i');//个
  125.           write_data('n');//个
  126. }
  127. void initial()//初始化
  128. {
  129.         TMOD=0x55; //定时器T1工作与计数器模式1,定时器T0工作于计数器模式1
  130.         RCAP2H=(65536-50000)/256;//89c52定时器2。T2装初值
  131.         RCAP2L=(65536-50000)%256;
  132.         ET2=1;
  133.         TR2=1;


  134.         EA=1;
  135. }
  136. ///////
  137. void main()
  138. {
  139.         init();
  140.         v=0;
  141.         s=0;
  142.         initial();
  143.         cnt=0;
  144.         display_sym();
  145.         display_uint();
  146.         while(1)
  147.         {
  148.                 TR1=1;
  149.                 TR0=1;
  150.                 TH1=0;
  151.                 TL1=0;
  152.                 TH0=0;
  153.                 TL0=0;
  154.                 flag=0;        // 时间还未满1分钟
  155.                 while(flag==0);        // 时间未满等待
  156.                 v=(TH1*256+TL1)*60/20;        // 计算速度,每周产生20个脉冲
  157.                 s=(TH0*256+TL0)*60/20;        // 计算速度,每周产生20个脉冲
  158.                 dispose();
  159.                 display_val();
  160.         }
  161. }
  162. //////
  163. void time2() interrupt 5//定时器T2中断服务程序
  164. {
  165.         TF2=0;
  166.         cnt++;
  167.         if(cnt==20)
  168.         {
  169.                 flag=1;
  170.                 cnt=0;
  171.         }
  172. }
复制代码
回复

使用道具 举报

ID:124943 发表于 2016-6-5 21:18 | 显示全部楼层
腾飞的龙 发表于 2016-6-5 20:04
给你个我用的程序

谢谢,有电路图吗,我是新手不太会
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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