完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
实验室学51单片机,用STC89C51系列,作业太难了,求佬给源代码帮助一下谢谢
1.通过定时器,8位数码管,8个独立按键完成1000秒以内的数字秒表,最小分辨0.1秒,设置启动计秒键,暂停计秒键,继续计秒键,归零键,通过上述按键,完成计秒功能 2.使用矩阵键盘结合8位LED数码管和蜂鸣器,能够实现100以内数字的加减乘除运算,显示结果,每按下键盘,发出短促的按键音分。
|
|
相关推荐
1个回答
|
|
好的,我将为您提供两个项目的源代码。首先是数字秒表项目,然后是矩阵键盘与LED数码管和蜂鸣器的加减乘除运算项目。
1. 数字秒表项目: ```c #include #define uchar unsigned char #define uint unsigned int sbit start = P1^0; // 启动计秒键 sbit pause = P1^1; // 暂停计秒键 sbit continue_key = P1^2; // 继续计秒键 sbit reset = P1^3; // 归零键 uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管显示0-9的编码 uchar display[8] = {0}; // 数码管显示数据 uint count = 0; // 计数器 void delay(uint ms) { uint i, j; for (i = ms; i > 0; i--) for (j = 112; j > 0; j--); } void display_time() { uchar i; for (i = 0; i < 8; i++) { P0 = 0xff; // 关闭所有数码管 P0 = table[display[i]]; // 显示当前数码管 P2 = 0x01 << i; // 选择当前数码管 delay(1); // 延时 } } void Timer0_Init() { TMOD = 0x01; // 设置定时器模式 TH0 = 0x4c; // 设置定时器初值 TL0 = 0x00; ET0 = 1; // 开启定时器0中断 EA = 1; // 开启总中断 TR0 = 1; // 启动定时器0 } void main() { Timer0_Init(); // 初始化定时器 while (1) { if (start == 0) { delay(20); // 消抖 if (start == 0) { TR0 = 1; // 启动定时器0 while (!start); // 等待按键释放 } } if (pause == 0) { delay(20); // 消抖 if (pause == 0) { TR0 = 0; // 停止定时器0 while (!pause); // 等待按键释放 } } if (continue_key == 0) { delay(20); // 消抖 if (continue_key == 0) { TR0 = 1; // 启动定时器0 while (!continue_key); // 等待按键释放 } } if (reset == 0) { delay(20); // 消抖 if (reset == 0) { count = 0; // 归零 while (!reset); // 等待按键释放 } } display_time(); // 显示时间 } } void Timer0_ISR() interrupt 1 { TH0 = 0x4c; // 重新加载定时器初值 TL0 = 0x00; count++; // 计数器加1 if (count >= 1000) { count = 0; // 计数器归零 } display[7] = count % 10; count /= 10; display[6] = count % 10; count /= 10; display[5] = count % 10; count /= 10; display[4] = count % 10; count /= 10; display[3] = count % 10; count /= 10; display[2] = count % 10; count /= 10; display[1] = count % 10; count /= 10; display[0] = count % 10; } ``` 2. 矩阵键盘与LED数码管和蜂鸣器的加减乘除运算项目: ```c #include #define uchar unsigned char #define uint unsigned int sbit key_scan = P1; // 矩阵键盘扫描 sbit display = P0; // LED数码管显示 sbit buzzer = P2; // 蜂鸣器 uchar code table[] = {0x3f, 0x06, 0x5b |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式-ELFBOARD-ELF 2硬件知识分享-最小系统原理
344 浏览 0 评论
587 浏览 1 评论
3556 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之开发板测试
832 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之编写程序
1026 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11922 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-10 15:54 , Processed in 0.521782 second(s), Total 39, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号