




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简单计算器的设计#include <</font>reg51.h>#include <</font>intrins.h>#include <</font>ctype.h> #include <</font>stdlib.h> #define uchar unsigned char#define uint unsigned in
2、t uchar operand19, operand29; uchar operator; void delay(uint);uchar keyscan();void disp(void);void buf(uint value);uint compute(uint va1,uint va2,uchar optor); uchar code table = 0xc0,0xf9,0xa4,0xb0,0x9
3、9, 0x92,0x82,0xf8,0x80,0x90,0xff; uchar dbuf8 = 10,10,10,10,10,10,10,10; void delay(uint z)uint x,y;for(x=z;x>0;x-) for(y=11
4、0;y>0;y-); uchar keyscan() uchar skey; P1 = 0xfe; while(P1 & 0xf0) != 0xf0)
5、0; delay(3); while(P1 & 0xf0) != 0xf0) switch(P1)
6、; case 0xee: skey = '7' break; case 0xde: skey = '8' break; case 0xbe: skey = '
7、9' break; case 0x7e: skey = '/' break; default: skey = '#'
8、160; while(P1 & 0xf0) != 0xf0) ; P1 = 0xfd; while(P1 & 0xf0) != 0xf0)
9、 delay(3); while(P1 & 0xf0) != 0xf0) switch(P1) case 0xed: skey =
10、9;4' break; case 0xdd: skey = '5' break; case 0xbd: skey = '6' break; case 0x7d: skey = '*' break;
11、160; default: skey = '#' while(P1 & 0xf0) != 0xf0)
12、0; ; P1 = 0xfb; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0)
13、 switch(P1) case 0xeb: skey = '1' break; case 0xdb: skey = '2'
14、break; case 0xbb: skey = '3' break; case 0x7b: skey = '-' break;
15、 default: skey = '#' while(P1 & 0xf0) != 0xf0) ; P1
16、 = 0xf7; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0) switch(P1)
17、 case 0xe7: skey = '$' break; case 0xd7: skey = '0' break; case 0xb7: skey = '=' break;
18、160; case 0x77: skey = '+' break; default: skey = '#'
19、0; while(P1 & 0xf0) != 0xf0) ; return skey; void main() uint value1, value2, value; uch
20、ar ckey, cut1 = 0, cut2 = 0; uchar operator; uchar i, bool = 0; init:
21、0; buf(0); disp(); value = 0; cut1 = cut2 = 0; bool = 0; for(i = 0;i <</font> 9;i+)
22、 operand1i = '0' operand2i = '0' while(1)
23、160; ckey = keyscan(); if(ckey != '#') if(isdigit(ckey)
24、0; switch(bool) case 0:
25、; operand1cut1 = ckey; operand1cut1+1 = '0' value1 = atoi(operand1);
26、160; cut1+; buf(value1); disp
27、(); break; case 1: operand2cut2 = cke
28、y; operand2cut2+1 = '0' value2 = atoi(operand2); &
29、#160; cut2+; buf(value2); disp();
30、60; break; default: break;
31、0; else if(ckey='+'|ckey='-'|ckey='*'|ckey='/') bool = 1;
32、160; operator = ckey; buf(0); dbuf7 = 10; disp();
33、160; else if(ckey = '=') value = compute(value1,value2,operator); buf(value);
34、 disp(); while(1)
35、 ckey = keyscan(); if(ckey = '$') goto init;
36、; else buf(value);
37、60; disp(); else if(ckey = '$')
38、0; goto init; disp(); uint compute(uint va1,uint va2,uchar optor) uint value; switch(optor) case '+' : val
39、ue = va1+va2; break; case '-' : value = va1-va2; break; case '*' : value = va1*va2; break; case '/' : value = va1/va2; break;
40、0; default : break; return value; void buf(uint val) uchar i; if(val = 0) dbuf7 = 0; i = 6;
41、0; else for(i = 7; val > 0; i-) dbufi = val % 10; val /= 10; for( ; i > 0; i-)
42、 dbufi = 10; void disp(void) uchar bsel, n; bsel=0x01; for(n=0;n<</font>8;n+) P2=bsel; P0=tabledbufn;
43、; bsel=_crol_(bsel,1); delay(3); P0=0xff; 音乐播放器 /* 歌曲选择时应按住设置间3秒以上,然后按上或下键进行选择,然后再按设置键退出 */ #include<reg52.h> sbit spek=P37; /声音输出端 sbit set=P32; /设定及退出键
44、,按奇数次为设定功能;偶数次为退出功能 sbit up=P31; /上一曲 sbit down=P30; /下一曲 bit flag1,flag2; /按键扫描标志位,新键值标志位 unsigned char f_t,n,i,key,k_max; /音符频率对应的二分之一周期值,节拍常数值,查表用计数器,键值,最大键值 unsigned char *p_music; /指向音乐数
45、据数组的指针 void timer_ms(unsigned char tim); /毫秒级延时函数声明 void timer_us(unsigned char t); /微秒级延时函数 void key_scan(void); /按键扫描函数 void key_manage(); /键值处理函数 /格式为:频率常数,节拍常数,频率常数,节拍常数 unsign
46、ed char code music_table1=0x18,0x30,0x1c,0x10,0x20,0x40,0x1c,0x10,0x18, 0x10,0x20,0x10,0x1c,0x10,0x18,0x40,0x1c,0x20,0x20,0x20,0x1c,0x20,0x18,0x20,0x20,0x80, 0xff,0x20,0x30,0x1c,0x10,0x18,0x20,0x15,0x20,0x1c,0x20,0x20,0x20,0x26,0x40,0x20,0x20, 0x2b,0x20,0x26,0x20,0x20,0
47、x20,0x30,0x80,0xff,0x20,0x20,0x1c,0x10,0x18,0x10,0x20,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x20,0x20,0x1c,0x10,0x18,0x10,0x20,0x20,0x26, 0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x20,0x30,0x1c,0x10,0x18,0x20,0x15,0x20,0x1c,0x20, 0x20,0x20,0x26,0x40,0x20,0x20,0x2b,0x20,0x26,0x20,0x2
48、0,0x20,0x30,0x80,0x20,0x30,0x1c, 0x10,0x20,0x10,0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x20,0x15, 0x1f,0x05,0x20,0x10,0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x20, 0x30,0x1c,0x10,0x18,0x20,0x15,0x20,0x1c,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2b,
49、0x20, 0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1c,0x10,0x18,0x40,0x1c,0x20,0x20,0x20,0x26, 0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00; /八月桂花香 unsigned char code music_table2=0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80, 0x26,0x
50、20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,0x30,0x20,0x30,0x20, 0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,
51、0x10, 0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20, 0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20, 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x
52、20,0x20,0x80,0x1c,0x20, 0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10, 0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10, 0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80
53、,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,0x20,0x10,0x2b,0x10, 0x26,0x30,0x30,0x80,0x00; /祝你平安 unsigned char code music_table3=0x20,40,0x26,20,0x20,20,0x17,80,0x1c,40,0x17,40,0x20
54、,80,0x20, 40,0x2f,20,0x2a,20,0x26,40,0x2a,20,0x2f,20,0x2a,80,0xff,0x20,40,0x26,20,0x20,20,0x17,60,0x19,20, 0x1c,40,0x17,40,0x20,80,0x20,40,0x2a,20,0x26,20,0x24,60,0x32,20,0x2f,80,0xff,0x1c,40,0x17,40,0x17, 80,0x19,40,0x1c,20,0x19,20,0x17,80,0x1c,20,0x19,20,0x17,20,0x1c,20,0x1c,20,0x20
55、,20,0x26,20,0x2f,20, 0x2a,80,0xff,0x20,40,0x26,20,0x20,20,0x17,60,0x19,20,0x1c,40,0x17,40,0x20,80,0x20,40,0x2a,20,0x26, 20,0x24,60,0x32,20,0x2f,80,0xff,0x20,40,0x26,20,0x20,20,0x17,80,0x1c,40,0x17,40,0x20,80,0x20,40, 0x2f,20,0x2a,20,0x26,40,0x2a,20,0x2f,20,0x2a,80,0xff,0x20,40,0x26,20
56、,0x20,20,0x17,60,0x19,20,0x1c, 40,0x17,40,0x20,80,0x20,40,0x2a,20,0x26,20,0x24,60,0x32,20,0x2f,80,0; /送别 main() spek=0; P3=0x7f; TMOD=0x01; /T0工作于方式1,即16位定时器模式
57、0; IE=0x82; /开总中断,T0中断 flag2=0; / flag1=0; key=1; k_max=3; /最大键值(取值范围1254) n=0;
58、160; i=0; p_music=music_table1; /指针赋初值 while (1) switch (p_musici) &
59、#160; case 0x00: i=0; /歌曲完,则停止0.5S后重新开始 timer_ms(250); /延时0.25ms timer_ms(250);
60、 break; case 0xff: i+; /遇到休止符则停止100us timer_ms(250);
61、160;timer_ms(250); break; default: f_t=p_musici+; n=p_musici+;
62、160; spek=1; TR0=1; while (n!=0)
63、160; spek=spek; timer_us(4*f_t); /改变f_t前面的系数可以调整音符频率的高低
64、160; TR0=0; spek=0; if(set=0)
65、0; key_scan(); key_manage(); /* 函数名称: 定时器0的中断处理程序 函数功能: 完成10毫秒定时 入口参数: 出口参数: 其
66、0; 它: */ void timer0() interrupt 1 using 2 TH0=(65536-10000)/256; /定时10毫秒 TL0=(65536-10000)%256; n-; /* 函数名称: 延
67、时程序 函数功能: 完成微秒级的延时 入口参数: t为需延时的时间(取值范围1255;延时时间51275us) 出口参数: 其 它: */ void timer_us(unsigned char t) while (-t); /本语句执行一次需5us的时间 /
68、* 函数名称: 按键扫描函数 函数功能: 完成按键扫描处理 入口参数: 应为在中断函数中被调用,所以不能有参数传递 出口参数: 其 它: */ void key_scan(void) timer_ms(10); /延时10ms等待按键状态稳定 i
69、f (set=0) /再次确认 while (set=0); /等待按键松开 flag1=1; /该位为1,表示进入按键扫描处理;为0,表示本次按键扫描处理完成
70、; while (flag1) if (up=0) /加一键
71、; timer_ms(10); if (up=0)
72、160; while (!up);
73、60; key+; if (key>k_max) key=1;
74、 if (down=0) /减一键
75、0; timer_ms(10); if (down=0)
76、; while (!down); key-;
77、; if (key<1) key=k_max; &
78、#160; if (set=0) /退出键 timer_ms(10);
79、; if (set=0) while (se
80、t=0); flag1=0; /表示本次按键扫描处理完成 flag2=1;
81、160; /该位置1,表示有新键值要处理 /以上键值处理的范围为1到254个键值
82、0; /* 函数名称: 键值处理函数 函数功能: 完成按键键值的处理 入口参数: 应为在中断函数中被调用,所以不能有参数传递 出口参数: 其 它: */void key_manage() flag2=0; switch (
83、key) case 1: p_music=music_table1; /键值为1 播放第一首乐曲 goto kh1; case 2: p_music=&music_table20;
84、 /键值为2 播放第2首乐曲 goto kh1; case 3: p_music=&music_table30; /键值为3 播放第3首乐曲 goto kh1
85、; default: key=1; p_music=music_table1; kh1: TH0=(65536-10000)/256; TL0=(65536-10000)%256; break; n=0; i=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国间氨基乙酰苯胺行业投资潜力分析及发展前景展望报告
- 2025至2030年中国锂电池自动化设备行业市场全景调查及投资前景展望报告
- 2025至2030年中国铅酸蓄电池产业发展态势及竞争格局预测报告
- 2025至2030年中国金属轧制设备行业市场供需态势及发展前景研判报告
- 2025至2030年中国补血治疗药物行业市场研究分析及发展趋势分析报告
- 国学通论考试题及答案
- pcr岗前考试题及答案
- 航空茶艺考试题及答案
- 健康知识考试题及答案
- 即兴命题考试题及答案
- 2025年1月国家开放大学汉语言文学本科《中国当代文学专题》期末纸质考试试题及答案
- 宜良护理考试试题及答案
- 婴幼儿喂养照护人工喂养的回应性照护课件
- 《传奇歌后邓紫棋》课件
- 术后低蛋白血症观察及护理
- 电力营销安全培训
- 矿山承包合同
- 应急预案中的应急预警系统
- 安徽省合肥市肥西县2024-2025学年上学期七年级数学期末测试卷
- 统编版语文四年级上册21古诗三首《出塞》课件
- 2024年07月临商银行2024年校园招考46名工作人员笔试历年参考题库附带答案详解
评论
0/150
提交评论