#include #define KEYPORT P1 #include "./delay/delay.h" sbit seg_select = P2^0; //段选 sbit bit_select = P2^1; //位选 #define SEGPORT P0 unsigned char segdata[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char bitdata[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char TempData[2]; void display(void) { static unsigned char i = 0; SEGPORT = 0x0; //消除重影 seg_select = 1; seg_select = 0; SEGPORT = 0xff; bit_select = 1; bit_select = 0; SEGPORT = TempData[i]; seg_select = 1; seg_select = 0; SEGPORT = bitdata[i]; bit_select = 1; bit_select = 0; i++; if(2 == i) { i = 0; } } void timer0_init(void) //中断函数 { EA = 1; //打开总中断 TMOD |= 0x01; //设置定时器工作方式 TH0 = (65536 - 2000) / 256; TL0 = (65536 - 2000) % 256; ET0 = 1; //打开定时器中断允许 TR0 = 1; } void timer0_isr(void) interrupt 1 //中断服务程序 { TH0 = (65536 - 2000) / 256; TL0 = (65536 - 2000) % 256; display(); } unsigned char key_scan(void) { unsigned char keyvalue; KEYPORT = 0xf0; if(0xf0 != KEYPORT) // 有按键按下 { delay_ms(10); if(0xf0 != KEYPORT) //确实有按键按下 { //KEYPORT &= 0xfo; KEYPORT = 0xfe; if(0xfe != KEYPORT) { keyvalue = KEYPORT; while(0xfe != KEYPORT); //有按键抬起 delay_ms(10); while(0xfe != KEYPORT); //确实有按键抬起 return keyvalue; } KEYPORT = 0xfd; if(0xfd != KEYPORT) { } KEYPORT = 0xfb; if(0xfb != KEYPORT) { } KEYPORT = 0xf7; if(0xf7 != KEYPORT) { } } } return 0xff; } unsigned key_prc() { unsigned char keynum; keynum = key_scan(); switch(keynum) { case 0x7e: return 0; break; case 0xbe: return 1; break; case 0xde: return 2; break; case 0xee: return 3; break; default: return 0xff; break; } } void main() { unsigned char key; timer0_init(); while(1) { key = key_prc(); if(0xff != key) { TempData[0] = segdata[key / 16]; TempData[1] = segdata[key % 16]; } } } /*********delay.c*******/ void delay_us(unsigned char t) { while(--t); } void delay_ms(unsigned char t) { while(t--) { delay_us(245); delay_us(245); } } void delay_s(unsigned char t) { while(t--) { delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); delay_ms(200); } } /*******delay.h******/ #ifndef _DELAY_H_ #define _DELAY_H_ extern void delay_us(unsigned char t); extern void delay_ms(unsigned char t); extern void delay_s(unsigned char t); #endif
上一篇:单片机码表的驱动程序
下一篇:单片机之利用按键来使数码管上两位示数增加
推荐阅读最新更新时间:2024-11-16 23:01
设计资源 培训 开发板 精华推荐
- Stm32G030简易示波器
- ESP32-S3 Core Femto超小核心板
- AP7331 300mA 低静态电流、低压差可调输出线性稳压器的典型应用
- #第二届立创大赛#立志创新——电子积木
- RT8450B 高压多拓扑 LED 驱动器的典型应用模拟调光降压配置
- NCP301LSN47T1 4.7V 电压检测器的典型应用,用于具有附加迟滞的微处理器复位电路
- AT91SAM9CN11-EK,基于 SAM9CN11 ARM9 MCU 的评估套件
- 4080风扇转接
- DC333A-A,用于 LT5502EGN、具有限幅放大器和 I/Q 解调器的 400MHz IF 接收器的演示板
- EVAL-AD5243SDZ,AD5243 双通道、256 位数字电位器评估板
- 直播已结束|TI 嵌入式直播周带您直击工业应用
- 零起点入门,带你动手做AVR开发板
- DIY电子钟套件,有兴趣来做啊
- 有奖直播:清洁水源的守护 —— ADI 水质监测方案
- 有奖直播|使用 ModusToolbox® 构建系统,灵活应对物联网设计挑战
- 下载有礼:2017年泰克亚太专家大讲堂第二期: 100G/200G/400G通讯标准发展趋势及解决方案
- TI 嵌入式主题直播月——为高效、智能、低功耗系统设计助力
- 论坛小程序上线!扫码解锁逛坛新姿势啦!!
- 有奖直播:【瑞萨电子推出针对血糖仪应用的内置模拟前端的RL78/L1A系列微控制器】
- 【赠书100%有礼】一本书教你如何开发测试系统,深入了解数据采集系统