AVR CH451驱动程序

发布者:灵感之翼最新更新时间:2017-12-17 来源: eefocus关键字:AVR  CH451  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

AVR CH451驱动程序头文件

#ifndef _CH451_H 
#define _CH451_H 
#include  
//CH451命令宏定义 
#define CH451_RESET     0x0201             //复位

#define CH451_LEFT MOV    0x0300             //设置移动方式-左移 
#define CH451_LEFTCYC   0x0301             //设置移动方式-左循 
#define CH451_RIGHT MOV   0x0302             //设置移动方式-右移 
#define CH451_RIGHTCYC  0x0303             //设置移动方式-右循  
#define CH451_SYSOFF    0x0400             //关显示、键盘、看门狗 
#define CH451_SYSON1    0x0401             //开显示 
#define CH451_SYSON2    0x0403             //开显示、键盘 
#define CH451_SYSON3    0x0407             //开显示、键盘、看门狗功能 
#define CH451_DSP       0x0500             //设置默认显示方式 
#define CH451_BCD       0x0580             //设置BCD译码方式 
#define CH451_TWINKLE   0x0600             //设置闪烁控制 
#define CH451_KEY       0x0700             //读键盘代码 
#define CH451_DIG0      0x0800             //数码管位0显示 
#define CH451_DIG1      0x0900             //数码管位1显示  
#define CH451_DIG2      0x0A00             //数码管位2显示 
#define CH451_DIG3      0x0B00             //数码管位3显示 
#define CH451_DIG4      0x0C00             //数码管位4显示 
#define CH451_DIG5      0x0D00             //数码管位5显示  
#define CH451_DIG6      0x0E00             //数码管位6显示  
#define CH451_DIG7      0x0F00             //数码管位7显示 
//端口宏定义 
#define DCLK (1<<;PA3) 
#define DIN (1<<;PA5) 
#define LOAD (1<<;PA7) 
#define DOUT (1<<;PE5) 
#define CH451_DCLK_HIGH PORTA|=DCLK        //时钟信号 
#define CH451_DCLK_LOW  PORTA&=~DCLK  
#define CH451_DIN_HIGH  PORTA|=DIN        //数据输入 
#define CH451_DIN_LOW   PORTA&=~DIN  
#define CH451_LOAD_HIGH PORTA|=LOAD        //命令加载信号,上升延激活 
#define CH451_LOAD_LOW  PORTA&=~LOAD  
#define CH451_DOUT      PINE&DOUT          //键盘中断和键值数据输出 
extern  uchar KeyValue;                    //键值全局声明 
//函数申明 
void CH451_WriteCommand(uint Command);     //CH451写命令函数 
void CH451_Init();                         //CH451初始化函数 
void CH451_GetKeyValue();                  //CH451键盘代码读取函数 
void CH451_DisplayDig(uchar DIG,uchar Data,uchar Point);//CH451显示一位数码管函数 
#endif 


AVR CH451驱动程序文件

#include "CH451.h" 
uchar KeyValue;//键值 
//共阴数码管编码表 
const uchar DSYCode[18]={0x3F,0x06,0x5B,0x4F,//0,1,2,3 
                         0x66,0x6D,0x7D,0x07,//4,5,6,7 
                         0x7F,0x6F,0x77,0x7C,//8,9,A,b 
                         0x39,0x5E,0x79,0x71,//C,d,E,F 
                         0x40,0x00};//-,全灭 
const uint DigCode[8]={CH451_DIG0,CH451_DIG1,CH451_DIG2,CH451_DIG3, 
                       CH451_DIG4,CH451_DIG5,CH451_DIG6,CH451_DIG7}; 
//键盘编码表 
const uchar KeyCode[16]={0x40,0x41,0x42,0x43,//0,1,2,3 
                         0x48,0x49,0x4A,0x4B,//4,5,6,7 
    0x50,0x51,0x52,0x53,//8,9,A,B 
    0x58,0x59,0x5A,0x5B};//C,D,E,F 
//CH451写命令函数 
void CH451_WriteCommand(uint Command){ 
    uchar i; 
    CH451_LOAD_LOW;                       //命令开始 
    for(i=0;i<12;i++){                    //送入12位数据,低位在前 
        if(Command&0x0001) CH451_DIN_HIGH;//输出低位数据 
        else CH451_DIN_LOW; 
        CH451_DCLK_LOW; 
        Command>>=1;                      //数据右移一位 
        CH451_DCLK_HIGH;                  //上升沿有效 
    } 
    CH451_LOAD_HIGH;                      //加载数据 
}   
//CH451初始化函数 
void CH451_Init(){ 
    CH451_DIN_LOW;                   //低电平使能串行接口 
    CH451_DIN_HIGH; 
    CH451_WriteCommand(CH451_RESET); //复位CH451 
    CH451_WriteCommand(CH451_SYSON2);//开显示、键盘 
    DDRE&=~DOUT;                     //PE5输入方向 
    EICRB|=(1<    EIMSK|=(1<

//CH451键值读取函数 
void CH451_GetKeyValue(){ 
    uchar i; 
    uchar GetKeyValue=0x00;           //键盘代码 
    CH451_WriteCommand(CH451_KEY);    //发送读取键值命令 
    for(i=0;i<7;i++){ 
        GetKeyValue<<=1; 
        if(CH451_DOUT) GetKeyValue|=1;//从高到低读入451的数据 
        else GetKeyValue|=0; 
        CH451_DCLK_LOW;               //下降沿有效 
        CH451_DCLK_HIGH; 
    } 
    if(GetKeyValue==0x00) return;     //读出键码为0跳过 
    for(i=0;i<16;i++){                //查找键盘代码对应的键值 
        if(GetKeyValue==KeyCode){ 
     KeyValue=i; 
     break; 

    } 

//CH451显示一位数码管,DIG选择数码管,Data要显示的数字,Point是否显示小数点 
void CH451_DisplayDig(uchar DIG,uchar Data,uchar Point){ 
    if(Point==1) CH451_WriteCommand(DigCode[DIG]|(DSYCode[Data]|0x80)); 
    else CH451_WriteCommand(DigCode[DIG]|DSYCode[Data]); 
}  


关键字:AVR  CH451  驱动程序 引用地址:AVR CH451驱动程序

上一篇:PS/2键盘扫描实验C程序
下一篇:非接触式智能卡模块的原理

推荐阅读最新更新时间:2024-03-16 15:49

基于AVR的激光测距机综合性能检测设备设计
由于传统的激光测距性能检测必须到室外对目标靶进行检测,并且受到天气条件的限制,使得技术普查和日常维护受到很大的制约。为了克服以上问题,笔者设计了一种基于AVR单片机的激光测距机综合性能检测设备,借助该设备,对不同型号的激光测距机完成测距精度、测距能力、测距逻辑、单脉冲能量等的数字化检测,大大提高了检测效率和测试精度。 1 设计方案 本方案的基本思想基于模拟激光测距机的工作原理和激光传输过程,激光测距机在工作时,首先从其发射通道发射一激光脉冲,经过大气传输照射在被测物体上,然后漫反射,激光测距机的接收通道接收到漫反射的激光回波,激光测距机内部安装有激光脉冲的发射、接收和计时模块,根据激光脉冲从发射到返回的时间可以计算出其走过的
[单片机]
基于<font color='red'>AVR</font>的激光测距机综合性能检测设备设计
嵌入式数据采集系统中的ADS8364驱动程序设计
1 引言 数据采集系统的工作原理就是将被测对象(外部世界或现场)的各种参量(可以是物理量,也可以是化学量,生物量)通过各种传感元件做适当转换后,再经信号调理、采样、量化、编码、传输等步骤,最后送到服务器进行数据处理和存储记录的过程。用于数据采集的成套设备称为数据采集系统(Data Acquisition System,DAS)。 数据采集系统一般包括传感器、放大器、滤波器、A/D采样转换电路、微处理器等元件。数据采集系统基本组成示意图如图1所示。A/D转换电路在数据采集系统中起着至关重要的作用,它的转换精度和工作可靠度直接关系着整个采集系统的工作性能。由于篇幅有限,本文仅就该数据采集系统中的A/D转换芯片ADS8364的驱动
[单片机]
嵌入式数据采集系统中的ADS8364<font color='red'>驱动程序</font>设计
用VMLAB进行AVR单片机硬件/软件协仿真
前言 在单片机应用开发过程中,当源文件的编译成功后,就要进行仿真调试工作。仿真调试可分为两大类--芯片级仿真和代码级仿真。芯片级仿真是指使用仿真软件和ICE硬件工具相配合,在实际硬件上进行仿真调试工作;而代码级仿真则完全在计算机上完成,不需要硬件的参与。两种类型的仿真各有特点,使用的场合不同。本文基于VMLAB,讲述了进行AVR单片机硬件/软件协同仿真的方法。 VMLAB的全称为:VisualMicroLab。它针对于AVR以及ST62系列单片机设计,是一个单片机的虚拟原型(virtualprototype)框架(frame),它可以提供给用户一个真正意义上的虚拟微控制器(MCU)设计实验室。它具有强大的多窗口、多文件的编
[工业控制]
用VMLAB进行<font color='red'>AVR</font>单片机硬件/软件协仿真
有关AVR32的介绍
1、AVR32有什么特点? AVR32是一个“双核”芯片,拥有MCU与DSP两个核,在一些应用领域上有着比较大的优势,继承AVR高效率的特点,AP7系列在150MHZ的情况下可以达到210DMIPS,由此带来巨大的功耗优势,特别是在一些移动领域上,同样AVR32有着丰富的外设:USART,SPI,TWI,USB,DMA,AC97,MCI,CAMERA INTERFACE,PWM,LCD,AUDIO MAC等等。 2、AVR32有哪些型号? AVR32现在主要包括AP7和UC3两个系列,打个不恰当的比方:AP7系列对应ARM9系列,并且在相同频率上占有多方面的优势,UC3系列对应ARM7系列,同样占有优势。AP7偏向系统
[单片机]
AVR轻松学ICCAVR PORTUES仿真
Atmega16 IO相关寄存器 学习 每种 单片机 要从控制各IO口的高低电平开始, avr 系列与IO有关的寄存器每组有三类,PORTn ,DDRn , PINn,及SFIOR内PUD位,PORTn与DDRn是控制端口的状态,对应关系如图。 PINn为读端口当前高低电平状态。 现在以keil中51系列为例,定义端口然后对等关系定义AVR端口在ICCARV中。 51 : S bit led=P1^2; led=0; led=1; AVR: #define ledh PORTA|=(1 PA0) led=1; #define ledl PORTA&=~(1 PA0) led
[单片机]
<font color='red'>AVR</font>轻松学ICCAVR PORTUES仿真
AVR单片机(五)、ATMEGA16的USART与PC机串行通信—01
五、ATMEGA16的USART与PC机串行通信 五—(01)、PC机发送字符给单片机控制发光管亮,同时将其传回PC机,其中单片机的发送和接收都采用查询方式(下一篇中有例程~) 1、USART的主要特点 通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特 点为: • 全双工操作( 独立的串行接收和发送寄存器) • 异步或同步操作 • 主机或从机提供时钟的同步操作 • 高精度的波特率发生器 • 支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位 • 硬件支持的奇偶校验操作 • 数据过速检测 • 帧错误检测 • 噪声滤波,包括错误的起始位检测,以及数字低通滤波器 • 三个独立的中断:发送
[单片机]
<font color='red'>AVR</font>单片机(五)、ATMEGA16的USART与PC机串行通信—01
AVR微处理器实现的简易示波器
1.1、信号调理电路 信号调理电路要完成的功能是:程控放大,叠加直流分量。程控放大的作用是:当输入信号的幅度很小的时候就需要对输入信号进行放大,使得被测信号可以在LCD上尽可能清楚的显示出来。叠加直流分量的作用是:ATmega16自带的A/D是单电源的,没办法输入负压而待测信号又往往有负压。这时候就需要这样一个电路,可以把负压抬高到0电平以上。 R1,R2分别由一个模拟开关CD4051来连接不同的电阻,不同的R1,R2通过公式: 这样就可以实现程控放大功能了。可调电阻R9用来设置信号调理电路加入的直流分量的大小。放大后的信号和直流分量最后由U3模拟加法器叠加后输出。 输入信号与输出信号的关系: 只要R4、R6、R
[单片机]
用<font color='red'>AVR</font>微处理器实现的简易示波器
linux驱动程序之电源管理之linux的电源管理架构(3)
Copyright (c) 2010 Rafael J. Wysocki rjw@sisk.pl , Novell Inc. Copyright (c) 2010 Alan Stern stern@rowland.harvard.edu ************************************************************* 本文由DroidPhone翻译于2011.8.5 ************************************************************* Linux的源代码里,大部分都属于设备驱动程序的代码,因此,大多数电源管理(PM)的代码
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved