找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3562|回复: 8
收起左侧

做实验为什么调试可以运行烧录就没办法显示了

[复制链接]
ID:128019 发表于 2016-6-26 14:53 | 显示全部楼层 |阅读模式
做温度计的实验
可以在keil上调试全速运行数码管有显示
但是  烧录到单片机就没办法了
/******************************************************************
     ** FileName:          温度测量实验
         ** Copyright (c) 2000-2011 **** The company technology development department
     ** Creater:
     ** Date:
     ** Modifier: ZQS
     ** Date:     2011-7
     ** Comment:  QQ群:154270214
     ** version:  VER 1.0
********************************************************************/
#include <absacc.h>                                                                        //包含了绝对地址访问的宏定义
#include <reg51.h>
#define LEDLen 6
#define MODE 0x03
#define CS0809 XBYTE[0xa000]                                                // YC2片选ad0809  定义数组符CS0809的实际含义为XBYTE[0xa000],即实际地址为外部寻址空间中的0xa000
#define CAddr  XBYTE[0xe100]                                                // 8155命令控制字地址
#define OUTBIT XBYTE[0xe101]                                                // 位控制口 8155PA口
#define CLK164 XBYTE[0xe102]                                                // 段控制口(接164时钟位)8155PB口
#define DAT164 XBYTE[0xe102]                                                 // 段控制口(接164数据位)
#define IN     XBYTE[0xe103]                                                 // 键盘读入口  8155PB口
       
         
unsigned char LEDBuf[LEDLen];                                                  // 显示缓冲
code unsigned char LEDMAP[] = {                                          // 八段管显示码 0-F
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,       
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
/*****************************************************************
    ** Function:  Delay
    ** Input: unsigned char CNT
    ** Output:
    ** Description:         延时函数
****************************************************************/
       
void Delay(unsigned char CNT)
        {
unsigned char i;                                                                        //定义一个无符号变量
       
while (CNT-- !=0)                                                                        //while判断语句
for (i=100; i !=0; i--);                                                        //for循环
        }
/*****************************************************************
    ** Function:        DisplayLED() 数码管显示函数
    ** Input:
    ** Output:                
    ** Description:         通过164串入并出输出数码管段码,通过Pos移位操作给出位码
****************************************************************/       
void DisplayLED()
        {
unsigned char i, j;
unsigned char Pos;
unsigned char LED;
       
Pos = 0x20;                                                                                  // 从左边开始显示
for (i = 0; i < LEDLen; i++) {
OUTBIT = 0;                                                                             // 关所有八段管
LED = LEDBuf;
for (j = 0; j < 8; j++) {                                                   //  送164 串入并出高位移出操作
if (LED & 0x80) DAT164 = 1; else DAT164 = 0;//如果高位为一则选择,输出dat引脚输出为高否则为1
CLK164 = CLK164|0x02;                                                                // PB1=1时钟传送
CLK164 = CLK164&0xfd;                                                                // PB1=0
LED <<= 1;
  }
OUTBIT = Pos;                                                                                  // 显示一位八段管
Delay(1);
Pos >>= 1;                                                                                     // 显示下一位
  }
OUTBIT = 0;                                                                             // 关所有八段管
        }
unsigned char Read0809()
{
  unsigned char i;
  CS0809 = 0;                                                                // 起动 A/D
  for (i=0; i<0x20; i++) ;                                                   // 延时 > 100us
  return(CS0809);                                                            // 读入结果
}
/*****************************************************************
     ** Function:  main()
     ** Input:
     ** Output:
     ** Description:
****************************************************************/
void main()
{
  
   unsigned char j;
   CAddr= MODE;
   while(1) {                                                                                 //数码管初始化“H---00”
     LEDBuf[0] = 0Xb8;
     LEDBuf[1] = 0X40;
     LEDBuf[2] = 0X40;
     LEDBuf[3] = 0X40;
     LEDBuf[4] = 0X00;
     LEDBuf[5] = 0X00;
   
  
     LEDBuf[5] = LEDMAP[Read0809() & 0x0f] ;                 //        数码管个位显示
     LEDBuf[4] = LEDMAP[Read0809()>>4 & 0x0f] ;                 //        数码管十位显示
     for(j=0; j<5; j++)
       DisplayLED();                                                                    //数码管显示函数调用
   }
}

回复

使用道具 举报

ID:128189 发表于 2016-6-26 17:20 | 显示全部楼层
没有遇到过。。。
回复

使用道具 举报

ID:128093 发表于 2016-6-26 18:43 | 显示全部楼层
keil上数码管显示是什么意思?是可以仿真,实际烧入不能不能显示,那就要看硬件了
回复

使用道具 举报

ID:7485 发表于 2016-6-26 21:19 | 显示全部楼层
硬件和软件是否对应?比如IO口?晶振?
回复

使用道具 举报

ID:110895 发表于 2016-6-27 06:18 | 显示全部楼层
MCU是否运行,晶振是否起振。
回复

使用道具 举报

ID:128019 发表于 2016-6-27 15:53 | 显示全部楼层
WSHXM 发表于 2016-6-26 18:43
keil上数码管显示是什么意思?是可以仿真,实际烧入不能不能显示,那就要看硬件了

就是使用keil进行硬件仿真的时候 数码管有显示
但是烧录进单片机的时候  数码管就不显示了
回复

使用道具 举报

ID:128308 发表于 2016-6-27 16:36 | 显示全部楼层
线路是否断开
回复

使用道具 举报

ID:128444 发表于 2016-6-28 16:19 | 显示全部楼层
晶振片是否起振
回复

使用道具 举报

ID:128454 发表于 2016-6-28 17:20 | 显示全部楼层
检擦电路,看是否虚焊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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