c语言硬件控制程序,msp430的一些常用的C语言控制程序---ZLG7289
/**********************************************************/
//MSP430高级实验开发组件 - ZLG7289键盘显示组件示例程序
//时钟设置:
ACLK=N/A,MCLK=SMCLK=default(DCO~800k)
//硬件连接:
MSP430 Broad ZLG7289 Broad
------------------ ------------------
| VCC | ------> | VCC |
| P65 | ------> | CS |
| P64 | ------> | CLK |
| P63 | | DAT |
| P24 | | GND | ------> | GND |
------------------ ------------------
//当前演示程序功能描述:
当有按键按下时,430进入中断读取键值,显示在LED数码管上
/*********************************************************/本文引用地址:http://www.eepw.com.cn/article/201611/316584.htm
#include
#define Z7289_CSBIT5
#define Z7289_CLKBIT4
#define Z7289_DATBIT3
#defineZ7289_KEYBIT4
#define Z7289_DIRP6DIR
#define Z7289_OUTP6OUT
#define Z7289_INP6IN
#define Z7279_INT_DIRP2DIR
#define Z7279_INT_IEP2IE
#define Z7279_INT_IESP2IES
#define Z7279_INT_IFGP2IFG//定义MSP430端口
#define Z7289_CS_LOZ7289_OUT &= ~Z7289_CS
#define Z7289_CS_HIZ7289_OUT |= Z7289_CS
#define Z7289_CLK_LO Z7289_OUT &= ~Z7289_CLK
#define Z7289_CLK_HIZ7289_OUT |= Z7289_CLK
#define Z7289_DAT_LO Z7289_OUT &= ~Z7289_DAT
#define Z7289_DAT_HIZ7289_OUT |= Z7289_DAT
#define Z7289_RESETZ7289_Send1(0xA4)
#define Z7289_TESTZ7289_Send1(0xBF)
#define Z7289_LMOVZ7289_Send1(0xA1)
#define Z7289_RMOVZ7289_Send1(0xA0)
#define Z7289_RLMOVZ7289_Send1(0xA3)
#define Z7289_RRMOVZ7289_Send1(0xA2)//定义ZLG7289功能
const unsigned char DelayConst = 0;//系统延时
const unsigned char Code[3]={//显示方式
0x80,0xC8,0x90
};
const unsigned char Keys[16]={//按键编码
0x01,0x18,0x19,0x1A,0x10,0x11,0x12,0x08,0x09,0x0A,0x1B,0x13,0x0B,0x03,0x00,0x02
};
void Z7289_Delayt(unsigned int dtime);
void Z7289_Send1(unsigned char dat);
void Z7289_Send2(unsigned char add,unsigned char dat);
void Z7289_Show(unsigned char add,unsigned char coding,unsigned char d);
void Z7289_Init(void);
void Z7279_Init(void);
void OSC_Init(void);
unsigned char Z7289_ReadKey(void);
unsigned char readkey;
int j=8;
unsigned char key_array[8];
void main(void) {
WDTCTL = WDTPW + WDTHOLD; //停止系统软件看门狗
OSC_Init();
Z7289_Init();
Z7279_Init();
_BIS_SR(GIE);
}
//中断服务程序
读取键值并显示
#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR (void) {
readkey = Z7289_ReadKey();
key_array[j] = readkey;
Z7289_Show(j,1,readkey);
Z7279_INT_IFG = 0;
j--;
if(j<0)
j=8;
}
//
void OSC_Init(void){
BCSCTL1 &= ~XT2OFF; //XT2 = HF-XTAL
do {
IFG1 &= ~OFIFG; //清除OSCFault标志位
for (int i=0xFF;i>0;i--); //延时等待晶振
} while ((IFG1 & OFIFG)); //OSCFault标志位始终有效
BCSCTL2 |= SELM_2; //MCLK = XT2
}
//初始化程序
设定端口和中断,初始化ZLG7289
void Z7289_Init(void) {
Z7289_DIR |= (Z7289_CS + Z7289_CLK + Z7289_DAT);
Z7289_CS_HI;
Z7289_CLK_LO;
Z7289_RESET;
}
//初始化7279
void Z7279_Init(void){
Z7279_INT_DIR &= ~Z7289_KEY;
Z7279_INT_IE |= Z7289_KEY;
Z7279_INT_IES |= Z7289_KEY;
}
//向ZLG7289发送一个字节(命令)
void Z7289_Send1(unsigned char dat) {
unsigned char itemp;
Z7289_CS_LO;
Z7289_Delayt(1);
for(itemp=0;itemp<8;itemp++) {
if((dat
else
Z7289_DAT_LO;
Z7289_Delayt(1);
Z7289_CLK_HI;
Z7289_Delayt(1);
Z7289_CLK_LO;
}
Z7289_CS_HI;
}
//向ZLG7289发送两个字节(命令+数据)
void Z7289_Send2(unsigned char add,unsigned char dat) {
unsigned char itemp;
Z7289_CS_LO;
Z7289_Delayt(1);
for(itemp=0;itemp<8;itemp++) {
if((add
else
Z7289_DAT_LO;
Z7289_Delayt(1);
Z7289_CLK_HI;
Z7289_Delayt(1);
Z7289_CLK_LO;
}
Z7289_Delayt(1);
for(itemp=0;itemp<8;itemp++) {
if((dat
else
Z7289_DAT_LO;
Z7289_Delayt(1);
Z7289_CLK_HI;
Z7289_Delayt(1);
Z7289_CLK_LO;
}
Z7289_CS_HI;
}
//按照编码方式显示字符
void Z7289_Show(unsigned char add,unsigned char coding,unsigned char d) {
Z7289_Send2(Code[coding]+add,d);
}
//向ZLG7289发送命令后,读取按键键值,并查表返回结果
unsigned char Z7289_ReadKey(void) {
unsigned char itemp;
unsigned char dat;
dat = 0x15;
Z7289_CS_LO;
Z7289_Delayt(1);
for(itemp=0;itemp<8;itemp++) {//向7289发送命令
if((dat
else
Z7289_DAT_LO;
Z7289_Delayt(1);
Z7289_CLK_HI;
Z7289_Delayt(1);
Z7289_CLK_LO;
}
Z7289_DIR &= ~Z7289_DAT;
Z7289_Delayt(1);
for(itemp=0;itemp<8;itemp++) {//根据输入口的电平高低来确定dat的值
Z7289_CLK_HI;
Z7289_Delayt(1);
Z7289_CLK_LO;
dat<<=1;
if((Z7289_IN&Z7289_DAT) == Z7289_DAT)
dat |= BIT0;
else
dat &= ~BIT0;
}
Z7289_DIR |= Z7289_DAT;
Z7289_CS_HI;
for(itemp=0;itemp<16;itemp++)
if(dat==Keys[itemp])//查表返回键值,表可以从IAR中观察得到
break;
return itemp;
}
void Z7289_Delayt(unsigned int dtime) {
unsigned int itemp,jtemp;
for(itemp=0;itempfor(jtemp=0;jtemp}
c语言硬件控制程序,msp430的一些常用的C语言控制程序---ZLG7289相关推荐
- c语言程序设计的顺序结构的常用控制语句,C语言程序设计教程-第03课-顺序结构的程序设计.ppt...
<C语言程序设计教程-第03课-顺序结构的程序设计.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计教程-第03课-顺序结构的程序设计.ppt(21页珍藏版)>请在人人 ...
- c语言掌握常用函数,c语言一些常用函数.pdf
c语言一些常用函数 C 语言程序设计(常用函数说明) C 语言是 1972 年由美国的 Dennis Ritchie 设计发明的,并首次在 UNIX 操作系统的 DE C PDP-11 计算机上使用. ...
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面...
Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面 1. 常用算法1 1.1. 目录2 1.2. 定义和用法编辑2 1.3 ...
- c语言goto语句用法_硬件工程师必知的10个C语言技巧
硬件设计师最常见的工作内容是通过写代码来测试硬件.这10个C语言技巧(C语言仍然是常见的选择)可以帮助设计师避免因基础性错误而导致某些缺陷的产生并造成维护方面的困扰. 为了成功的推出一个产品,软件开发 ...
- 基于硬件的C(C++)语言程序设计教程5:更改Atmel Studio的语言设置
本系列文章希望探讨以硬件为平台讲述C(C++)知识的一个新的途径,改变目前大多数C语言教程仅注重C语言本身的语法规则,而脱离其应用环境的现状.希望读者通过本教程的学习,能够立刻学以致用,真正将所学知识 ...
- 【R语言】常用的R语言数据挖掘包
常用的R语言数据挖掘包 与Python相比,R语言的很多算法分别会有不同的作者实现,而每个人有不同的实现方式,所以会产生大量的package.因此,学习R语言需要广泛了解与所研究问题相关的包,这样就比 ...
- noip c语言,noip常用库函数(C语言)
noip常用库函数(C语言) 头文件 stdio.h 函数列表 函数类别 函数用途 详细说明 文件操作 删除文件 remove 修改文件名称 rename 生成临时文件名称 tmpfile 得到临时文 ...
- 机器人编程常用的四大语言
机器人的开发语言一般为C.C++.C++ Builder.VB.VC等语言,主要取决于执行机构(伺服系统)的开发语言:而机器人编程分为示教.动作级机器人编程语言.任务级编程语言三个级别:机器人编程语言 ...
- 火龙果(redpitaya)开发板常用接口C语言开发指南(九)——产生信号脉冲(持续更新中)
火龙果(redpitaya)开发板常用接口C语言开发指南(九)--产生信号脉冲(持续更新中) --本人为<火龙果实战指南--搭建基于Zynq处理器的测量仪器与创新实践平台>一书的作者之一, ...
最新文章
- SubVersion和Subclipse的简单使用方法
- java中路径中参数化_Azure数据工厂:参数化文件夹和文件路径
- PHP做好友关系系统,php社交好友网站
- matlab完全自学一本通 pdf,matlab r2014a自学一本通 MATLAB R2014a完全自学一本通 中文pdf扫描版[125MB] 下载-脚本之家...
- java自定义异常报错
- mysql log error_MySQL日志之error_log
- python字符串format格式化三
- MFC 对Button控件的重绘方法(多种)
- android 的几个黄色警告解决办法(转)
- 《Java 解惑》笔记(一)
- 微分中的dx和delta x
- redis unlink
- 走出情绪内耗:理性情绪行为疗法
- Oracle表分区合并
- 【LeetCode】86. 分隔链表
- html中尖括号写法,HTML中如何显示特殊字符(尖括号 “”,)?
- C语言中内嵌汇编asm语法
- 贝尔链CEO Vincent:让游戏玩家从趣味消费到价值收益
- matlab中如何转动三维图_MATLAB小技巧之:绕任意空间轴旋转三维图形
- 大学计算机作业查重,清华大学课程作业查重