找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请大佬帮忙看看,不知道为什么单片机测出的数据不正确

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
ID:1005855 发表于 2022-4-11 11:03 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <lcd.h>


  4. #define uchar unsigned char
  5. #define uint unsigned int
  6.         
  7. sbit key1=P3^0;  //设置键
  8. sbit key2=P3^1;  //加键
  9. sbit key3=P3^2;  //减键
  10. sbit key4=P3^3;  //开始键


  11. sbit beep=P2^4;


  12. sbit trig=P1^7;
  13. sbit echo=P1^6;


  14. sbit RS=P2^0;
  15. sbit RW=P2^1;
  16. sbit EN=P2^2;


  17. uchar djshi,djfen=45,djmiao;
  18. uchar r,num,s,i;
  19. uchar distance,t;
  20. bit flag=0;
  21. bit flag1s=0;


  22. uchar code table1[]={"time: 00:00:00  "};
  23. uchar code table2[]={"                "};
  24. uchar code table3[13]={'0','1','2','3','4','5','6','7','8','9','.','-','M'};
  25. uchar code table4[]={"xdz:"};
  26. uchar cc[4]={0,0,0,0};




  27. void startmodule();
  28. void start();
  29. void count();


  30. void LcdInit()                                                  //LCD初始化子程序
  31. {
  32.                 uchar i;
  33.                 lcd_writecom(0x38);  //开显示
  34.                 lcd_writecom(0x0c);  //开显示不显示光标
  35.                 lcd_writecom(0x06);  //写一个指针加1
  36.                 lcd_writecom(0x01);  //清屏
  37.         
  38.                 lcd_writecom(0x80);  //设置数据指针起点
  39.                 for(i=0;i<16;i++)
  40.                 {
  41.                                 lcd_writedate(table1[i]);[/i][i]
  42.                 }
  43.         
  44. }        




  45. void Timer0Init(void)                //
  46. {
  47.         
  48.                 TMOD |= 0x01;                //使用定时器T0的模式1  定时器T1的模式1
  49.                 TL0 = 15536%256;                //设置定时0初值
  50.                 TH0 = 15536/256;                //设置定时0初值
  51.                 TR0 = 1;                //定时器0开始计时
  52.                 ET0=1;
  53.                 EA=1;
  54. }


  55. void Timer1Init(void)                //
  56. {
  57.         
  58.                 TMOD |= 0x10;                //使用定时器T0的模式1  定时器T1的模式1
  59.                 TL1 = 0;                //设置定时0初值
  60.                 TH1 = 0;                //设置定时0初值
  61.         TF1=0;
  62.                 TR1 = 1;                //定时器0开始计时
  63.         ET1=1;
  64.                 EA=1;
  65. }








  66. void Delay1ms(uint n)
  67. {
  68.    uint x,y;
  69.     for(x=n;x>0;x--)
  70.          for(y=110;y>0;y--);
  71. }


  72.                         


  73. void write_sfm(uchar add,uchar date)
  74. {
  75.                 lcd_writecom(0x80+add);
  76.                 lcd_writedate(date/10+0x30);
  77.                 lcd_writedate(date%10+0x30);
  78.                 lcd_writecom(0x80+add+1);
  79. }




  80. void keyscan()
  81. {
  82.                 if(key1==0)
  83.                 {
  84.                                 Delay1ms(5);
  85.                                 if(key1==0)
  86.                                 {        
  87.                                                 num++;        
  88.                                                 TR0=0;
  89.                                                 while(!key1);
  90.                                                 if(num==1)
  91.                                                 {
  92.                                                                 lcd_writecom(0x0f);
  93.                                                                 lcd_writecom(0x8D);
  94.                                                 }
  95.                                                 if(num==2)
  96.                                                 {
  97.                                                                 lcd_writecom(0x8A);
  98.                                                 }
  99.                                                 if(num==3)
  100.                                                 {
  101.                                                                
  102.                                                                 lcd_writecom(0x87);
  103.                                                 }
  104.                                                 if(num==4)
  105.                                                 {
  106.                                                         num=0;
  107.                                                 }
  108.                                                 
  109.                         }
  110.                 }
  111.                 if(num==1)
  112.                 {
  113.                                 if(key2==0)
  114.                                 {
  115.                                                 Delay1ms(5);
  116.                                                 if(key2==0)
  117.                                                 {
  118.                                                                 djmiao++;
  119.                                                                 while(!key2);        
  120.                                                                 if(djmiao==60)
  121.                                                                         djmiao=0;
  122.                                                                 lcd_writecom(0x8c);
  123.                                                                 lcd_writedate(djmiao/10+0x30);
  124.                                                                 lcd_writedate(djmiao%10+0x30);
  125.                                                                 lcd_writecom(0x8D);
  126.                                                 }
  127.                                                 
  128.                                 }
  129.                                 if(key3==0)
  130.                                 {
  131.                                                 Delay1ms(5);
  132.                                                 if(key3==0)
  133.                                                 {
  134.                                                                 djmiao--;
  135.                                                                 while(!key3);
  136.                                                                 if(djmiao==255)
  137.                                                                         djmiao=59;
  138.                                                                 lcd_writecom(0x8c);
  139.                                                                 lcd_writedate(djmiao/10+0x30);
  140.                                                                 lcd_writedate(djmiao%10+0x30);        
  141.                                                                 lcd_writecom(0x8D);
  142.                                                 }
  143.                                        
  144.                                 }
  145.                 }
  146.                 if(num==2)
  147.                 {
  148.                                 if(key2==0)
  149.                                 {
  150.                                                 Delay1ms(5);
  151.                                                 if(key2==0)
  152.                                                 {
  153.                                                                 djfen++;
  154.                                                                 while(!key2);
  155.                                                                 if(djfen==60)
  156.                                                                         djfen=0;
  157.                                                                 lcd_writecom(0x89);
  158.                                                                 lcd_writedate(djfen/10+0x30);
  159.                                                                 lcd_writedate(djfen%10+0x30);        
  160.                                                                 lcd_writecom(0x8A);
  161.                                                 }
  162.                                        
  163.                                 }
  164.                                 if(key3==0)
  165.                                 {
  166.                                                 Delay1ms(5);
  167.                                                 if(key3==0)
  168.                                                 {
  169.                                                                 djfen--;
  170.                                                         while(!key3);
  171.                                                                 if(djfen==255)
  172.                                                                         djfen=59;
  173.                                                                 lcd_writecom(0x89);
  174.                                                                
  175.                                                                 lcd_writedate(djfen/10+0x30);
  176.                                                                 lcd_writedate(djfen%10+0x30);        
  177.                                                                 lcd_writecom(0x8A);
  178.                                                 }
  179.                                 }
  180.                 }
  181.                 if(num==3)
  182.                 {
  183.                                 if(key2==0)
  184.                                 {
  185.                                                 Delay1ms(5);
  186.                                                 if(key2==0)
  187.                                                 {
  188.                                                                 djshi++;
  189.                                                                 while(!key2);
  190.                                                                 if(djshi==24)
  191.                                                                         djshi=0;
  192.                                                                 lcd_writecom(0x86);
  193.                                                                 lcd_writedate(djshi/10+0x30);
  194.                                                                 lcd_writedate(djshi%10+0x30);        
  195.                                                                 lcd_writecom(0x87);
  196.                                                 }
  197.                                                 
  198.                                 }
  199.                                 if(key3==0)
  200.                                 {
  201.                                                 Delay1ms(5);
  202.                                                 if(key3==0)
  203.                                                 {
  204.                                                                 djshi--;
  205.                                                                 while(!key3);
  206.                                                                 if(djshi==255)
  207.                                                                         djshi=23;
  208.                                                                 lcd_writecom(0x86);
  209.                                                                 lcd_writedate(djshi/10+0x30);
  210.                                                                 lcd_writedate(djshi%10+0x30);        
  211.                                                                 lcd_writecom(0x87);
  212.                                                 }
  213.                                 }
  214.                 }
  215.                 if(key4==0)
  216.                 {
  217.                                 Delay1ms(5);
  218.                                 if(key4==0)
  219.                                 {
  220.                                                                 TR0=1;
  221.                                         lcd_writecom(0x0c);
  222.                                                 
  223.                                 }
  224.                                 
  225.                 }
  226. }


  227. void fmq()
  228. {
  229.         beep=1;
  230.         Delay1ms(5);
  231.         beep=0;
  232.         Delay1ms(5);
  233. }






  234. void main()
  235. {
  236.         
  237.                 LcdInit();
  238.                 Timer0Init();
  239.           Timer1Init();
  240.         
  241.                 trig=0;
  242.         
  243.         
  244.         
  245.                 while(1)
  246.                 {
  247.                         if(flag1s)
  248.                         {
  249.                                 flag1s=0;
  250.                                         startmodule();
  251.                         start();
  252.                         count();        
  253.                         }
  254.                
  255.                         keyscan();
  256.                                 
  257.                                 if(djshi==0 && djfen==0 &&djmiao==0)  //倒计时时间到
  258.                                 {
  259.                                                 TR0=0;          //停止计时
  260.                                           fmq();
  261.                                 }        
  262.                                 
  263.                 }
  264.                
  265. }








  266. void Timer0() interrupt 1
  267. {
  268.         
  269.                 TL0 = 15536%256;                //设置定时初值
  270.                 TH0 = 15536/256;                //设置定时初值
  271.                 r++;
  272.                 if(r==20)
  273.                 {
  274.                                 r=0;
  275.                                 djmiao--;
  276.                                 if(djmiao==255)
  277.                                 {
  278.                                                 djmiao=59;
  279.                                                 djfen--;
  280.                                                 if(djfen==255)
  281.                                                 {
  282.                                                                 djfen=59;
  283.                                                                 djshi--;
  284.                                                                 if(djshi==255)
  285.                                                                 {
  286.                                                                                 djshi=0;
  287.                                                                 }
  288.                                                                 if(djshi==0)
  289.                                                                 djfen=59;
  290.                                                                 if(djfen==0&djshi==0)
  291.                                                                         djfen=0;
  292.                                                                 write_sfm(6,djshi);
  293.                                                 }
  294.                                                 write_sfm(9,djfen);        
  295.                                         }
  296.                                         write_sfm(12,djmiao);
  297.                                         flag1s=1;
  298.                         }        
  299. }               


  300. void Timer1() interrupt 3
  301. {
  302.         flag=1;
  303. }








  304. void startmodule()
  305. {
  306.                 trig=1;
  307.         
  308.                 _nop_(); _nop_(); _nop_(); _nop_();
  309.           _nop_(); _nop_(); _nop_(); _nop_();
  310.           _nop_(); _nop_(); _nop_(); _nop_();
  311.           _nop_(); _nop_(); _nop_(); _nop_();
  312.           _nop_(); _nop_(); _nop_(); _nop_();
  313.           _nop_(); _nop_(); _nop_(); _nop_();
  314.         
  315.                 trig=0;
  316.         
  317. }


  318. void start()
  319. {
  320.                    while(!echo);                //当Echo为零时等待
  321.              TR1=1;                            //开启
  322.              while(echo);                //当Echo为1计数并等待
  323.              TR1=0;                                //关闭




  324. }


  325. void count()
  326. {
  327.         t=TH1*256+TL1;
  328.         TH1=15546;
  329.         TL1=0;
  330.         distance=t/58.0;
  331.         cc[0]=distance/100%10;
  332.         cc[1]=distance/10%10;
  333.         cc[2]=distance/1%10;
  334.         cc[3]=distance*1%10;
  335.         lcd_writechar(1, 1, table3[cc[0]]);
  336.         lcd_writechar(2, 1, table3[cc[1]]);
  337.         lcd_writechar(3, 1, table3[cc[2]]);
  338.         lcd_writechar(4, 1, table3[cc[3]]);
  339. }
复制代码
回复

使用道具 举报

ID:161164 发表于 2022-4-11 13:27 | 显示全部楼层
uchar distance,t;要改为uint distance,t;

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:982617 发表于 2022-4-13 17:40 | 显示全部楼层
distance,t变量的定义类型错了 改一下
回复

使用道具 举报

ID:1011546 发表于 2022-4-14 12:02 | 显示全部楼层
distance,t变量定义类型错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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