📄 0832cpld.c
字号:
/*7218在硬件译码的时候,低四位数据进行译码,最高位控制小数点,其余三位无效*/
// distab保存要显示的8位数据(每一位为一个字节)
// ledtab为7218软件译码字型表
#include<reg52.h>
//#include<intrins.h>
#include<absacc.h>
#define DisCmd XBYTE [0xC100] //7218控制字地址
#define DisData XBYTE [0xC000] //7218数据口地址
//#define DA0832_1 XBYTE[0X6000]
//#define DA0832_2 XBYTE[0X8000]
#define DA0832 XBYTE[0XA000]
#define scode 0xb0 //7218软件译码方式命令字
#define bcode 0x90 //B码译码方式命令字
#define hexcode 0xd0 //软件译码方式命令字
#define unchar unsigned char
sbit P3_0=P3^0;
sbit P1_0=P1^0;
char keynum; //按键号
char ledcursor=0; //保存光标当前位置
char distab[8]={0x2,0x3,0x8,0x00,0x10,0x10,0x10,0x10} ; // 要显示的内容
char ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
//0, 1, 2, 3, 4, 5, 6, 7
0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,0x80 };
//8 ,9 ,a ,b ,c ,d ,e ,f ,熄灭
int delay=0;
//***************************************************************************************
char code sintab[]={ 128,140 ,152 ,164 ,176 ,187 ,198 ,208 ,217 ,226 ,233,
240 ,245 ,249 ,252 ,254 ,254 ,254 ,252 ,249 ,245,
240 ,233 ,226 ,217 ,208 ,198 ,187 ,176 ,164 ,152,
140 ,128 ,115 ,103 ,91 ,79 ,68 ,57 ,47 ,38,
29 ,22 ,15 ,10 ,6 ,3 ,1 ,1 ,1 ,3,
6 ,10 ,15 ,22 ,29 ,38 ,47 ,57 ,68 ,79,
91 ,103 ,115 ,127 ,140 ,152 ,164 ,176 ,187 ,198,
208 ,217 ,226 ,233 ,240 ,245 ,249 ,252 ,254 ,254,
254 ,252 ,249 ,245 ,240 ,233 ,226 ,217 ,208 ,198,
187 ,176 ,164 ,152 ,140 ,128 ,115 ,103 ,91 ,79,
68 ,57 ,47 ,38 ,29 ,22 ,15 ,10 ,6 ,3,
1 ,1 ,1 ,3 ,6 ,10 ,15 ,22 ,29 ,38,
47 ,57 ,68 ,79 ,91 ,103 ,115
};
//***************************************************************************************
void display()
{
unchar i;
DisCmd=scode; //采用软件译码
for(i=0;i<8;i++) //将distab中的数据送如7218
{
DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
}
}
//**************************************************************************************
void clock_initial()
{
TMOD=0x01;
TR0=0;
TF0=0;
TH0=0X10;
TL0=0X10;
TR0=1;
}
//**************************************************************************************
//**************************************************************************************
void keyprg(unchar key) //键盘键值执行的程序
{
if(key==0x00)
delay+=1;
if(key==0x01)
delay-=1;
}
//**************************************************************************************
void intt0() interrupt 0
{
EX0=0; //关键盘中断,禁止相应其他按键
keynum=P1; //从p1口读入键盘值
keynum=keynum&0x0f; //取低四位;
keyprg(keynum);
EX0=1; //开中断
}
//**************************************************************************************
void clock0(void) interrupt 1
{
P3_0=!P3_0;
clock_initial() ;
}
//**************************************************************************************
void main()
{
char xdata *cpld;
int i,j;
cpld=0xA0ff;
EX0=1;
EA=1;
display();
while(1)
{
for(i=0;i<128;i++)
{
*cpld=sintab[i];
j=delay;
for(j;j>0;j--);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -