找回密码
 立即注册

QQ登录

只需一步,快速开始

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

修改程序,能不能加中断器、计时器、定时器(三选二)

[复制链接]
跳转到指定楼层
楼主
ID:338876 发表于 2018-5-27 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10黑币
数码管显示闪烁也解决一下

新建 Microsoft Word 文档.docx

14.74 KB, 下载次数: 8

最佳答案

查看完整内容

#include #define uint unsigned int #define uchar unsigned char sbit led0=P2^2; sbit buzzer=P2^3; sbit dula=P2^6; //声明段选线选通端 sbit wela=P2^7; //声明位选线选通端 sbit clear=P3^4; uchar key,shi,ge,count; uchar code tab[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71, 0x76,0x79,0x38,0x3f}; uchar k=0; /*延时子 ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2018-5-27 14:39 | 只看该作者
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit led0=P2^2;
sbit buzzer=P2^3;
sbit dula=P2^6;                //声明段选线选通端
sbit wela=P2^7;                //声明位选线选通端
sbit clear=P3^4;
uchar key,shi,ge,count;
uchar code tab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f};
uchar k=0;
/*延时子函数,xms为形参*/
/*void delay(uint xms)
{
        uint x,y;
        for(x=xms;x>0;x--)
                for(y=110;y>0;y--);
}*/

/*矩阵键盘扫描子程序*/
void matrixkeyscan()
{
        static bit sign=0;                        //按键自锁标志
        static uint count=0;                //消抖计数变量                       
        uchar num=0;                                //临时变量
        P3=0xf0;                                        //赋值P3 1111 0000
        if(P3!=0xf0)                                //检测有按键按下
        {
                count++;                                //消抖计数
                if((count>=500)&&(sign==0))
                {                       
                        sign=1;                                //按键自锁标志置1
                        num=P3;                                //保存P3值xxxx 0000,x为0或1
                        num|=0x0f;                        //保存num按位或0x0f值xxxx 1111
                        P3=num;                                //赋值P3 xxxx 1111
                        num=P3;                                //保存P3值xxxx xxxx
                        switch(num)
                        {
                                case 0xee: key=16; break;
                                case 0xde: key=15; break;
                                case 0xbe: key=14; break;
                                case 0x7e: key=13; break;
                                case 0xed: key=12; break;
                                case 0xdd: key=11; break;
                                case 0xbd: key=10; break;
                                case 0x7d: key= 9; break;
                                case 0xeb: key= 8; break;
                                case 0xdb: key= 7; break;
                                case 0xbb: key= 6; break;
                                case 0x7b: key= 5; break;
                                case 0xe7: key= 4; break;
                                case 0xd7: key= 3; break;
                                case 0xb7: key= 2; break;
                                case 0x77: key= 1; break;
                        }
                        k=1;
                }
        }
        else                                                //键抬起
        {
                sign=0;                                //按键自锁标志清0
                count=0;                                //消抖计数清0
        }
}

void alarm()
{  
        static uint i=0;
        if(k==1)
        {
                buzzer=0;
                led0=0;
                i++;
                if(i==1000)
                {
                        i=0;
                        k=0;
                        buzzer=1;
                        led0=1;
                }
//        buzzer=~buzzer;
//        led0=~led0;
//        delay(30);
        }
}

void display(uchar num)
{
        static uchar i=0;
        P0=0x00;//消隐
        dula=1;
        dula=0;
        if(i==0)
        {
                P0=0xfe;
                wela=1;
                wela=0;

                P0=tab[num/10];
                dula=1;
                dula=0;
                i=1;
        }
        else
        {
                P0=0xfd;
                wela=1;
                wela=0;

                P0=tab[num%10];
                dula=1;
                dula=0;
                i=0;
        }
}
void main()
{
        P0=0x00;
        while(1)
        {
                matrixkeyscan();
                alarm();
                display(key);
        }
}
回复

使用道具 举报

板凳
ID:155507 发表于 2018-5-27 21:28 | 只看该作者
楼主未描述清楚,
1、你想做什么?达成什么目标?
2、你现在是如何做的?
3、做完成后应该出什么?
4、结果现在出现了什么?

发一下 原理图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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