—————————————————————*/
#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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)