📄 testnew.c
字号:
{
uchar l;
Out_data2_com(Line_num*16,0x00,0x24);
Out_com(0xb0);
for(l=0;l<16;l++)
{
Out_data(Disp_Buff[l]-0x20);
}
Out_com(0xb2);
}
/****************************************************************************/
/**************************************************/
/*********键值输入程序*************/
void int0(void) interrupt 2
{
uchar Key_Temp=0,m_Key=0;
uchar i;
EA=0; //防止其他中断进入
Key_Temp=KEY; //读取键值
Delay(12000); //软件去抖动
m_Key=KEY;
if(Key_Temp==m_Key)
{
for(i=0;i<15;i++)
Disp_Buff[i]=Disp_Buff[i+1];
i=m_Key;
/* ES=0; //禁止串行口中断
SBUF=i; //发送当前键值
while(TI==0); //等待数据发送完毕
TI=0; //强发送标记位清零
ES=1; //允许串行口中断*/
Send_Byte(i);
Delay(200);
Send_Byte(i);
if(i<10)
Disp_Buff[15]=0x30+i;
if(i>=10&&i<18)
Disp_Buff[15]=0x37+i;
}
EA=1; //开启中断
}
/************************************************/
/**********************************************************/
/******串行口初始化子程序******/
void Init_Serial_Interrupt(void)
{
SCON=0x50; //将串行口设置成工作方式1,方式1为异步传送10位数据(1个起始位加8位数据加1个停止位,无奇偶校验位)
//该方式下用于数据发送,发送波特率为: BAND=(1+SMOD)*Fosc/12/32/(256-T)
ES=1; //关、打开串口中断
REN=1; //打开、禁止串行数据接收
PS=0; //串口中断设置为0,低优先级
}
/*****通讯用定时器1参数设置*****/
void Init_Serial_Timer1(void)
{
TMOD&=0x0f; //只改变定时器1的定时设置为自重载模式,以便于进行数据通讯,先清高四位与定时器相关的位
TMOD|=0x20; //改变定时器1的定时设置为自重载模式,以便于进行数据通讯,之后加入高四位控制字
TH1=0xfa; //波特率对应的时间重载常数600为a0 1200波特率为d0,2400为e8,4800为f4,9600为fa
TL1=0xfa; //计算公式为: BAND=(1+SMOD)*Fosc/12/32/(256-T)
// Fosc=22.1184MHz,SMOD=0: T=256-(1+SMOD)*Fosc/12/32/BAND
// T=256-1.8432M/32/BAND
// T=256-57600/BAND
PCON&=0x7f; //最高位SMOD=0时波特率不加倍,1时波特率加倍
TR1=1; //打开定时器中断
EA=1; //打开全局中断
}
/*****串行发送相关器件参数初始化子程序*****/
void Init_Serial(void)
{
Init_Serial_Interrupt(); //使用第二套参数初始化设置串行口用于通讯
Init_Serial_Timer1(); //设置定时器1用于串口通讯
}
/*****处理(组装)过的八位二进制数据发送子程序*****/
void Outport(uchar i)//入口:参数为待发送八位二进制数据
{
ES=0; //禁止串行口中断
SBUF=i; //发送当前键值
while(TI==0); //等待数据发送完毕
TI=0; //强发送标记位清零
ES=1; //允许串行口中断
}
/*****完整的单字节数据串行发送子程序*****/
void Send_Byte(uchar datas)//入口:参数为待发送字节数据
{
uchar t;
Init_Serial(); //串行发送相关器件参数初始化子程序
t=TR0; //保存其它定时器状态
TR0=0; //暂停其它定时信号
Outport(datas); //发送字节数据
TR0=t; //还原其它定时器状态
}
/*****字(双字节)数据串行发送子程序*****/
void Send_Word(uint datas)//入口:参数为待发送字数据
{
uchar t;
Init_Serial(); //串行发送相关器件参数初始化子程序
t=TR0; //保存其它定时器状态
TR0=0; //暂停其它定时信号
Outport(datas&0x00ff); //发送最低8位字节
Delay(20);
Outport(datas>>8); //发送高8位字节
TR0=t; //还原其它定时器状态
}
/***************串口接收程序***************/
void SerialPort_ISR(void) interrupt 4
{
uchar R_Data,i;
ES=0;
while(RI==0);
RI=0;
R_Data=SBUF;
for(i=0;i<15;i++)
Disp_Buff[i]=Disp_Buff[i+1];
//R_Data=R_Data-0x80;
if(R_Data<10)
Disp_Buff[15]=0x30+R_Data;
else
Disp_Buff[15]=0x37+R_Data;
ES=1;
}
/*****************************************************************************/
void main(void)
{
uint m;
uchar q;
Init_Int();
Init_Serial();
Init_Dian();
Clear_Dian(0);
Clear_Dian(1);
Init_Dian();
Clear_Dian(0);
Clear_Dian(1);
Chars_dis("2005/03/29 By KP");
Dis_line(7);
Chars_dis("Wuhan University");
Dis_line(0);
Chars_dis(" NEW 8051&FPGA ");
Dis_line(1);
Chars_dis("System EVM Board");
Dis_line(2);
Chars_dis(" Test Program ");
Dis_line(3);
Addr=0x0000; //32KB 外部RAM检测
Data_test=Data_Start;
for(m=0;m<Max_Addr;m++)
*Addr++=Data_test++;
Addr=0x0000;
Data_test=Data_Start;
for(m=0;m<Max_Addr;m++)
{
if(*Addr++!=Data_test++)
Error++;
}
if(Error==0)
{
Chars_dis("32K Ram Checking");
Dis_line(4);
Chars_dis(" Is Successful! ");
Dis_line(5);
}
else
{
Chars_dis("32K Ram Checking");
Dis_line(4);
Chars_dis("Is Unsuccessful! ");
Dis_line(5);
}
L_delay(8);
Error=0; //1KB FPGA内部RAM检测
Addr=0xe000;
Data_test=Data_Start;
for(m=0;m<Max_Addr_1K;m++)
*Addr++=Data_test++;
Addr=0xe000;
Data_test=Data_Start;
for(m=0;m<Max_Addr_1K;m++)
{
if(*Addr++!=Data_test++)
Error++;
}
if(Error==0)
{
Chars_dis(" 1K RAM in FPGA ");
Dis_line(4);
Chars_dis(" is checking OK!");
Dis_line(5);
}
else
{
Chars_dis(" 1K RAM in FPGA ");
Dis_line(4);
Chars_dis("is checking Fail");
Dis_line(5);
}
L_delay(8);
Error=0; //1KB FPGA内部RAM检测
Addr=0xf000;
for(m=0;m<Max_Addr_1K;m++)
{
if(*Addr++!=Sin[m])
Error++;
}
if(Error==0)
{
Chars_dis(" 1K ROM in FPGA ");
Dis_line(4);
Chars_dis(" is checking OK!");
Dis_line(5);
}
else
{
Chars_dis(" 1K ROM in FPGA ");
Dis_line(4);
Chars_dis("is checking Fail");
Dis_line(5);
}
L_delay(8);
Chars_dis("Display&Keyboard");
Dis_line(4);
Chars_dis("&RS232 Test V1.0");
Dis_line(5);
for(q=0;q<16;q++)
Disp_Buff[q]=0x20;
while(1)
{
Dis_line(6);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -