cpubbs 发表于 2004-11-6 03:23:03

8279基本启动程序

//8279基本启动程序 2003.5.15
//在这里,采用总线方式对8279进行访问,连接方式如下:
//P0:8279总线
//P2:P20~8279A0,P22~8279\CS
//rd,wr,各自相连。
//8279IRQ经过非门连接51INT,用于键盘输入时的中断
//8279OUTA的4个脚接7448BCD译码,SL0~3脚接138列译码
//ALE接8279CLK。
//AT89C51,6M

//本程序开始时没有显示,当按键后,将在预先设定的位置(第三位)显示键盘码,如果按
了第16个键,即键盘码0X0F,那么就全屏显示“0”

#include"reg51.h"

#define P8279 0x0               //a0=0,data
#define P8279A 0x0100             //a0=1,COMMEND
#define uchar unsigned char
#define uint unsigned int
uchar key;


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


void SendCom(uchar c8279com)                     //1.send commend
{
*((uchar xdata *)P8279A)=c8279com;
Delay(); //千万注意,一定要延时!!延短点都不行
}


void SendData(uchar c8279data)                  //2.send data
{
*((uchar xdata *)P8279)=c8279data;
Delay();
}

uchar GetData()                              //3.return data
{
return*((uchar xdata *)P8279);
}



void isr_int() interrupt 0         //4.intreeup for push key ;
{
   SendCom(0xdf);               //清屏
   SendCom(0x40);               //发出读键盘命令
   key=GetData();               //读键盘
   
if(key<0x0f)                  //这里按顺序接了16个键,返回的键盘码为0~0X0F
   {
   // SendCom(0x80);
   // SendData(key);
      key=key<<4;               //因为显示输出接8279AOUT脚,需要移位。
      SendCom(0x83);            //写LED命令,在第三个数码管上显示
      SendData(key);            //写LED显示内容
      }
   else
   SendCom(0xd3);               //如果按了最后一个键0X0F,就全屏显示0
}

void init_main()
{
P0=0XFF;
P1=0XFF;
P2=0XFF;
P3=0XFF;
Delay();
IT0=1;
IE0=1;
EX0=1;
EA=1;
}

main()
{
init_main();



SendCom(0x00);    //初始化 如没有特别要求,一般都可以这样初始化“0X00”
SendCom(0x2a);   //分频10
SendCom(0xdf);   //清屏,数据输出0XFF到OUTA,B脚,7448译码结果为不显示。

while(1);
    }
页: [1]
查看完整版本: 8279基本启动程序