📄 task_165_595.c
字号:
#include "c8051f020.h"
#include "config.h"
#include "stdio.h"
#include "intrins.h"
bit flag_165; //按键存在标志,为1表示有键按下,否则没有键按下
sbit A0=ACC^0;
sbit A1=ACC^1;
sbit A2=ACC^2;
sbit A3=ACC^3;
sbit A4=ACC^4;
sbit A5=ACC^5;
sbit A6=ACC^6;
sbit A7=ACC^7;
sbit SCLK = P3^5; //移位寄存器时钟输入:11脚
sbit RCLK = P3^4; //存储寄存器时钟输入:12脚
sbit SER = P3^3; //串行数据输入:14脚
sbit SH_LD = P3^2; //移位控制/置入控制(低电平有效):1脚
sbit CLK = P3^1; //时钟输入端(上升沿有效):2脚
sbit QH = P3^0; //输出端 :9脚
/**************************************************
>>>函数名称: IN_165(void)
>>>函数功能: 串行输出给ACC
>>>入口参数: 无
>>>出口参数: return(ACC);8个键盘码
>>>调用模块: 无
>>>建立时间: 08_07_25
/**注意事项:是先将QH值赋值给An,因为在SH_LD上升沿到来时候Qh已经输出,在CLK上升沿来的时候输出Qg值
***************************************************/
UCHAR IN_165(void)
{
//按HGFEDCBA顺序串行输出
A7=QH;CLK = 0;CLK = 1;
A6=QH;CLK = 0;CLK = 1;
A5=QH;CLK = 0;CLK = 1;
A4=QH;CLK = 0;CLK = 1;
A3=QH;CLK = 0;CLK = 1;
A2=QH;CLK = 0;CLK = 1;
A1=QH;CLK = 0;CLK = 1;
A0=QH;
return(ACC);
}
/**************************************************
>>>函数名称: TASK_165(void)
>>>函数功能: 采集键盘码
>>>入口参数: 无
>>>出口参数: 有键按下:return(DATA_165); 无键按下:return(0);
>>>调用模块: UCHAR IN_165(void);
>>>建立时间: 08_07_25
/**注意事项:
***************************************************/
UCHAR TASK_165(void)
{
UCHAR DATA_165;
DATA_165=0;
CLK = 0;
ACC=0;
SH_LD = 0; //74LS165将并行数据置入寄存器中
SH_LD = 1; //并行置数功能被禁止
DATA_165=IN_165();
if(DATA_165)
{
flag_165=1;
return(DATA_165);
}
else
{
flag_165=0;
return(0);
}
}
/**************************************************
>>>函数名称: LED_595_TASK(UCHAR d)
>>>函数功能: 74HC595驱动发光二极管LED
>>>入口参数: UCHAR d:对应的8个数码管的亮灭,位为1亮,位为0灭
>>>出口参数: 无
>>>调用模块: 无
/**建立时间:2008年7月20号
/**注意事项:串行到并行的数据转换
***************************************************/
void Write_595(UCHAR d)
{
UCHAR i,Serial;
Serial = d;
for(i=0;i<8;i++)
{
SCLK = 0;
SER=Serial&0X80;//因为串口输入是最低位先输入,所以,先右移一位使得最低位变为CY,再执行SER=CY;
Serial=Serial<<1;
SCLK = 1; //数据在SCLK的上升沿输入到移位寄存器中
_nop_();
}
//以下3条指令若在多字节时,应该移入多字节全发送完后在执行此3条指令
RCLK = 0;
_nop_();
RCLK = 1; //数据在RCLK的上升沿输输出
}
void main(void)
{
UCHAR KEY_165;
UCHAR tab[8]={0x01,0x02,0x04,0x8,0x10,0x20,0x40,0x80};
config();
for(;;)
{
KEY_165=TASK_165();
switch(KEY_165)
{
case 0x01: Write_595(0x01);break;
case 0x02: Write_595(0x02);break;
case 0x04: Write_595(0x04);break;
case 0x08: Write_595(0x08);break;
case 0X10: Write_595(0x10);break;
case 0X20: Write_595(0x20);break;
case 0X40: Write_595(0x40);break;
case 0X80: Write_595(0x80);break;
default: break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -