| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2257 人关注过本帖
标题:在郭天祥的学习板上实现十进制数与十六进制数的转换,程序出现了一些问题, ...
只看楼主 加入收藏
新学羊
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-11-5
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
在郭天祥的学习板上实现十进制数与十六进制数的转换,程序出现了一些问题,请各位大神指点小弟
我想实现在6位数码管上前三位用矩阵键盘输入十进制数,在后两位数码管上输出十六进制的数。(用的是郭天祥的学习板)
求教各位高手指点指点,哪里有问题
#include<reg52.h>  //52系列单片机头文件
  #define uchar unsigned char
  #define uint unsigned int
  sbit dula=P2^6; //定义段码锁存允许端
 sbit wela=P2^7; //定义译码器 A0端

   uchar code table[]={
   0x3f,0x06,0x5b,0x4f,
   0x66,0x6d,0x7d,0x07,
   0x7f,0x6f,0x77,0x7c,
   0x39,0x5e,0x79,0x71};
   uchar key;
   void delayms(uint xms)
   {
       uint i,j;
       for(i=xms;i>0;i--)   //i=xms即延时约xms毫秒
        for(j=110;j>0;j--);
        }










    void display(uchar num)//显示函数送段选和位选数据
    {
     while(1)
     {
     P0=0x00;
     dula=1;
     P0=table[key/100];//分离要显示的三位数
     dula=0;
     P0=0xff;
         wela=1;
         P0=0xfe;
         wela=0;
     delayms(5);

      dula=1;
     P0=table[key%100/10];
     dula=0;
     P0=0xff;
      wela=1;
         P0=0xfd;
         wela=0;
         delayms(5);

     dula=1;
     P0=table[key%10];
     dula=0;
     P0=0xff;
         wela=1;
         P0=0xfb;
         wela=0;
     delayms(5);

      dula=1;
     P0=table[key/16];
     dula=0;
     P0=0xff;
         wela=1;
         P0=0xef;
         wela=0;
     delayms(5);

     dula=1;
     P0=table[key%16];
     dula=0;
     P0=0xff;
         wela=1;
         P0=0xdf;
         wela=0;
   
     delayms(5);
         }
     }















     void matrixkeyscan()
     {
        uchar temp,key;
        
        P3=0xfe;//第一
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
         delayms(10);
         temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
         temp=P3;
        switch(temp)
         {
                   if(key!=0)
         {
         key=key*10+0:
         }
         case 0xee:
         key=0;
          break;
                  if(key!=1)
         {
         key=key*10+1:
         }
                 case 0xde:
         key=1;
         break;
                 if(key!=2)
         {
         key=key*10+2:
         }
                 case 0xbe:
         key=2;
         
         break;
                 if(key!=3)
         {
         key=key*10+3:
         }
                  case 0x7e:
         key=3;
          break;            
               }
         while(temp!=0xf0)//等待按键释放
         {
         temp=P3;
         temp=temp&0xf0;
         }
         display(key);//显示
         }
         }

                P3=0xfd;//第一
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
         delayms(10);
         temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
         temp=P3;
         switch(temp)
         {
                   if(key!=4)
         {
         key=key*10+4:
         }
         case 0xed:
         key=4;
          break;
                  if(key!=5)
         {
         key=key*10+5:
         }
                 case 0xdd:
         key=5;
         break;
                 if(key!=6)
         {
         key=key*10+6:
         }
                 case 0xbd:
         key=6;
         
         break;
                 if(key!=7)
         {
         key=key*10+7:
         }
                  case 0x7d:
         key=7;
          break;
         }
         while(temp!=0xf0)//等待按键释放
         {
         temp=P3;
         temp=temp&0xf0;
         }
         display(key);//显示
         }
         }
                P3=0xfb;//第一
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
         delayms(10);
         temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
         temp=P3;
         switch(temp)
         {
                 if(key!=8)
         {
         key=key*10+8:
         }
         case 0xeb:
         key=8;
         break;
                  if(key!=9)
         {
         key=key*10+9:
         }
                 case 0xdb:
         key=9;
         break;
                 case 0xbb;//致零
         key=0;
         break;
          while(temp!=0xf0)//等待按键释放
          {
         temp=P3;
         temp=temp&0xf0;
         }
         display(key);//显示
         }
         }
         }
         }
         void main()
         {
         while(1)
         {
         matrixkeyscan();//不停调用键盘扫描程序
         }
         }
搜索更多相关主题的帖子: 十六进制 include 单片机 十进制 数码管 
2013-11-05 19:52
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
关注

DO IT YOURSELF !
2013-11-08 09:21
快速回复:在郭天祥的学习板上实现十进制数与十六进制数的转换,程序出现了一些问 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025895 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved