#include"at89x52.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code acLEDCS[]={0xe0,0xd0,0xb0,0x70}; /* 位选地址码,“0”有效,位选接的是P2口高4位 */
uchar code acLedSegCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};/* 段码 */
uchar acLED[4]; /* 显示缓冲区 */
char cScanIndex; /* 位选指针0~3 */
uchar cKeyCode; /* 键值 */
uint nDelayKey; /* 键盘延时变量,为定时中断间隔时间的整数倍 */
uchar cKeySec; /* 按键长按几秒 */
bit bPush; /* 是否按键标志 */
char cMode; /* 显示方式变量,0~3对应4种方式 */
uint nTimer; /* 定时计数变量,为定时中断间隔时间的整数倍 */
uint cData[2] = {1234,5678};
/************************* 数码管显示函数 ***************************/
void display()
{
acLED[0] = acLedSegCode[cData[cMode] / 1000]; /* LED显示第1位 */
acLED[1] = acLedSegCode[cData[cMode] / 100 % 10];/* LED显示第2位 */
acLED[2] = acLedSegCode[cData[cMode]/10%10]; /* LED显示第3位 */
acLED[3] = acLedSegCode[cData[cMode]%10]; /* LED显示第4位 */
}
/******************** 按键处理程序 ******************/
void DisposeKEY()
{
switch(cKeyCode)
{
case 6: /* 例如:KeyADD */
cData[cMode]++;
break;
case 5: /* 例如:KeySUB */
cData[cMode]--;
break;
case 3:
cMode++;
cMode&=1;
break;
}
display();
cKeyCode = 0;
}
/************************** 主函数 *****************************/
void main(void)
{
/**************** 定时器初始化 *******************/
TMOD= 0x11;
TH1 = -18; /* 16位定时器,晶振22.1184M,22118400/12/256 = 7200 = 18*400 每秒钟溢出400次,每2.5ms中断一次*/
TR1 = 1;
ET1 = 1;
EA = 1; /* 开总中断 */
display(); /* 显示初始界面 */
while(1)
{
if(cKeyCode)
{
DisposeKEY(); /* 响应按键操作 */
}
}
}
/****************** 多任务时序控制时钟中断 *********************/
void IntTimer() interrupt 3
{
TH1 = -18; /* 重装初值,保证每2.5ms中断一次*/
P0 = 0; // 清段选再送位选(消影)
P2 = 0x0f;
/*********************** 定时扫描独立按键 ************************/
if((P2 & 0x07) != 0x07) // 判断是否有按键动作,P22、P21、P20没有按键时为高电平(逻辑1)
{
nDelayKey++;
if((nDelayKey == 4 || nDelayKey % 128 == 0) && bPush == 0) // 延时削颤10ms,每160ms连加连减
{
cKeyCode = P2 & 0x07;// 取键值P20、P21、P22
}
if(nDelayKey % 400 == 0)
{ cKeySec++;
}
}
/***********************************************/
else // 松键,清按键相关变量
{
nDelayKey = 0;
cKeyCode = 0;
cKeySec = 0;
bPush = 0;
}
//*************************显示刷新******************
P2 = acLEDCS[cScanIndex]; /* 送位选数据 */
P0 = acLED[cScanIndex++]; /* 送显示数据,位选指针移位 */
cScanIndex &= 3; /* 位选指针回位 */
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
zy1.rar (15个子文件)
zy1
fz1
1.pdsprj 16KB
Last Loaded 1.pdsbak 16KB
1.pdsprj.DESKTOP-53FTDD0.ZXD.workspace 2KB
1.pdsprj.LAPTOP-LLLG6L9K.peace.workspace 3KB
Objects
project.lnp 95B
project.hex 2KB
main.obj 6KB
project.build_log.htm 1001B
project 6KB
project.uvgui.peace 70KB
Listings
main.lst 5KB
project.m51 7KB
project.uvopt 5KB
project.uvproj 12KB
main.c 3KB
共 15 条
- 1
资源评论
ldtouzi
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功