原创 8279数控电流源

2009-8-25 16:00 1958 3 4 分类: MCU/ 嵌入式

我用8279做了一个数控电路源的赛题,但是我在protues中老是仿真不出来


为什么呢?请各路高手指点指点。


原理图:


点击看大图


调试的程序:为了调试,我只发送命令字,没有进行进一步的操作,但是,就发送命令都没有仿真成功,我就纳闷了;


#include  "reg52.h"


#define data8279 0x4000                 //a0=0,data 地址,~cs=0 A0=0 读写数据
#define comand8279 0x4001            //a0=1,COMMEND 地址  ~cs=0,A0=1发送命令,读取状态字
#define writeadd0832 0x8000     //DA0832的地址,
#define uchar unsigned char
#define uint unsigned int
uchar keydata[16]={0xc0,0xc1,0xc2,0xc3,0xc8,0xc9,0xca,0xcb,0xd0,0xd1,0xd2,0xd3,0xd8,0xd9,0xda,0xdb};
uchar key;



void Delay()                                     //DELAY FOR A MONENT
{
uint i;
for(i=0;i<200;i++);
}



void SendCom(uchar c8279com)                     //1.send commend  发送命令,c8279com是命令字
{
*((uchar xdata *)comand8279)=c8279com;     // (uchar xdata *)P8279A强行把数据转换成指向外部RAM储存地址为P8279的单元的指针,*((uchar xdata *)P8279A)就是给外部RAM储存地址为P8279的单元赋值
Delay(); //千万注意,一定要延时!!延短点都不行
}



void SendData(uchar c8279data)                  //2.send data 发送数据   c8279data是数据,显示数据
{
  *((uchar xdata *)data8279)=c8279data;
  Delay();
}
 
 uchar GetState()         //读取状态字
 {
   return*((uchar xdata *)comand8279);
 }
uchar GetData()                                //3.return data 读取按键值, 返回按键值
{
return*((uchar xdata *)data8279);
}


 


void isr_int() interrupt 0         //4.intreeup for push key ;
{
   SendCom(0xdf);                 //清屏 110 1 1111 同时键盘值也清零 显示RAM置一 为什么要清零呢???????????
   SendCom(0x40);                 //发出读键盘命令 010 0 0000
   key="GetData"();                 //读键盘
 
  switch(key)
  {
    case 0xc0:SendCom(0x80); SendData(0x3f);break;
 case 0xc1:SendCom(0x80); SendData(0x06);break;
 case 0xc2:SendCom(0x80); SendData(0x5b);break;
 case 0xc3:SendCom(0x80); SendData(0x4f);break;
 case 0xc8:SendCom(0x80); SendData(0x66);break;
 case 0xc9:SendCom(0x80); SendData(0x6d);break;
 case 0xca:SendCom(0x80); SendData(0x7d);break;
 case 0xcb:SendCom(0x80); SendData(0x07);break;
 case 0xd0:SendCom(0x80); SendData(0x7f);break;
 case 0xd1:SendCom(0x80); SendData(0x6f);break;
 case 0xd2:SendCom(0x80); SendData(0x77);break;
 case 0xd3:SendCom(0x80); SendData(0x7c);break;
 case 0xd8:SendCom(0x80); SendData(0x39);break;
 case 0xd9:SendCom(0x80); SendData(0x5e);break;
 case 0xda:SendCom(0x80); SendData(0x79);break;
 case 0xdb:SendCom(0x80); SendData(0x71);break;
 default: SendCom(0xdf);break;
  }
  /****************    
  if(key<0x0f)                    //这里按顺序接了16个键,返回的键盘码为0~0X0F
     {
     // SendCom(0x80);      //100 0 0000 发送读显示RAM命令
     // SendData(key);      //把按键值发送给显示RAM
      key="key"<<4;                 //因为显示输出接8279AOUT脚,需要移位。
      SendCom(0x83);              //1000 0011这是读取显示RAM而不是写啊???? 写显示RAM命令:011 0 0011 应该是63吧??? 写LED命令,在第三个数码管上显示
      SendData(key);              //写LED显示内容
      }
   else
   SendCom(0xd3);                 //如果按了最后一个键0X0F,就全屏显示0
    *****************/
}


void init_main()
{
P0=0XFF;
P1=0XFF;
P2=0XFF;
P3=0XFF;
Delay();
IT0=1;  //外部中断0时促发方式,跳沿触发方式,
IE0=1;  //外部中断0中断请求标志位,下降沿触发,使IE0置1,申请中断,硬件清零。一般IE0=0
EX0=1; //允许外部中断0申请中断,中断允许位
EA=1; //总中断允许位
}


main()
{
init_main();


 


SendCom(0x00);    //初始化 键盘 显示方式命令字000,如没有特别要求,一般都    以这样初始化“0X00”8位左输入,编码扫描双键锁定
SendCom(0x22);   //时钟命令字 001 分频10外部CLK分频    0010 1010
SendCom(0xdf);   //清除命令,110 101 1 1 显示RAM全部置10。键盘RAM 清空 清屏,数据输出0X00到OUTA,


while(1);
    }


仿真结果


3f7ac08e-d71a-44ba-9820-49ed423d6a38.jpg


仿真的时候,8279的状态居然没变!


显示RAM根本就没有清零!


为什么啊?

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

xucun915_925777961 2009-8-26 10:18

加油!
相关推荐阅读
用户193625 2010-02-27 18:49
引用文摘
  虽然平时的工作挺忙,也时常需要加班,但我还是坚持利用晚上、早上及周末等的空余时间学习,因为我知道工程师的职业生涯是短暂的,只有不断的保持学习的心态,才能让它一直延续。同时也意识到我们的产品与国外同...
用户193625 2009-10-29 21:59
幸福在那里观后感
幸福在哪里 观后感人穷志不穷!刚开始看到剑平对若谷又是发脾气,又是骂,甚至若谷做了好事,剑平也不领情(虽然他还是很爱她),如此这般,实在是难以理解。但是仔细一想,我自己不也和他一样吗?!自己也是农村来...
用户193625 2009-10-21 10:45
一位dsp高手的经验之谈
dsp高手经验-新手快来看啊第一次发帖,希望对大家有所帮助DSP高手经验介绍一. 我是已经从事DSP开发有几年了,看到许多朋友对DSP的开发非常感兴取,我结合这几年对DSP的开发写一写自己的感受,一家...
用户193625 2009-10-18 12:04
怎样做职业规划
大学职业生涯规划范文第一篇 大学四年规划    我正式踏入了大学的校门,开始了我曾梦寐以求的大学生活。    人活着不应该庸庸碌碌,要有理想,有勇气,有追求梦想的毅力与恒心。大学是人生中最灿烂美好的年...
用户193625 2009-10-18 11:48
大学生职业生涯规划
对大学生职业生涯规划的思考 摘要:在面对就业压力日趋激烈的今天,高校对学生的就业指导工作不是短期性行为。高校应把大学生职业生涯规划贯穿在学生就业指导全过程,作为高校就业指导工作的重要手段和核心内容...
用户193625 2009-10-18 11:38
如何管理自己
如何管理自己:自我管理,做最好的自己2009-09-01 16:11管理自己:人类首先要面对的是自己1. 时间管理 (合理分配自己的时间,工作,休息,家人,朋友 )2. 知识管理(知道自己的知识结构,...
EE直播间
更多
我要评论
1
3
关闭 站长推荐上一条 /3 下一条