){DIO=1;}else{DIO=0;} //判断最低位是1还是0 CLK=1; _nop_(); CLK=0; dat=dat>>1; //将数据右移一位 } } void send(uchar addr,uchar dat){ STB=0; //片选使能延时 DIO=0; CLK=0; send_8bit(addr|0xc0); //先发送地址和写入命令 send_8bit(dat); //再发送要写入的数据 STB=1; //禁止片选延时 } void init(){ send(0x00,0x01); //数码管控制寄存器,设置自动增量和启用掉电保存 send(0x01,0x00); //按键扫描存储器,设置按键输出模式为矩阵输出 send(0x02,0x07); //LED控制寄存器,点亮所有LED } void display(){ uchar i; for(i=0;i<4;i++){ send(i*2,KEY[i]); //分别在地址为0、2、4、6的位置写入对应的数据 send(i*2+1,0x00); //清除小数点 } } void keyscan(){ uchar temp=0; uchar i; send(0x44,0x01); //按键扫描开始 send(0x44,0x00); //按键扫描禁止,等待读取按键数据 for(i=0;i<4;i++){ send(i*2+1,0x0f); //在地址为1、3、5、7的位置设置扫描掩码,只有对应位置才能读取按键数据 temp=P0&0x0f; //读取P0的低四位数据,并与扫描掩码取与 KEY[i]=temp^0x0f; //将读取到的数据取反,得到真实按键值 } } void main() { init(); while(1){ keyscan(); display(); } }
){DIO=1;}else{DIO=0;} //判断最低位是1还是0 CLK=1; _nop_(); CLK=0; dat=dat>>1; //将数据右移一位 } } void send(uchar addr,uchar dat){ STB=0; //片选使能延时 DIO=0; CLK=0; send_8bit(addr|0xc0); //先发送地址和写入命令 send_8bit(dat); //再发送要写入的数据 STB=1; //禁止片选延时 } void init(){ send(0x00,0x01); //数码管控制寄存器,设置自动增量和启用掉电保存 send(0x01,0x00); //按键扫描存储器,设置按键输出模式为矩阵输出 send(0x02,0x07); //LED控制寄存器,点亮所有LED } void display(){ uchar i; for(i=0;i<4;i++){ send(i*2,KEY[i]); //分别在地址为0、2、4、6的位置写入对应的数据 send(i*2+1,0x00); //清除小数点 } } void keyscan(){ uchar temp=0; uchar i; send(0x44,0x01); //按键扫描开始 send(0x44,0x00); //按键扫描禁止,等待读取按键数据 for(i=0;i<4;i++){ send(i*2+1,0x0f); //在地址为1、3、5、7的位置设置扫描掩码,只有对应位置才能读取按键数据 temp=P0&0x0f; //读取P0的低四位数据,并与扫描掩码取与 KEY[i]=temp^0x0f; //将读取到的数据取反,得到真实按键值 } } void main() { init(); while(1){ keyscan(); display(); } }
举报