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

📄 cpldac1.c

📁 示波器DIY全套资料
💻 C
字号:
#include <avr/io.h>#include "KBDaC1.h"#include "CPLDaC1.h"/* Function:  uint8_t CPLD_u8ReadKeys(void)Description: serially reads one port value (1 bit) and compose result byte value */ uint8_t CPLD_u8ReadKeys(void){  uint8_t u8Result;  uint8_t u8Index;  DDRC  |= (1<<CPLD_nSerCLK);             /* SerCLK as output */  DDRC  |= (1<<CPLD_nSerEN);              /* SerEN as output */  DDRC  |= (1<<CPLD_nSerRDWR);            /* SerRDWR as output */  DDRD  &= (~(1<<CPLD_nSerDATA));         /* SerDATA as input */  PORTC &= (~(1<<CPLD_nSerRDWR));         /* RDWR=0, read from CPLD operation */  PORTC |= (1<<CPLD_nSerEN);              /* EN=1, serial clock disabled, read keys to parallel register */  PORTC &= (~(1<<CPLD_nSerEN));           /* EN=0, serial clock enabled */  u8Result = 0;                           /* reset the return value */  for (u8Index=0; u8Index < 8; u8Index++)  {    u8Result>>=1;    PORTC |= (1<<CPLD_nSerCLK);            /* SerCLK = 1 */    PORTC &= (~(1<<CPLD_nSerCLK));         /* SerCLK = 0 */    u8Result |= PIND & (1<<CPLD_nSerDATA); /* Insert the port value to u8Result and shift left 1 position */  }  return (u8Result);}void CPLD_vWriteDivider(uint8_t u8Prescaler, uint16_t u16Counter){  uint16_t u16MaskC;  uint8_t u8MaskP;  DDRC |= (1<<CPLD_nSerCLK);              /* SerCLK as output */  DDRC |= (1<<CPLD_nSerEN);               /* SerEN as output */  DDRC |= (1<<CPLD_nSerRDWR);             /* SerRDWR as output */  DDRD |= (1<<CPLD_nSerDATA);             /* SerDATA as output */  PORTC |=(1<<CPLD_nSerRDWR);             /* RDWR=1, write to CPLD operation */  PORTC &= (~(1<<CPLD_nSerEN));           /* EN=0, serial clock enabled */  u8MaskP = 1<<CPLD_nDivRegSize;  while (u8MaskP!=0)  {    if (u8Prescaler&u8MaskP)     {      PORTD |=(1<<CPLD_nSerDATA);    }    else    {      PORTD &=(~(1<<CPLD_nSerDATA));    }    PORTC |= (1<<CPLD_nSerCLK);           /* SerCLK = 1 */    PORTC &= (~(1<<CPLD_nSerCLK));        /* SerCLK = 0 */    u8MaskP >>= 1;  }  u16MaskC = 1<<CPLD_nCmpRegSize;  while (u16MaskC!=0)  {    if (u16Counter&u16MaskC)     {      PORTD |=(1<<CPLD_nSerDATA);    }    else    {      PORTD &=(~(1<<CPLD_nSerDATA));    }    PORTC |= (1<<CPLD_nSerCLK);           /* SerCLK = 1 */    PORTC &= (~(1<<CPLD_nSerCLK));        /* SerCLK = 0 */    u16MaskC >>= 1;  }}

⌨️ 快捷键说明

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