我正在为KS0108 GLCD驱动程序编写一个新的特殊库,其中包含新的算法和功能。我在用ATMega16。我的点矩阵GLCD维数是128x64。
如何使用“定义代码”定义不同的端口引脚?
例如:#define GLCD_CTRL_RESTART PORTC.0
IDE:AVR工作室5
语言:C
模块:128x64点阵GLCD
司机:KS0108
微控制器:ATMega16
请解释一下我应该用哪种标题?并为ATMEga16编写一个完整而非常简单的代码。
最佳答案
在ATmega中,管脚值组装在端口寄存器中。管脚值是端口中一个位的值。ATmega不像其他处理器那样有一个位可寻址的IO内存,因此不能像您建议的那样使用单个#define
引用pin进行读写。
如果有帮助的话,您可以改为定义宏来读取或写入pin值。您可以根据需要更改宏的名称。
#include <avr/io.h>
#define PORTC_BIT0_READ() ((PORTC & _BV(PC0)) >> PC0)
#define WRITE_PORTC_BIT0(x) (PORTC = (PORTC & ~_BV(PC0)) | ((x) << PC0))
uint8_t a = 1, b;
/* Change bit 0 of PORTC to 1 */
WRITE_PORTC_BIT0(a);
/* Read bit 0 of PORTC in b */
b = PORTC_BIT0_READ();