找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3683|回复: 10
打印 上一主题 下一主题
收起左侧

下面是单片机的六路抢答器,求高手帮忙注释一下,很多地方不懂啊!

[复制链接]
跳转到指定楼层
楼主
ID:51006 发表于 2013-6-17 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    #include <reg52.h>       
        #define uint unsigned int
        #define uchar unsigned char
        unsigned char code table[]={0xc0,0xf9,0xa4,
    0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};
        sbit start=P3^6;
        sbit reset=P3^7;
        sbit key1=P1^0;
        sbit key2=P1^1;               
        sbit key3=P1^2;
        sbit key4=P1^3;
        sbit key5=P1^4;
        sbit key6=P1^5;
        sbit key7=P1^6;
        sbit key8=P1^7;
        sbit jia=P3^4;
        sbit jian=P3^5;
        bit action = 0;
        uchar second=10,a[7]={0};
        uchar timer0_count = 0;
        uchar number=0;
        uchar number_display = 0;
        uchar k;
        void delay(uint z)
        {
                uint x,y;
                for(x=z;x>0;x--)
                        for(y=120;y>0;y--);
        }
        void display(uchar number,uchar second)
        {                       
                P2 = 0x01;
                P0 = table[second];       
                delay(1);
                P2 = 0x02;
                P0 = table[number];
                delay(1);
                P2 = 0x04;
                P0 = table[a[0]];
                delay(1);
                P2 = 0x08;
                P0 = table[a[1]];
                delay(1);
                P2 = 0x10;
            P0 = table[a[2]];
                delay(1);
                P2 = 0x20;
                P0 = table[a[3]];
                delay(1);
                P2 = 0x40;
                P0 = table[a[4]];
                delay(1);
                P2 = 0x80;
                P0 = table[a[5]];
                delay(1);       
        }
        void start_keyscan()
        {
            void fengling();
                while(start == 0)
                {
                    key7=0;
                        display(number_display,second);
                        if(start == 1)
                        {
                            key7=1;
                                action  = 1;
                                TR0 = 1;               
                        }
                }       
        }
       
        uchar key_scan8()
        {
                if(key1 == 0)
                {
                        delay(8);
                        if(key1 == 0)
                        {
                                number  = 1;
                                number_display = number;
                        }
                }
                                if(key2 == 0)
                {
                        delay(8);
                        if(key2 == 0)
                        {
                                number  = 2;
                                number_display = number;
                        }
                }
                if(key3 == 0)
                {
                        delay(8);
                        if(key3 == 0)
                        {
                                number  = 3;
                                number_display = number;
                        }
                }
                if(key4 == 0)
                {
                        delay(8);
                        if(key4 == 0)
                        {
                                number  = 4;
                                number_display = number;
                        }
                }
                if(key5 == 0)
                {
                        delay(8);
                        if(key5 == 0)
                        {
                                number  = 5;
                                number_display = number;
                        }
                }
                if(key6 == 0)
                {
                        delay(8);
                        if(key6 == 0)
                        {
                                number  = 6;
                                number_display = number;
                        }
                }                                                       
                if(number_display != 0)       
                {
                        return number_display;
                }
                else
                {
                        return 0;
                }               
        }
        void reset_keyscan()
        {
                if(reset == 0)
                {
                        delay(8);
                        if(reset == 0)
                        {
                                number_display = 0;                       
                               second=10;
                }
                }       
        }
        void main()
        {
                TMOD=0x01;
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                EA=1;
                ET0=1;
                TR0=0;
                P2=0x00;                               
                while(1)
                {
                    reset_keyscan();
                        start_keyscan();                   
                         if(jia==0&&a[number-1]<9)
              {  
                 delay(10);
                 while(jia==0)
                     display(number_display,second);
                     a[number-1]=a[number-1]+1;          
              }
            if(jian==0&&a[number-1]>0)
              {
                 delay(10);
                     while (jian==0)
                     display(number_display,second);
                     a[number-1]=a[number-1]-1;
              }
                        while(action)
                        {
                         while(!key_scan8())              
                        {       
                                display(number_display,second);
                                if(second == 0)
                                {
                                        second = 10;
                                        break;
                                }
                        }
                                        TR0 = 0;
                                        key7=0;
                                        delay(80);
                                   display(number_display,second);                                               
                 key7=1;
                                        action = 0;
                                        break;
                        }
                        display(number_display,second);       
                }
        }
        void timer0() interrupt 1
        {
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                timer0_count ++;
                if(timer0_count == 20)
                {       
                        second --;
                        timer0_count = 0;
          if(second==0)
                        {
                           key7=0;
                           delay(60);
                           key7=1;
                     }
                 }                               
         }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2013-6-17 15:25 | 只看该作者
是一个八路抢答器的单片机程序
回复

使用道具 举报

板凳
ID:76287 发表于 2015-4-7 19:03 | 只看该作者
不懂,但是还是要顶,安抚楼主受伤心灵,每一个新手都是痛苦的开始,快乐的结局
回复

使用道具 举报

地板
ID:439073 发表于 2019-4-18 14:53 | 只看该作者
道到我的单片机里没用呀
回复

使用道具 举报

5#
ID:370231 发表于 2019-4-18 15:20 | 只看该作者
在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。
回复

使用道具 举报

6#
ID:515274 发表于 2019-4-18 16:08 | 只看该作者
key_scan8这个函数检测8个按键是否有按下的,检测到按键后返回number_display。
回复

使用道具 举报

7#
ID:1105312 发表于 2023-12-20 14:51 | 只看该作者
六路抢答器怎么做,在线求
回复

使用道具 举报

8#
ID:1105312 发表于 2023-12-20 14:52 | 只看该作者
下载进我的单片机了没用呀
回复

使用道具 举报

9#
ID:1062320 发表于 2023-12-22 09:23 | 只看该作者
这段代码看起来是为了一个带有按钮的七段数码管计数器,可以用来递增和递减数字。它还包括一个倒计时器,从10倒数到0,下载进单片机没用有可能是你的引脚不对 比如原来是P1.0-7引脚,但是你单片机可能不是这个接口
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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