完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
5个回答
|
|
回帖奖励 +6 分积分
我用的51
void beep() //产生1KHZ频率声音的函数 { fmq=0; delay500us(i); fmq=1; delay500us(i); //i就是频率从1千赫兹加一 ,,2千赫兹 } 让数字从一位变到多位 while(1)//y记录x的原始值 { P0=0xff; P2=weixuan[n++]; P0=duanxuan[x%10]; x=x/10; if(x==0) { n=0;x=y; } } //这是显示函数,其实就是计算器的(整数) |
|
|
|
我是一个不怎么懂的菜鸟。 但我看这里面没有按键程序呀?我想让它按一下加一下,,希望还能说详细点。谢谢 |
|
|
|
#include
void delay_1ms(unsigned int i); void key_value(); //按键处理函数 void display(long i); //显示数字函数 unsigned char duanxuan[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //0~9 unsigned char duanxuan2[] = {0xfe,0xbf,0xf7,0xb6}; // +-*/的段码 unsigned char weixuan[] = {0x7f,0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}; long key = 0; //保存正在按的数值 unsigned char mode = 0; //标志着+-*/ =1是+ =2是- =3是* =4是/ long num1 = 0; //保存第一个数 long result = 0; //保存计算的结果 unsigned char end = 0; //=1标志着按了等号 unsigned char display_mode = 0; //显示模式 =0显示目前正在按的数值 =1显示+-*/ =2显示计算结果 int main(void) { while(1) { key_value(); //按键处理函数 if( display_mode == 0 ) //显示正在按的数值 { display(key); } else { if( display_mode == 1 ) //显示+-*/ { P2 = 0x7f; P0 = duanxuan2[mode-1]; } else //显示结果 { display(result); } } } return 0; } void key_value() { P1=0xf0; if(P1!=0xf0) { delay_1ms(20); //消抖 if(P1!=0xf0) //消抖 { /****** 以下四个switch语句为按键检测程序 *****/ P1=0xfe; switch(P1) { case(0xee):key=key * 10 + 1;display_mode = 0;break; //数字1按键 case(0xde):key=key * 10 + 2;display_mode = 0;break; //数字2按键 case(0xbe):key=key * 10 + 3;display_mode = 0;break; //数字3按键 case(0x7e):mode = 1;display_mode = 1;break; // +(加号)按键 } P1=0xfd; switch(P1) { case(0xed):key=key * 10 + 4;display_mode = 0;break; //数字4按键 case(0xdd):key=key * 10 + 5;display_mode = 0;break; //数字5按键 case(0xbd):key=key * 10 + 6;display_mode = 0;break; //数字6按键 case(0x7d):mode = 2;display_mode = 1;break; // -(减号)按键 } P1=0xfb; switch(P1) { case(0xeb):key=key * 10 + 7;display_mode = 0;break; //数字7按键 case(0xdb):key=key * 10 + 8;display_mode = 0;break; //数字8按键 case(0xbb):key=key * 10 + 9;display_mode = 0;break; //数字9按键 case(0x7b):mode = 3;display_mode = 1;break; // *(乘号)按键 } P1=0xf7; switch(P1) { case(0xe7):break; //此按键本程序未使用 case(0xd7):key=key * 10 + 0;display_mode = 0;break; //数字0按键 case(0xb7):end = 1;break; // =(等号)按键 case(0x77):mode = 4;display_mode = 1;break; // /(除号)按键 } P1 = 0xf0; while(P1 != 0xf0); //松手检测 if ( display_mode == 1 ) // 按下 +-*/ { num1 = key; //将按的数值给num1 key = 0; //清零 } if ( end == 1 ) //开始计算结果 { switch(mode) //检测加减乘除 { case(1):result = num1 + key;break; //mode=1为加号 case(2):result = num1 - key;break; //mode=2为减号 case(3):result = num1 * key;break; //mode=3为乘号 case(4):result = num1 / key;break; //mode=4为除号 } display_mode = 2; //显示模式为:显示计算结果 /***** 以下为清零操作 *****/ mode = 0; key = 0; end = 0; } } } } void display(long i) { int n=0; do { P0 = 0xff; //消影 P2 = weixuan [n++]; //数码管位选 P0 = duanxuan[i%10]; //控制数码管显示的数值 i /= 10; }while( i > 0 ); //i>0就循环 } void delay_1ms(unsigned int i) { unsigned char j ; while(i--) { for(j=0;j<125;j++) { ; } } } //这是计算器程序 |
|
|
|
你自己可以去开发呼吸灯,电梯和小数计算器,加油
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
377 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
536 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
540 浏览 0 评论
950 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1403 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11760 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 08:02 , Processed in 0.611257 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号