键盘显示程序(很全很详细)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/****keyboard_display_PWM4_CAP4_AD4_I2C_PI4

************************************************************************************* *******************/

#include "config.h"

#define HC595_CS (1 << 26) // P0.26口为74HC595的片选

#define KEY (1 << 5) // P0.5口(MISO)为按键输入脚

#define PWM1 (1 << 0) // p0.0为PWM1输出脚

#define PWM2 (1 << 7) // p0.7为PWM2输出脚

#define PWM3 (1 << 1) // p0.0为PWM3输出脚

#define PWM4 (1 << 8) // p0.0为PWM4输出脚

#define CAT1025 0xA0 // CAT1025器件从地址

uint8 T0Flag = 0;

uint16 CS[14]={2000,2000,2000,2000,2000,150,10,5,10,5,10,5,10,5};

//CS[0]为PWM频率(HZ),CS[1]~CS[4]分别为4个电机的给定转速(mv),

//CS[5]为捕获结帐周期(ms),CS[6]~CS[13]分别为4组PI控制参数(Kp&Ki)

uint8 data_buf[28];

uint8 DATA0[8],DATA1[8];

uint8 digitable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码

uint8 selectable[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码

uint8 x=0,y=0,k=0; //指针型变量,k对DA TA0&DA TA1&selectable;x&y对digitable;

uint8 w=0,s=0; //计数寄存器

uint8 SF=0; //闪烁标志位

uint8 TK=0x09; //按键按下位寄存器

uint8 M=0,R=0; //按键选项寄存器M参数名指针;R显示位指针

uint8 Display=0; //显示内容寄存器

uint32 CAP1_1=0,CAP1_2=0,CAP1_3=0,CAP1_4=0;

uint32 CAP2_1=0,CAP2_2=0,CAP2_3=0,CAP2_4=0; //定义捕获值寄存器组

uint32 PLS1=0,PLS2=0,PLS3=0,PLS4=0; //捕获脉冲总次数寄存器

uint8 H1=0,H2=0,H3=0,H4=0; //首次捕获标志位

uint16 N1=0,NP1=0,N2=0,NP2=0,N3=0,NP3=0,N4=0,NP4=0; //捕获次数寄存器及其暂存器

uint16 F1=0,F2=0,F3=0,F4=0; //未知信号频率寄存器

uint16 ADC_Data1[8]={0,0,0,0,0,0,0,0}; //AD转换结果暂存区

uint16 ADC_Data2[8]={0,0,0,0,0,0,0,0};

uint16 ADC_Data3[8]={0,0,0,0,0,0,0,0};

uint16 ADC_Data4[8]={0,0,0,0,0,0,0,0};

uint8 SENT_F; //送数显示执行标志位

uint16 ADC_Result1,ADC_Result2,ADC_Result3,ADC_Result4;//AD转换结果(平均值)

uint16 ADC_benchmark1=0,ADC_benchmark2=0,ADC_benchmark3=0,ADC_benchmark4=0;

//AD转换基准电压值

uint16 ADC_R1,ADC_R2,ADC_R3,ADC_R4; //单次AD转换结果寄存器

uint32 UK1,UK2,UK3,UK4; //校正值

int16 EK1_1=0,EK1_2=0,EK2_1=0,EK2_2=0,EK3_1=0,EK3_2=0,EK4_1=0,EK4_2=0; //误差寄存器uint16 Speed1,Speed2,Speed3,Speed4; //电机的平均转速

/************************************************************************************* ********************

** 函数名称:DelayNS()

** 函数功能:长软件延时

** 入口参数:dly 延时参数,值越大,延时越久

** 出口参数:无

************************************************************************************* *********************/

void DelayNS (uint32 dly)

{

uint32 i;

for ( ; dly>0; dly--)

for (i=0; i<50000; i++);

}

/*

************************************************************************************* ********************

** 函数名称:ADC_Init()

** 函数功能:ADC模块初始化

** 入口参数:无

** 出口参数:无

************************************************************************************* ********************

*/

void ADC_Init(void)

{

uint32 T;

AD0CR = 0x01 | // SEL=0x0f,选择通道1

((Fpclk / 1000000 - 1) << 8) | // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz

(0 << 16) | // BURST=0,软件控制转换操作

(0 << 17) | // CLKS=0, 使用11clock转换

(1 << 21) | // PDN=1,正常工作模式

(0 << 22) | // TEST1:0=00,正常工作模式

(1 << 24) | // START=1,直接启动ADC转换

(0 << 27); // 直接启动ADC转换时,此位无效

DelayNS(10);

T = AD0DR; // 读取ADC结果,并清除DONE标志位

}

/*

*************************************************************************************

相关文档
最新文档