收藏 分销(赏)

重邮单片机定时器和LED以及按键程序.doc

上传人:仙人****88 文档编号:9119556 上传时间:2025-03-14 格式:DOC 页数:5 大小:25.50KB
下载 相关 举报
重邮单片机定时器和LED以及按键程序.doc_第1页
第1页 / 共5页
重邮单片机定时器和LED以及按键程序.doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述
/** * 工程名称:定时器1的使用 * 功能描述:用定时器1工作方式2,以学号后3位为显示时间(ms),循环显示0-9 * 附加说明:学号后3位为573 * 修改记录:无 */ /* 头文件包含 */ #include "regx51.h" /* 用户宏定义 */ #define uchar unsigned char #define uint unsigned int /* 全局变量定义 */ static uint cnt = 0, nub = 0; uchar seg_tab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /* 自定义函数声明 */ /* 主函数部分 */ int main(void) { /* 端口初始化 */ P0 = 0x00; P1 = 0x0c; /* 定时器1初始化 */ TMOD = 0x20; TH1 = (256 - 200); TL1 = (256 - 200); ET1 = 1; EA = 1; TR1 = 1; while (1) { P0 = 0x00; P1_1 = 1;P1_1 = 0; P0 = seg_tab[cnt]; P1_0 = 1;P1_0 = 0; } } void timer1_sever(void) interrupt 3 { /* 工作方式2为自动重装初值 */ nub++; if (nub > (5*573)) { nub = 0; cnt++; if (cnt > 9) { cnt = 0; } } } ** * 工程名称:按键扫描 * 功能描述:扫描一行按键,通过LED编码显示键值 * 附加说明:不能使用延时函数,只能使用定时器(轮询法) * 修改记录:2011.9.28 23:03 在显示键值前添加关闭列线检测驱动P1_3 = 1; */ /* 头文件包含 */ #include "regx51.h" /* 用户宏定义 */ #define uchar unsigned char #define uint unsigned int /* 全局变量定义 */ static uchar keynub; uchar temp1, temp2; uchar seg_tab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /* 自定义函数声明 */ void delay_ms(uint time); /* 主函数部分 */ int main(void) { /* 端口初始化 */ P0 = 0x00; P1 = 0x0c; while (1) { P0 = 0xfe; P1_1 = 1;P1_1 = 0; P0 = 0x00; P1_0 = 1;P1_0 = 0; P1_3 = 0; temp1 = P0; temp1 &= 0x0f; if (temp1 != 0x0f) { delay_ms(5); temp2 = P0; temp2 &= 0x0f; if (temp2 != 0x0f) { if (temp1 == temp2) { switch (temp1) { case 0x0e:keynub = 0;break; case 0x0d:keynub = 1;break; case 0x0b:keynub = 2;break; case 0x07:keynub = 3;break; default:break; } while (temp2 != 0x0f) { temp2 = P0; temp2 &= 0x0f; } } } } P1_3 = 1; P0 = 0xfe; P1_1 = 1;P1_1 = 0; P0 = seg_tab[keynub]; P1_0 = 1;P1_0 = 0; delay_ms(2); } } void delay_ms(uint time) { uint cnt = 0; /* 定时器初始化 */ TMOD = 0x01; TH0 = (65536 - 1000)/256; TL0 = (65536 - 1000)%256; TR0 = 1; while (cnt != time) { if (TF0 == 1) { TF0 = 0; cnt++; TH0 = (65536 - 1000)/256; TL0 = (65536 - 1000)%256; } } } /** * 工程名称:独立按键 * 功能描述:通过独立按键K0实现计数,每按一下,数值加1实现二进制计数器 * 附加说明:LED和按键的综合应用 * 修改记录:无 */ /* 头文件包含 */ #include "regx51.h" /* 用户宏定义 */ #define uchar unsigned char #define uint unsigned int /* 全局变量定义 */ /* 自定义函数声明 */ void delay_ms(uint cnt); /* 主函数部分 */ int main(void) { uchar counter = 0; /* 端口初始化 */ P0 = 0x00; P1 = 0x0c; while (1) { P0 |= 0x0e;//将矩阵键盘的DIG1~DIG3行线电平拉高 P0 &= 0xfe;//将矩阵键盘的DIG0行电平拉低 P1_1 = 1; //开键盘行线控制锁存 P1_1 = 0; //关键盘行线控制锁存,以上四行代码实现了键盘的DIG0行电平为低,其余为高 P1_3 = 0; //开键盘列线检测驱动使能 if (P0_0 == 0) //检测到K0键按下? { delay_ms(5); //如果有,延时去抖 if (P0_0 == 0)//真的是K0键按下 { while (P0_0 == 0)//等待按键松开 {;} counter++; //计数器加1 if (counter > 15)//计数器是否计满15(1111) { counter = 0; //若计满,则清零 } P0 = (counter<<4);//通过LED显示现在的计数值 P1_2 = 0; //开LED驱动 } } P1_3 = 1;//关键盘列线检测驱动使能 } } void delay_ms(uint cnt) { uint i, j; for (i = cnt; i > 0; i--) for (j = 122; j > 0; j--) {} }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服