单片机的实时获取、显示

[复制链接]
2801|14
 楼主| wang_2003 发表于 2011-4-21 08:57 | 显示全部楼层 |阅读模式
单片机获取P0口的数值,然后通过P2口控制数码管显示,P0口的数值通过外部控制,当P0口的值发生变化时,数码管显示的还是上一个值,只有复位以后才能发生变化,有没有什么方法可以实时的显示?
     谢谢!
rclong 发表于 2011-4-21 09:02 | 显示全部楼层
这个 是代码的问题吧
起码贴出来看看呐
aaron96031 发表于 2011-4-21 09:06 | 显示全部楼层
用E2存储就搞定了
joyme 发表于 2011-4-21 11:31 | 显示全部楼层
也要看P0的变化频率啦,如果频率太高怎么可能实现实时显示。至少要在50Hz以下,否则人眼看不到数码管的变化
ayb_ice 发表于 2011-4-21 11:47 | 显示全部楼层
while(1)
{
    P2 = P0;
}
yjhon 发表于 2011-4-21 12:30 | 显示全部楼层
:lol,这个也太简洁了点吧
yjhon 发表于 2011-4-21 12:33 | 显示全部楼层
代码里没有去刷新显示吧
 楼主| wang_2003 发表于 2011-4-22 14:45 | 显示全部楼层
7# yjhon

代码里怎么刷新呢?谢谢
 楼主| wang_2003 发表于 2011-4-22 15:33 | 显示全部楼层

  1. #include<reg51.h>

  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar code tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
  5. sbit one = P1^0;
  6. sbit two = P1^1;
  7. sbit three = P1^2;
  8. sbit four = P1^3;
  9. sbit five = P1^4;
  10. sbit six = P1^5;
  11. sbit seven = P1^6;
  12. sbit eight = P1^7;

  13.    uchar count;

  14. void delay(int i)
  15. {
  16.     uint j;
  17.         while(i--)
  18.         {
  19.          for(j=0;j<125;j++)                  {;}
  20.          }
  21. }

  22. void display()
  23. {
  24.    P2 =  tab[count];
  25.    delay(1000);

  26. }
  27. void getcount()
  28. {
  29.    if(one ==0)
  30.       count = 0;
  31.    else if(two ==0)
  32.       count = 1;
  33.    else if(three ==0)
  34.       count = 2;
  35.    else if(four ==0)
  36.       count = 3;
  37.    else if(five ==0)
  38.       count = 4;
  39.    else if(six ==0)
  40.       count = 5;
  41.    else if(seven ==0)
  42.       count = 6;
  43.    else if(eight ==0)
  44.       count = 7;


  45. }
  46. void main()
  47. {
  48.      P2 = 0x00;
  49.          while(1)
  50.          {
  51.                     getcount();
  52.               display();
  53.           }
  54. }
 楼主| wang_2003 发表于 2011-4-22 16:00 | 显示全部楼层
我觉得单片机应该是实时获取的,不需要刷新或者复位的吧,但是没找到问题。
kaikai763 发表于 2011-4-22 17:36 | 显示全部楼层
本帖最后由 kaikai763 于 2011-4-22 17:38 编辑

获取完毕后    P1口重置一下在main()中的while前面加成这样吧:
while(1){
delay(30);
if(P1!=0xff)
{
     getount();
     display();
     P1=0xff;
}
}
wangyy608 发表于 2011-4-22 19:05 | 显示全部楼层
P0=0xff;
while(1)
{
    P2 = P0;
}
NE5532 发表于 2011-4-22 19:29 | 显示全部楼层
请先把“实时”定义清楚。
hanxue1130 发表于 2011-4-22 19:39 | 显示全部楼层
都是高手啊!
yjhon 发表于 2011-4-22 22:50 | 显示全部楼层
10# wang_2003

有刷新,我多虑了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

397

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部