微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > proteus编译成功但是仿真不出 T T

proteus编译成功但是仿真不出 T T

时间:10-02 整理:3721RD 点击:
用Proteus进行仿真编译也成功了,可是就是实现不了功能。  程序也检查不出什么问题。   求解大神怎么破
    #include<reg51.h>
#define     CLEARSCREEN     LCD_write_command(0x01)
#define uint unsigned int
#define uchar unsigned char
/**************定义接口************************/
#define     LCDIO      P0
#define     KEYBOARD   P1//保留
sbit LCD1602_RS=P2^0;   
sbit LCD1602_RW=P2^1;   
sbit LCD1602_EN=P2^2;   
/************************************************/
code uchar mayuan[16]={'0','1','2','3','4','5','6','7','8','9','0','/','*','-','+','='};//不错,这个比较明了
unsigned char code keycode[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,
0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};//键盘编码值()
int i,j,k=1,s;//
int t,t1,t2,a[];//
void delay(uchar);//延时
/**************定义函数************************/
void LCD_init(void);//初始化函数
void delay_nms(unsigned int n);//延时函数
void LCD_write_command(unsigned char command);//写入指令函数
void LCD_write_dat(unsigned char dat);//写入数据函数
void delay_10ms();
initial();
uchar keyscan();//键盘扫描函数
calc(uchar);//计算函数
uchar num,temp,key,keynum;
void main()//主函数
{
LCD_init();
delay_nms(100);
while(1)
{
  initial();//有中断
  KEYBOARD =0xf0;//键盘的列值全置高电平
}
}
/**********************************开中断***************************************/
initial()
{
EA=1;//总开关
EX0=1;//中断方式0开启
IT0=0;
}
/*******************************************************************************/
/*********************************中断函数************************************/
void inter0() interrupt 0
{
unsigned char n;
delay_10ms();//延时
if(INT0==0)//没键按下
{
EX0=0;//关中断
n=keyscan();
calc(n);
EX0=1;//开中断
KEYBOARD=0xf0;//键盘的列值全置高电平
}
}
/************************************************************************/
calc(uchar n)
{
if(n<10)//键值小于10
  {
   t1=t1*10+n;
   LCD_write_command(0x00);//写命令语句
   LCD_write_dat(mayuan[n]);//写数据函数
  }
  else
   {
    if(n==10){LCD_init();t1=0;t2=0,t=0;k=1;}
     else{
      if(n<15){
       t2=t1;t1=0;j=n;
       LCD_write_command(0x00);
      LCD_write_dat(mayuan[n]);}
      else{
       LCD_write_command(0x00);
       LCD_write_dat(mayuan[n]);
      switch(j){
       case 11:
        t=t2/t1;
        break;
       case 12:
        t=t2*t1;
        break;
       case 13:
        t=t2-t1;
        break;
       case 14:
        t=t2+t1;
        break;
        }
       if(t<=9){ LCD_write_command(0x00);
       LCD_write_dat(t+48);}
       if(t>9)
        {
         while(t>9)
         {
          s=t%10;
          t=t/10;
          a[k]=s;
          k++;
         }
         if(t<=9){
          LCD_write_command(0x00);
         LCD_write_dat(t+48);}
         for(i=k-1;i>=1;i--)
         {
          LCD_write_command(0x00);
          LCD_write_dat(a[i]+48);
         }
        }
       }
      }
     }
    }
/*****************************************键盘扫描函数************************************/
uchar keyscan()//键盘扫描
{
KEYBOARD=0xf0;//键盘的列值全置高电平
delay_10ms();//延时
if(KEYBOARD!=0xf0)//有键按下
{
temp=KEYBOARD;//保存键盘此刻的键植
delay_10ms();//延时
if(KEYBOARD==temp)//再次确认键盘是否被按下
{
uchar i;
KEYBOARD=0x0f;//键盘的行值全置高电平
delay_10ms();//10MS时间延时
keynum=temp | KEYBOARD;//保存键盘的行值
while(KEYBOARD!=0x0f);//松手检测
for(i=0;i<16;i++)
if(keycode[i]==~keynum)
return (i);
}
}
return -1;
}
/******************************************************************************/
/********** 延时**********************/
void delay_nms(unsigned int n)      
{
       unsigned int i=0,j=0;
       for (i=n;i>0;i--)
       for (j=0;j<10;j++);  
}
void delay_10ms()//10MS延时
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<120;j++);
}


你是否是在keil编写的程序,如果是在keil编写的程序,需要在keil的Tool项重新设置引导程序。

你是否安装KEIL与proteus连接软件,你是否画对电路,你是否编译成功(实现所需要的功能,而不是程序没有错误),还有你是否将编译链接生成的.hex文件添加到仿真的单片机中!

我发现你的按键电路有问题,正确的连接应该是这样的。你试试看。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top