
AVR单片机
文章平均质量分 58
_NJZY_
这个作者很懒,什么都没留下…
展开
-
DS18B20组件
/********************************************************************************* 文件名:DS18B20.c* 描 述:温度传感器DS18B20驱动模块*****************************************************************************原创 2015-02-23 13:21:34 · 717 阅读 · 0 评论 -
I2C组件
#include #include #define i2cDelay() {_nop_(); _nop_(); _nop_(); _nop_();}sbit i2c_scl = P3^7;sbit i2c_sda = P3^6;void i2cStart() { i2c_sda = 1; i2c_scl = 1; i2cDelay(); i2c_sda原创 2015-02-16 17:54:44 · 518 阅读 · 0 评论 -
EEPROM组件
/********************************************************************************* 文件名:eeprom.c* 描 述:EEPROM芯片24C02读写驱动模块***************************************************************************转载 2015-02-22 13:25:27 · 495 阅读 · 0 评论 -
LCD1602.c
#include #include "utilities.h"#define LCD1602_DB P0sbit LCD1602_RS = P1^0;sbit LCD1602_RW = P1^1;sbit LCD1602_E = P1^5;void LCDWaitReady() { uchar state; LCD1602_DB = 0xFF; LCD16原创 2014-12-03 23:14:37 · 1304 阅读 · 0 评论 -
LCD1602组件
/** * 文件名:LCD1602.c * 描 述:1602字符液晶驱动模块 */#include #include "stdint.h"#include "LCD1602.h"#define LCD1602_DB P0sbit LCD1602_RS = P1^0;sbit LCD1602_RW = P1^1;sbit LCD1602_E = P1^5;/* 等待液晶原创 2015-03-20 15:31:39 · 722 阅读 · 0 评论 -
位置式PID控制算法模型(数字)
float T, Kp, Ti, Td; //constfloat A, B, C;void calcConst(){ A = Kp * (1 + T / Ti + Td / T); B = -Kp * (1 + 2 * Td / T); C = Kp * Td / T;}float PID(float rt, float yt){ stati原创 2015-03-08 11:22:59 · 5485 阅读 · 0 评论 -
keyBoard组件
#include #include "utilities.h"sbit KEY_OUT_3 = P2^0;sbit KEY_OUT_2 = P2^1;sbit KEY_OUT_1 = P2^2;sbit KEY_OUT_0 = P2^3;sbit KEY_IN_0 = P2^4;sbit KEY_IN_1 = P2^5;sbit KEY_IN_2 = P2^6;sbit KEY原创 2014-12-03 23:15:45 · 1046 阅读 · 0 评论 -
将一个字节存储的2位BCD码解码
#include #include /* 将一个字节存储的2位BCD码解码成普通的二进制数 */uint8_t decode(uint8_t BCD) { uint8_t geWei, shiWei; geWei = BCD & 0x0F; shiWei = BCD >> 4; return shiWei * 10 + geWei;}int main(原创 2015-03-24 22:53:10 · 2089 阅读 · 0 评论 -
DS1302组件
DS1302.h#ifndef _DS1302_H#define _DS1302_Hsbit DS1302_CE = P1^7;sbit DS1302_SCLK = P3^5;sbit DS1302_IO = P3^4;typedef struct sTime { //日期时间结构体定义 uint16_t year; //年 uint8_t mon; //转载 2015-04-03 17:53:25 · 566 阅读 · 0 评论 -
OneWire组件
OneWire.h#ifndef _ONEWIRE_H#define _ONEWIRE_Hsbit ONEWIRE_PIN = P1^4; //检查通信引脚是否正确!bit OneWire_reset();void OneWire_write(uint8_t dat);uint8_t OneWire_read();#define OneWire_skip() OneWir原创 2015-04-13 10:20:14 · 1879 阅读 · 0 评论 -
基于OneWire组件的DS18B20组件
DS18B20.h#ifndef _DS18B20_H#define _DS18B20_Hbit DS18B20_start();bit DS18B20_getTemperature(int16_t * temp);uint8_t getIntPart(int16_t temp);uint8_t getDecPart(int16_t temp);bit getSign(int1原创 2015-04-13 10:31:02 · 673 阅读 · 0 评论 -
stdint.h
#ifndef STDINT_H_INCLUDED#define STDINT_H_INCLUDEDtypedef unsigned char uint8_t;typedef unsigned int uint16_t;typedef unsigned long uint32_t;typedef char int8_t;typedef int int16_t;typedef lon原创 2015-02-22 13:04:49 · 757 阅读 · 0 评论 -
DS18B20温度格式转换
#include #include /* DS18B20温度格式转换 */uint8_t tempIntPart[3];uint8_t tempDecPart[4];float convertToFloat(int16_t temperature) { float temp; temp = (float)temperature; temp /= 16.0f;原创 2015-03-25 14:00:35 · 5195 阅读 · 0 评论 -
字节的位操作
#define lowByte(word) ((uint8_t)(word))#define highByte(word) ((uint8_t)(word >> 8))#define bitRead(val, bit) (((val) >> (bit)) & 0x01)#define bitSet(val, bit) ((val) |= (1 << (bit)))#define bitCl原创 2015-02-16 12:43:32 · 1117 阅读 · 0 评论 -
myKeyBoardSecond.c
#include #include "utilities.h"sbit KEY_OUT_3 = P2^0;sbit KEY_OUT_2 = P2^1;sbit KEY_OUT_1 = P2^2;sbit KEY_OUT_0 = P2^3;sbit KEY_IN_0 = P2^4;sbit KEY_IN_1 = P2^5;sbit KEY_IN_2 = P2^6;sbit KEY原创 2014-12-08 20:42:40 · 352 阅读 · 0 评论 -
C语言关键字volatile
作用volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序:1234XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XBYTE[2]=0x58;对外部转载 2015-02-15 21:55:40 · 555 阅读 · 0 评论 -
myKeyBoard.c
#include #include "utilities.h"sbit KEY_OUT_3 = P2^0;sbit KEY_OUT_2 = P2^1;sbit KEY_OUT_1 = P2^2;sbit KEY_OUT_0 = P2^3;sbit KEY_IN_0 = P2^4;sbit KEY_IN_1 = P2^5;sbit KEY_IN_2 = P2^6;sbit KEY原创 2014-12-08 20:24:33 · 568 阅读 · 0 评论 -
C语言 有符号数和无符号数的移位运算
对于无符号数来说,左移和右移都是用的逻辑移位,即左移低位空出的补0,右移高位空出的补0;对于有符号数来说,用的是算术移位,左移多出的会移进符号位,右移在gcc编译器下是算术右移,即空出的高位补符号位。例:int16_t n = 0x4000; //此时符号位为0n int16_t num = 0x8000; //此时符号位为1num >>= 1; //此时n为0xC原创 2015-02-23 18:35:22 · 16350 阅读 · 0 评论 -
逻辑右移和算术右移
汇编语言中的逻辑右移(SHR)是将各位依次右移指定位数,然后在左侧补0,算术右移(SAR)是将各位依次右移指定位数,然后在左侧用原符号位补齐。比如,在汇编语言中,对于算术右移,如果最高位为1,则补1,否则补0, 如将10000000算术右移7位,应该变成11111111,而逻辑右移7位,则不考虑符号位,变为00000001,这点就是算术右移和逻辑右移的区别。在汇编中,可以用算术右移来进行有转载 2015-02-23 18:16:50 · 8039 阅读 · 2 评论 -
FLASH和EEPROM的区别
FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易转载 2015-12-13 21:59:01 · 617 阅读 · 0 评论