有关7279键盘驱动芯片程序C语言

有关7279键盘驱动芯片程序C语言,第1张

默认11.0592Mhz的晶振。

—————————————————————*/

#include <reg51.h>

/*--------------------------------------------

调用方式:自行I/O 口定义﹫2001/05/12

函数说明:私有函数,各接口定义

--------------------------------------------*/

sbit HD7279_CS=P1^4// HD7279_CS--P1.4

sbit HD7279_CLK=P1^5// HD7279_CLK-- P1.5

sbit HD7279_DATA=P1^6// HD7279_DATA-- P1.2

sbit HD7279_KEY =P1^7// HD7279_KEY-- P1.3

/*--------------------------------------------

调用方式: HD7279A 各指令定义﹫2001/05/12

函数说明:私有函数,接口定义

--------------------------------------------*

/#define HD7279_RESET 0xa4 //复位

#define HD7279_TEST 0xbf //测试

#define HD7279_RLC 0xa3 //循环左移

#define HD7279_RRC 0xa2 //循环右移

#define HD7279_RL 0xa1 //左移

#define HD7279_RR 0xa0 //右移

#define HD7279_DECODE0 0x80 //译码方式0

#define HD7279_DECODE1 0xc8 //译码方式1

#define HD7279_UNDECODE 0x90 //译码方式2: 不译码

#define HD7279_HIDE 0x98 //消隐

#define HD7279_FLASH 0x88 //闪烁

#define HD7279_SEGON 0xe0 //段亮

#define HD7279_SEGOFF 0xc0 //段灭

#define HD7279_READ 0x15 //读

/*--------------------------------------------

调用方式: void HD7279_LongDelay(void) 等侍函数﹫2001/05/12

函数说明 私有函数,>500ms

--------------------------------------------*/

void HD7279_LongDelay(void)

{

unsigned char i

for (i=0i<6i++)

}

/*--------------------------------------------

调用方式:void HD7279_ShortDelay(void) 等侍函数﹫2001/05/12

函数说明:私有函数,=500ms

--------------------------------------------*

/void HD7279_ShortDelay(void)

{}

/*--------------------------------------------

调用方式:void Delay10ms(unsigned char time) 等侍函数﹫2001/05/12

函数说明:私有函数, 6M晶振

--------------------------------------------*/

void Delay10ms(unsigned char time)

{

unsigned char i

unsigned int j

for(i=0i<timei++)

{

for(j=0j<931j++)

{}

}

}

/*--------------------------------------------

调用方式:void HD7279_ShortDelay(void) 函数﹫2001/05/12

函数说明:私有函数,送指令

--------------------------------------------*/

void HD7279_SendByte( unsigned char out_byte)

{

unsigned char i

HD7279_CS=0

HD7279_LongDelay()

for(i=0i<8i++)

{

if(out_byte&0x80) { HD7279_DATA=1}

else { HD7279_DATA=0}

HD7279_CLK=1

HD7279_ShortDelay()

HD7279_CLK=0

HD7279_ShortDelay()

out_byte=out_byte<<1

}

HD7279_DATA=0

}

/*--------------------------------------------

调用方式:void Write7279(unsigned char command,unsigned char dta) 函数﹫2001/05/12

函数说明:私有函数,写函数

--------------------------------------------*/

void Write7279(unsigned char command, unsigned char dta)

{

HD7279_SendByte( command )

HD7279_SendByte( dta )

}

/*--------------------------------------------

调用方式:自定义函数﹫2001/05/12

函数说明:私有函数,自行定义

--------------------------------------------*/

#define RunKey 0xXX

#define StopKey 0xXX

/*--------------------------------------------

调用方式:unsigned charHD7279_ReceiveByte(void)函数﹫2001/05/12

函数说明:私有函数,接受一个BYTE函数

--------------------------------------------*/

unsigned char HD7279_ReceiveByte(void)

{

unsigned char i, in_byte

HD7279_DATA=1

HD7279_LongDelay()

for(i=0i<8i++)

{HD7279_CLK=1<br>HD7279_ShortDelay()<br>in_byte=in_byte<<1<br>if(HD7279_DATA) { in_byte=in_byte|0x01}

HD7279_CLK=0

HD7279_ShortDelay()

}

HD7279_DATA=0

return (in_byte)

}

/*--------------------------------------------

调用方式:unsigned char HD7279_GetKey()函数﹫2001/05/12

函数说明:私有函数,读键盘函数

--------------------------------------------*/

unsigned char HD7279_GetKey()

{

unsigned char key

if(!HD7279_KEY)

{

HD7279_SendByte(HD7279_READ)

key=HD7279_ReceiveByte()

switch( key )

{case RunKey: <br>case StopKey: <br>while(!HD7279_KEY)<br>default: return(0xff)<br>}

}

return(0xff)

}

/*--------------------------------------------

调用方式:main()函数﹫2001/05/12

函数说明:私有函数,例函数

--------------------------------------------*/

main()

{HD7279_SendByte(0xa4)//复位<br>Write7279(0x80,0)//显示‘0’<br>}

步骤一 使用“键盘显示程序”测试键盘按键是否在按下时正常响应

1.从苹果菜单中选取“系统偏好设置”,然后选择“键盘”。

2.选中“在菜单栏中显示虚拟键盘及表情与符号检视器”。

3.点击菜单栏右上角输入法,选择“显示虚拟键盘”,显示键布局的键盘显示程序会随即出现在显示器上盘。

4.按下Delete按键,并观察键盘显示程序中的相应按键是否高亮显示。如果高亮显示,则表示该按键可正常工作。

步骤二 确认未启用"鼠标键"

1.从 Apple 菜单中,选取“系统偏好设置”。

2.点按“系统偏好设置”窗口中的“辅助功能”图标。

3.点按“鼠标与触控板”或选择“鼠标”标签。

4.取消勾选“启用鼠标键”。

步骤三 重置系统管理控制器 (SMC)

1.将 Mac 关机。

2.拔下电源线。

3.等待 15 秒。

4.将电源线重新接回。

5.等待 5 秒钟,然后按下电源按钮以开启 Mac

步骤四 重置非易失的随机访问存储器(NVRAM)

1.关闭 Mac。

2.在键盘上找到以下按键:Command (⌘)、Option、P 和 R。

3.打开 Mac,听到启动声后立即按住 Command-Option-P-R 键。

4.按住这些按键直到电脑重新启动,然后您会再次听到启动声。

5.松开这些按键。

================================================================

功能:本程序实现P0口的对数码管动态显示秒表的分、秒、1/100秒;

计时程序由中断服务程序实现,采用定时计数器T0工作方式1;

P2口实现对数码管的片选功能

================================================================

==========================初始化================================

SHUCHUEQUP2 定义P0口为输出口

PIANXUAN EQUP1定义P2口为片选口

MIAO EQU30H

FEN EQU31H

MIAO0 EQU32H

SHUZIEQU33H

C_0 BIT20H.0

======================系统程序开始==============================

ORG 00H

LJMP START

ORG 03H

LJMP ON_OFF

ORG 0BH

LJMP T0_1

ORG 13H

LJMP RESET

ORG 30H

START:

CALL INIT

SETB C_0

MOVMIAO,#00

MOVMIAO0,#00

MOVFEN,#00

MOVDPTR,#TAB

MOV R2,#5

MAIN:

JNBC_0,$

CLRC_0

LL: CALL DISPLAY

CALL SHIJIAN

JMPMAIN

========================时间子程序=============================

输入:"30H、31H、32H"

输出:无

实现的功能:分、秒、百分之秒的计算。

===============================================================

SHIJIAN:

DJNZR2,TIAOCHU

MOV R2,#5

INC MIAO0

MOV R3,MIAO0

CJNER3,#100,TIAOCHU

MOV MIAO0,#00

INC MIAO

MOV R3,MIAO

CJNER3,#60,TIAOCHU

MOV MIAO,#00

INC FEN

MOV R3,FEN

CJNER3,#60,TIAOCHU

MOV FEN,#00

TIAOCHU:RET

========================显示子程序=============================

输入:"A"

输出:"P2口"

实现的功能:显示秒、分、百分之妙

===============================================================

DISPLAY:MOV SHUZI,MIAO0

CALL JISUAN

MOVC A,@A+DPTR

MOV SHUCHU,A 显示十位

MOV PIANXUAN,#10H片选

CALL DELAY

MOV PIANXUAN,#00H

MOV A,B

MOVC A,@A+DPTR

MOV SHUCHU,A 显示个位

MOV PIANXUAN,#20H片选

CALL DELAY延时

MOV PIANXUAN,#00H

MOV SHUZI,MIAO

CALL JISUAN

MOVC A,@A+DPTR

MOV SHUCHU,A 显示十位

MOV PIANXUAN,#04H片选

CALL DELAY

MOV PIANXUAN,#00H

MOV A,B

MOVC A,@A+DPTR

MOV SHUCHU,A 显示个位

MOV PIANXUAN,#08H片选

CALL DELAY延时

MOV PIANXUAN,#00H

MOV SHUZI,FEN

CALL JISUAN

MOVC A,@A+DPTR

MOV SHUCHU,A 显示十位

MOV PIANXUAN,#01H片选

CALL DELAY

MOV PIANXUAN,#00H

MOV A,B

MOVC A,@A+DPTR

MOV SHUCHU,A 显示个位

MOV PIANXUAN,#02H片选

CALL DELAY延时

MOV PIANXUAN,#00H

RET

========================计算子程序=============================

输入:30H

输出:"A和B"

实现的功能:把33H中的数据十位和个位分离出来

===============================================================

JISUAN:MOV A,SHUZI 数据放在A中

MOV B,#10除数放在B中

DIV AB 商放在A中,余数放在B中

RET

====================复位中断服务程序============================

输入;无

输出: 无

实现的功能:把30H、31H、32H中的数据清零。

================================================================

RESET:PUSH ACC

MOV 30H,#00H

MOV 3H,#00H

MOV 32H,#00H

CALL DELAY

POP ACC

RETI

====================启停中断服务程序============================

输入;无

输出: 无

实现的功能:关闭定时器

================================================================

ON_OFF:CPLTR0

CALL DELAY

RETI

====================定时中断0服务子程序========================

输入:无

输出:无

实现的功能:实现定时20MS,影响标中断志位C_0

===============================================================

T0_1:MOVTL0,50H 设置定时初值

MOVTH0,51H

SETB C_0定时标志位清0

RETI

========================中断设置子程序=========================

输入:无

输出:无

实现的功能:初始化设置定时器,设置初值,开中断0、中断1,定时器0.

===============================================================

INIT:MOVTMOD,#01H 定时器0工作方式1

MOVDPTR,#65536-20000

MOV50H,DPL

MOV51H,DPH

MOVTL0,50H设置定时初值

MOVTH0,51H

MOVIE,#87H 开定时器中断0

MOVTCON,#15H

RET

======================延时程序==================================

输入;无

输出: 无

实现的功能:延时一段时间

================================================================

DELAY:MOV R6,#80

L7:MOV R5,#60

L8:DJNZ R5,$

DJNZ R6,L7

RET

======================共阳查表数据==============================

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

===========================结束=================================

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12143865.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存