⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testnew.c

📁 单片机开发程序
💻 C
📖 第 1 页 / 共 2 页
字号:
{
  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 + -