📄 main.c
字号:
/*-------------------MB90092 Demoboard Program----------------------*/
/*
本程序是针对富士通公司的字符芯片90092开发的演示板程序,
处理器用89c935,Clock 为 10MHz,ANSI C.
*/
#include "test.h"
#define PUL0 IO_PUL0.byte
#define byte unsigned char
byte flag1,flag2,m,n,flag,singal;
int count;
/********************************/
/*
程序名:send_byte()
参 数:I_data
返回值:无
功 能:将I_data值送至MB90092
*/
/********************************/
void send_byte(byte I_data)
{
char i;
unsigned short data;
cs=0x00;
for(i=0;i<8;i++)
{
slk=0x00;
data = 0x01 & I_data;
if(data == 0x00)
sin = 0x00;
else
sin = 0x01;
I_data=I_data >> 1;
slk=0x01;
}
cs=0x01;
}
/*------------------------------------------------*/
/*
延时程序
*/
void delay(void)
{
byte i;
for(i=0;i<0xff;i++)
{
__asm("nop");
}
}
/*------------------------------------------------*/
/*
彩色初始化
*/
void disp_color(byte row)
{
byte temp1,temp2;
temp1=row;
temp1=((temp1>>2)&0x3)+0x84;
temp2=row;
temp2=((temp2<<5)&0x60)+1;
send_byte(temp1);
send_byte(temp2);
send_byte(0x88);
send_byte(0x0);
send_byte(0x90);
send_byte(0x0);
}
/* row:行,col:列,addr:地址,flag:尺寸,bc:背景颜色,cc:前景颜色,at:特殊显示标记*/
void disp_num(byte row,byte col,int addr,byte flag,byte bc,byte cc,byte ff)
{
byte temp1,temp2,color;
temp1=row;
temp1=((temp1>>2)&0x3)+0x80;
temp2=row;
temp2=((temp2<<5)&0x60)+col;
send_byte(temp1);/*command 0*/
send_byte(temp2);
send_byte(0xb0+flag);/*command 6*/
send_byte(0x20+row);
if (singal==4)
{
cc=7;
bc=0;
}
color=((cc<<4)&0x70)+bc;
send_byte(0x88+ff);
send_byte(color);/*command1-1*/
send_byte(0x90+addr/128);/*command2-1*/
send_byte(addr%128);
}
/*芯片初始化程序*/
void init_ic(byte bc)
{
byte i,j;
cs=0;
delay();
cs=1;
delay();
cs=0;
delay();
cs=1;
delay();
cs=0;
delay();
cs=1;
delay();
cs=0;
delay();
cs=1;
send_byte(0x98);/*--------command 3----------*/
send_byte(0); /*FIL 位,此命令可以不动 */
send_byte(0xaa);/*--------command 5----------*/
send_byte(0x10);/*;KID=0;APC与颜色有关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ0 BH2 BH1 BH0 W3 W2 W1 W0*/
send_byte(0xbd);/*--------command 7 ----------*/
send_byte(0x27);/*垂直位置设定
;10111 EC LP FO
;00 Y5 Y4 Y3 Y2 Y1 Y0
;EC:同步信号选择 EC=0 只用行同步信号 EC=1 行场共用
;LP:LP=0 正常操作
;LP=1 NTSC/PAL 格式
;FO:颜色信号输出控制
;Y5---Y0垂直位置设定*/
send_byte(0xc4);/*--------command 8------------*/
send_byte(0x02);/*水平位置设定*/
send_byte(0xc8);/*--------command 9---------*/
send_byte(0x00);
/*------背景设置1-------*/
send_byte(0xd1);/*--------command 10----------*/
send_byte(0x38+bc); /*1101000 RB
0 BK CC BC UC UG UR UB
RB:背影(solid-fill)选择
BK:闪烁;
CC:彩色/黑白选择
BC:背景颜色
UC:屏幕颜色
UG,UR,UB 颜色选择*/
send_byte(0xa2+singal);/*-------command 4----------*/
send_byte(0x2b);
for(i=0;i<12;i++)
{
disp_color(i);
}
/*全屏清屏*/
for(j=0;j<13;j++)
{
for(i=0;i<24;i++)
{
disp_num(j,i,62,0,bc,0,0);
}
}
/*显示FUJITSU标记*/
disp_num(0,20,0x10,0,1,0,0);
disp_num(0,21,0x11,0,1,0,0);
disp_num(0,22,0x12,0,1,0,0);
disp_num(0,23,0x13,0,1,0,0);
disp_num(1,20,0x20,0,1,0,0);
disp_num(1,21,0x21,0,1,0,0);
disp_num(1,22,0x22,0,1,0,0);
disp_num(1,23,0x23,0,1,0,0);
}
/*键盘扫描程序*/
void scan_key()
{
if( key1==0)
{
singal=0x04;
send_byte(0xd1);
send_byte(0x7);
while (key1==0)
{
}
}
if( key2==0)
{
singal=0;
send_byte(0xd1);
send_byte(0x38+7);
while (key2==0)
{
}
}
if( key3==0)
{
flag++;
if (flag>5) flag=0;
init_ic(7);
while (key3==0)
{
}
}
}
/*显示主屏*/
void disp_main()
{
byte i;
i=3;
send_byte(0xa2+singal);
send_byte(0x29);
disp_num(5,i,'M',2,1,1,0);
disp_num(5,i+1,'B',2,1,1,0);
disp_num(5,i+2,'9',2,1,1,0);
disp_num(5,i+3,'0',2,1,1,0);
disp_num(5,i+4,'0',2,1,1,0);
disp_num(5,i+5,'9',2,1,1,0);
disp_num(5,i+6,'2',2,1,1,0);
disp_num(6,i+2,0xb0,2,2,2,0);
disp_num(6,i+3,0xb1,2,2,2,0);
disp_num(6,i+4,0xb2,2,2,2,0);
disp_num(6,i+5,0xb3,2,2,2,0);
for(i=0;i<100;i++)
{
delay();
scan_key();
}
}
/*全屏显示*/
disp_all()
{
byte i;
send_byte(0xaa);/*--------command 5----------*/
send_byte(0x15);
for (i=0;i<24;i++)
disp_num(0,i,i%10,0,0,7,1);
for (i=0;i<24;i++)
disp_num(1,i,0x30+i%10,0,1,6,1);
for (i=0;i<24;i++)
disp_num(2,i,0x41+i,0,2,0,1);
for (i=0;i<24;i++)
disp_num(3,i,0x61+i,0,3,7,1);
for (i=0;i<24;i++)
disp_num(4,i,0xC0+i,0,7,1,1);
for (i=0;i<24;i++)
disp_num(5,i,0xE0+i,0,5,1,1);
for (i=0;i<24;i++)
disp_num(6,i,0x100+i,0,6,1,1);
for (i=0;i<24;i++)
disp_num(7,i,0x120+i,0,7,0,1);
for (i=0;i<18;i++)
disp_num(8,i+3,0x162+i,0,0,7,1);
for (i=0;i<18;i++)
disp_num(9,i+3,0x180+i,0,i%7+1,0,1);
for (i=0;i<18;i++)
disp_num(10,i+3,0x180+i,0,7,0,1);
i=5;
disp_num(11,i+1,'0',0,7,1,1);
disp_num(11,i+2,'2',0,7,2,1);
disp_num(11,i+3,'1',0,7,3,1);
disp_num(11,i+4,0xa,0,7,4,1);
disp_num(11,i+5,'6',0,7,5,1);
disp_num(11,i+6,'3',0,7,6,1);
disp_num(11,i+7,'3',0,7,1,1);
disp_num(11,i+8,'5',0,7,2,1);
disp_num(11,i+9,'1',0,7,3,1);
disp_num(11,i+10,'5',0,7,4,1);
disp_num(11,i+11,'9',0,7,5,1);
disp_num(11,i+12,'6',0,7,6,1);
send_byte(0xa2+singal);
send_byte(0x2b);
}
/*各种尺寸显示*/
disp_dh()
{
yte i;
disp_num(1,0,0xb4,7,7,0,0);
disp_num(1,1,0xb5,7,7,0,0);
disp_num(1,2,0xb6,7,7,0,0);
disp_num(1,3,0xb7,7,7,0,0);
disp_num(1,4,':', 7,7,0,0);
for(i=0;i<7;i++)
disp_num(4,8+i,0x1C0+i,7,1,i%7,0);
for(i=0;i<7;i++)
disp_num(6,2+i,0x1C0+i,2,1,i%7,0);
for(i=0;i<3;i++)
disp_num(8,i+1,0x1C0+i,3,1,i%7,0);
send_byte(0xa2+singal);
send_byte(0x2b);
}
/*显示计数器*/
disp_count()
{
byte i;
disp_num(2,0,0xBA,7,0,0,0);
disp_num(2,1,0xBB,7,0,0,0);
disp_num(2,2,0xBC,7,0,0,0);
disp_num(2,3,':', 7,0,0,0);
count++;
disp_num(5,4,count/10000,2,0,0,0);
disp_num(5,5,(count%10000)/1000,2,1,1,0);
disp_num(5,6,(count%1000)/100,2,2,2,0);
disp_num(5,7,(count%100)/10,2,3,3,0);
disp_num(5,8,(count%10),2,4,4,0);
send_byte(0xa2+singal);
send_byte(0x29);
for(i=0;i<30;i++)
{
delay();
scan_key();
}
}
/*显示动画*/
void disp_picture()
{
byte i;
disp_num(2,0,0xB8,7,0,0,0);
disp_num(2,1,0xB9,7,0,0,0);
disp_num(2,2,':',7,0,0,0);
n++;
m=n%6;
disp_num(5,4,0x140,2,m,m,0);
disp_num(5,7,0x143,2,m,m,0);
disp_num(6,4,0x150,2,m,m,0);
disp_num(6,7,0x153,2,m,m,0);
disp_num(5,5,0x141,2,m,m,0);
disp_num(5,6,0x142,2,m,m,0);
disp_num(6,5,0x151,2,m,m,0);
disp_num(6,6,0x152,2,m,m,0);
for(i=0;i<120;i++)
{
delay();
scan_key();
}
disp_num(5,5,0x144,2,m,m,0);
disp_num(5,6,0x145,2,m,m,0);
disp_num(6,5,0x154,2,m,m,0);
disp_num(6,6,0x155,2,m,m,0);
for(i=0;i<180;i++)
{
delay();
scan_key();
}
disp_num(5,5,0x146,2,m,m,0);
disp_num(5,6,0x147,2,m,m,0);
disp_num(6,5,0x156,2,m,m,0);
disp_num(6,6,0x157,2,m,m,0);
for(i=0;i<180;i++)
{
delay();
scan_key();
}
disp_num(5,5,0x144,2,m,m,0);
disp_num(5,6,0x145,2,m,m,0);
disp_num(6,5,0x154,2,m,m,0);
disp_num(6,6,0x155,2,m,m,0);
for(i=0;i<180;i++)
{
delay();
scan_key();
}
send_byte(0xa2+singal);
send_byte(0x2b);
}
/*图片显示*/
disp_pic()
{
disp_num(2,0,0xAB,7,0,0,0);
disp_num(2,1,0xAC,7,0,0,0);
disp_num(2,2,':',7,0,0,0);
disp_num(0,9,0x8b,2,2,2,0);
disp_num(0,10,0x8c,2,2,2,0);
disp_num(0,11,0x8d,2,2,2,0);
disp_num(1,9,0x9b,2,2,2,0);
disp_num(1,10,0x9c,2,2,2,0);
disp_num(1,11,0x9d,2,2,2,0);
disp_num(5,4,0x149,2,2,2,0);
disp_num(5,5,0x14a,2,2,2,0);
disp_num(5,6,0x14b,2,2,2,0);
disp_num(5,7,0x14c,2,2,2,0);
disp_num(6,4,0x159,2,2,2,0);
disp_num(6,5,0x15a,2,2,2,0);
disp_num(6,6,0x15b,2,2,2,0);
disp_num(6,7,0x15c,2,2,2,0);
send_byte(0xa2+singal);
send_byte(0x2b);
}
main()
{
count=0;
IO_DDR0=0x0F;
singal=0;
init_ic(7);
while(1)
{
scan_key();
switch(flag)
{
case 0:
disp_main();
break;
case 1:
disp_all();
break;
case 2:
disp_dh();
break;
case 3:
disp_count();
break;
case 4:
disp_pic();
break;
case 5:
disp_picture();
break;
default:
flag=0;
}
}
}
/*Program End!*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -