找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[51单片机]萌新求指导

[复制链接]
跳转到指定楼层
楼主
ID:141330 发表于 2016-10-5 00:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人刚刚接触51单片机,老师就留了一道理所不能及的题目。是一道矩阵键盘与计时器结合的题目,于是我费了九牛二虎智力,凭着快忘得差不多的c语言,自己试着写了一段程序,希望得到各位大大的指导。程序有什么不对的地方在我的基础上改就可以了,先放题目。ps:计数说的是计时,一秒一个。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:141330 发表于 2016-10-5 00:02 | 只看该作者
还是口述题目吧,按下矩阵键盘的1,数码管显示从1到100计时,按2,从100到0;按3,从0-50;按4从50-0.
回复

使用道具 举报

板凳
ID:141330 发表于 2016-10-5 00:03 | 只看该作者
也希望各位大大能在自己的机器上帮我试下,新买的机器还没到货
回复

使用道具 举报

地板
ID:141330 发表于 2016-10-5 00:03 | 只看该作者
#include <reg52.h>//寄存器定义文件
//数码管定时显示数字递增
sbit        P20=P2^0;//S1
sbit        P32=P3^2;//S2
sbit        P33=P3^3;//S3
sbit        P34=P3^4;//S4
sbit P00=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
int keynum;
int code zxm[]={0xc0,0x0f9,0x0a4,0x0b0,0x099,0x092,0x082,0x0f8,0x080,0x090,0x088,0x083,0x0c6,0x0a1,0x86,0x8e,0x0ff};//字型码表格
//                0    1     2     3      4    5     6     7     8     9    A      B     C     D     E    F   无字符
int number=0;//被显示的数
unsigned int count=0;//定时计次
int temp=0;
void delay(int i)//程序延时子程序,参数为时间长短
{
int j;//延时变量
        j=1;
        while(j<=i)//延时变量超过延时参数,停止延时
                {
                        j++;//延时变量增加
                }
}
void t0() interrupt        3
{
        TH1=0x0e1;TL1=0x0f6;
        count++;
        if(count>=100)
        {
         count=0;
         if(keynum==1)
         {
                temp++;
          if(temp>100)
          {temp=0;}
         }
          if(keynum==2)
          {temp--;
           if(temp<0)
           {temp=100;}
          }
          if(keynum==3)
          {temp++;
           if(temp>50)
           {temp=0;}
          }
          if(keynum==4)
          {temp--;
           if(temp<0)
           {temp=50;}
          }
        }
}
void dis()//显示数的百、十、个位
{
               
                P32=0;
                P33=1;
                P34=1;
                P1=zxm[temp/100];
                delay(300);
               
                P32=1;
                P33=0;
                P34=1;
                P1=zxm[(temp%100)/10];
                delay(300);
               
                P32=1;
                P33=1;
                P34=0;
                P1=zxm[temp%10];
                delay(300);
}
key()
{
        P00=0;if(P07==0){keynum=1;temp=0;}
              if(P06==0){keynum=2;temp=100;}
                  if(P05==0){keynum=3;temp=0;}
                  if(P04==0){keynum=4;temp=50;}
}
main()//主程序
{
TR1=1;
TMOD=0x010;
TH1=0x0e1;
TL1=0x0f6;
ET1=1;EA=1;
while(1)
{
  key();
  dis();
}
}
回复

使用道具 举报

5#
ID:141330 发表于 2016-10-5 00:11 | 只看该作者
#include <reg52.h>//寄存器定义文件
//数码管定时显示数字递增
sbit        P20=P2^0;//S1
sbit        P32=P3^2;//S2
sbit        P33=P3^3;//S3
sbit        P34=P3^4;//S4
sbit P00=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
int keynum;
int code zxm[]={0xc0,0x0f9,0x0a4,0x0b0,0x099,0x092,0x082,0x0f8,0x080,0x090,0x088,0x083,0x0c6,0x0a1,0x86,0x8e,0x0ff};//字型码表格
//                0    1     2     3      4    5     6     7     8     9    A      B     C     D     E    F   无字符
int number=0;//被显示的数
unsigned int count=0;//定时计次
int temp=0;
void delay(int i)//程序延时子程序,参数为时间长短
{
int j;//延时变量
        j=1;
        while(j<=i)//延时变量超过延时参数,停止延时
                {
                        j++;//延时变量增加
                }
}
void t0() interrupt        3
{
        TH1=0x0e1;TL1=0x0f6;
        count++;
        if(count>=100)
        {
         count=0;
         if(keynum==1)
         {
                temp++;
          if(temp>100)
          {temp=0;}
         }
          if(keynum==2)
          {temp--;
           if(temp<0)
           {temp=100;}
          }
          if(keynum==3)
          {temp++;
           if(temp>50)
           {temp=0;}
          }
          if(keynum==4)
          {temp--;
           if(temp<0)
           {temp=50;}
          }
        }
}
void dis()//显示数的百、十、个位
{
               
                P32=0;
                P33=1;
                P34=1;
                P1=zxm[temp/100];
                delay(300);
               
                P32=1;
                P33=0;
                P34=1;
                P1=zxm[(temp%100)/10];
                delay(300);
               
                P32=1;
                P33=1;
                P34=0;
                P1=zxm[temp%10];
                delay(300);
}
key()
{
        P00=0;if(P07==0){keynum=1;temp=0;}
              if(P06==0){keynum=2;temp=100;}
                  if(P05==0){keynum=3;temp=0;}
                  if(P04==0){keynum=4;temp=50;}
}
main()//主程序
{
TR1=1;
TMOD=0x010;
TH1=0x0e1;
TL1=0x0f6;
ET1=1;EA=1;
while(1)
{
  key();
  dis();
}
}
回复

使用道具 举报

6#
ID:141330 发表于 2016-10-5 12:52 | 只看该作者
来人啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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