找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1060|回复: 1
收起左侧

独立键盘的程序 加快扫描的话,第三个数码管就显示不清 求大佬解答

[复制链接]
ID:370913 发表于 2018-7-13 15:23 | 显示全部楼层 |阅读模式
这是个独立键盘的程序
用的是普中科技开发板
加快扫描的话,第三个数码管就显示不清,扫描变慢的话就会抖,求大神给个好法子

单片机源码:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uintunsigned int
  4. #define ucharunsigned char
  5. sbit led1=P2^2;
  6. sbit led2=P2^3;
  7. sbit led3=P2^4;
  8. sbit key1=P3^1;
  9. uinttemp=000,t0,ge,shi,bai,aa;
  10. uchar codetable[]={0x3f,0x06,0x5b,0x4f,
  11. 0x66,0x6d,0x7d,0x07,
  12. 0x7f,0x6f,0x77,0x7c,
  13. 0x39,0x5e,0x79,0x71};
  14. void SMG(int ge,int shi,int bai);
  15. void delay(uintz);
  16. void keyscan1();
  17. void main()
  18. {
  19.      EA=1;
  20.        TMOD=1;
  21.        TR0=1;
  22.      ET0=1;
  23.               while(1) /
  24.        {      
  25.         SMG(ge,shi,bai);
  26.         if(t0==1)//0.01s速度运行 每0.01s个位数加一
  27.        {
  28.        temp++;
  29.        t0=0;
  30.        if(aa==1000)
  31.        {
  32.        temp=000;
  33.        aa=0;
  34.        }
  35.        }
  36. P3=0xff;
  37.   if(key1==0)
  38. {
  39.    delay(10);
  40.    if(key1==0)//俩次判断防止第一次按下去是误按
  41.   {
  42.      TR0=0;
  43.         SMG(ge,shi,bai);
  44.   }
  45.    while(!key1);
  46.    delay(10); //消抖
  47.    while(!key1);//检测按键是否释放
  48.     TR0=1;
  49. }
  50. }
  51.   }
  52. void time0()interrupt 1 using 1
  53. {
  54.        TH0=(65536-10000)/256;
  55.        TL0=(65536-10000)%256;
  56.        t0++;
  57.        aa++;
  58. }
  59. void delay(uint z)
  60. {
  61.        uint x,y;
  62.        for(x=z;x>0;x--)
  63.               for(y=50;y>0;y--);//因此程序速度较快 为防止delay中包含中断点t0==1
  64. }
  65. void SMG(intge,int shi,int bai)
  66. {
  67.        bai=temp/100;
  68.          P0=table[bai];
  69.          led1=1;led2=1;led3=1;
  70.          delay(5);
  71.          shi=temp%100/10;
  72.          P0=table[shi];
  73.          led1=0;led2=1;led3=1;
  74.          delay(5);//更改延时时间的长短可以看到不同效果,例如改为1000看到的是先出现1,再出现2,而delay(5)是一下子出现数字12
  75.          ge=temp%10;
  76.          P0=table[ge];
  77.          led1=1;led2=0;led3=1;
  78.          delay(5);   
  79. }
复制代码






回复

使用道具 举报

ID:123289 发表于 2018-7-14 04:41 | 显示全部楼层
你的程序构思差!
所有扫描的延时没不能用硬延时,要用中断做处理。这样CPU就不“累了”。
参考一下我回的这个帖子“在线等请问独立键盘的扫描去抖怎么写啊 haohaoxue51 发表于 2018-7-11 19:49”
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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