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

📄 main.c

📁 用c写的关于8255按键的程序,用到的单片机是spce061a
💻 C
字号:
/////PA口低八位用做D0~D7,高八位为控制线: A12~A7分别是CS,A1,WR,RST,A0,RD///
///操作8255///
#include "spce061a.h"
unsigned int b[4]={0x110e,0x110d,0x0b,0xc907};	//选行
unsigned int a[4]={0x00e0,0x00d0,0x00b0,0x0070};	//选列
unsigned int zi[16]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
main()					   	
{
	  
	unsigned int ;
    initial();  
    while(1)
    {
     	
   	   *P_Watchdog_Clear=0x0001;
        scan();
        
        }
}
///////////////////////////////////////////////////////
void initial()
{  
	unsigned int i;
  //初始化凌阳A端口///
    *P_IOA_Dir=0xffff;
    *P_IOA_Attrib=0xffff;
    *P_IOA_Data=0xffff;     
      //复位8255///
      *P_IOA_Data=0xffff;
     for(i=0;i<1500;i++); 
 ////8255端口初始化///   //PA15:NC,PA14:NC,PA13:CS,PA12:RST,PA11:A1,PA10:A0,PA9:WR,PA8:RD
    *P_IOA_Data=0x1388;  //8255端口送数PC口高四位当输入,PC低四位 PA,PB当输出/
    ///////////////////////RST:CS:A1:A0:WR:RD=001101
   *P_IOA_Data|=0x1b00;    ////wr=1
   ////扫描8255PC
   *P_IOA_Data=0x11f0;   //端口C送数   RST:CS:A1:A0:WR:RD=001001 PC口高四位保持为1,低四位输出为0   
   *P_IOA_Data|=0x1900;    ////wr=1
   ////////////////////////////////////
  /// *P_IOA_Data|=0xfdff;  ///// RST:CS:A1:A0:WR:RD=111011 
   
   *P_IOA_Dir&=0xff0f;
    *P_IOA_Attrib&=0xff0f;
    *P_IOA_Data|=0x00ff;   /////凌阳A端口设置为低八位为上拉输入     

}
////////////////////////////////////////////////////////////////////////////////////////////////////
void scan()
{  
	 
  	unsigned int i,x,y,z=0,j;
    for(j=0;j<4;j++)
    {
   		z|=b[j]; 
        *P_IOA_Data=z;      //端口C送数扫描第一行   RST:CS:A1:A0:WR:RD=001001 PC口高四位保持为1,低四位输出为0   
        *P_IOA_Data|=0x0200;   ///wr=1
           /////////////////
        *P_IOA_Data=0xCAff;  ///端口送数 PC口读数RST:CS:A1:A0:WR:RD=001010
        y=*P_IOA_Data;      ////
        y&=0x00f0;
   		for(i=0;i<4;i++)
        {
   	       	if(y==a[i])
            {
                x=zi[j*4+i];
                display(x);     
                break;   
            }
        } 
        z=0; ////wr=1
   }
   
   
}                                                                                                                                                                                                                                                                                                                                         

////////////////////////////////////////////////////
void display(unsigned int x)
{   
	*P_IOA_Data=0xc508;   //端口送数 
    *P_IOA_Data|=0x0200;    ////wr=1 //数码管段选择 
    x|=0xc100;
    *P_IOA_Data=x;   //端口送数 
    *P_IOA_Data|=0x0200;      
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -