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]