51单片机如何使用?

作者&投稿:夕福 (若有异议请与网页底部的电邮联系)
怎样用51单片机做计算器啊?~

1、硬件仿真图

硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。
2、主程序流程图

程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图。
3、Altium Designer画的PCB图

4、程序源代码
#include #include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar operand1[9], operand2[9];
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,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff};
uchar dbuf[8] = {10,10,10,10,10,10,10,10};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan()
{
uchar skey;
P1 = 0xfe;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xee: skey = '7'; break;
case 0xde: skey = '8'; break;
case 0xbe: skey = '9'; break;
case 0x7e: skey = '/'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xfd;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xed: skey = '4'; break;
case 0xdd: skey = '5'; break;
case 0xbd: skey = '6'; break;
case 0x7d: skey = '*'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xfb;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xeb: skey = '1'; break;
case 0xdb: skey = '2'; break;
case 0xbb: skey = '3'; break;
case 0x7b: skey = '-'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
P1 = 0xf7;
while((P1 & 0xf0) != 0xf0)
{
delay(3);
while((P1 & 0xf0) != 0xf0)
{
switch(P1)
{
case 0xe7: skey = '$'; break;
case 0xd7: skey = '0'; break;
case 0xb7: skey = '='; break;
case 0x77: skey = '+'; break;
default: skey = '#';
}
while((P1 & 0xf0) != 0xf0)
;
}
}
return skey;
}
void main()
{
uint value1, value2, value;
uchar ckey, cut1 = 0, cut2 = 0;
uchar operator;
uchar i, bool = 0;
init:
buf(0);
disp();
value = 0;
cut1 = cut2 = 0;
bool = 0;
for(i = 0;i < 9;i++)
{
operand1[i] = '\0';
operand2[i] = '\0';
}
while(1)
{
ckey = keyscan();
if(ckey != '#')
{
if(isdigit(ckey))
{
switch(bool)
{
case 0:
operand1[cut1] = ckey;
operand1[cut1+1] = '\0';
value1 = atoi(operand1);
cut1++;
buf(value1);
disp();
break;
case 1:
operand2[cut2] = ckey;
operand2[cut2+1] = '\0';
value2 = atoi(operand2);
cut2++;
buf(value2);
disp();
break;
default: break;
}
}
else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')
{
bool = 1;
operator = ckey;
buf(0);
dbuf[7] = 10;
disp();
}
else if(ckey == '=')
{
value = compute(value1,value2,operator);
buf(value);
disp();
while(1)
{
ckey = keyscan();
if(ckey == '$')
goto init;
else
{
buf(value);
disp();
}
}
}
else if(ckey == '$')
{ goto init;}
}
disp();
}
}
uint compute(uint va1,uint va2,uchar optor)
{
uint value;
switch(optor)
{
case '+' : value = va1+va2; break;
case '-' : value = va1-va2; break;
case '*' : value = va1*va2; break;
case '/' : value = va1/va2; break;
default : break;
}
return value;
}
void buf(uint val)
{
uchar i;
if(val == 0)
{
dbuf[7] = 0;
i = 6;
}
else
for(i = 7; val > 0; i--)
{
dbuf[i] = val % 10;
val /= 10;
}
for( ; i > 0; i--)
dbuf[i] = 10;
}
void disp(void)
{
uchar bsel, n;
bsel=0x01;
for(n=0;n<8;n++)
{
P2=bsel;
P0=table[dbuf[n]];
bsel=_crol_(bsel,1);
delay(3);
P0=0xff;
}
}
扩展资料:
PROTEUS 是单片机课堂教学的先进助手
PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。
课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台
随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。
使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;
在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。
实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。
参考资料来源:百度百科-protues


使用51单片机需要达到以下基本条件:

1、至少要搭建一个最小系统;

2、你需要编制一个51的控制程序;

3、你需要将程序编译连接成HEX或BIN格式的代码并下载或烧录到51单片机。

这样你就可以使用这款51单片机了。



慧净HJ-2WD 51单片机智能小车视频教程,由慈光老师主讲,基于STC89C52RC芯片,组装一台智能小车,到智能小车编程控制,可以组成小车自由行、寻迹智能小车、红外避障小车,超声波避障小车、红外摇控控制小车、手机蓝牙小车、灭火小车、wifi小车等功能。教程从零基础入门操作,精通单片机编程,手把手带你学习智能小车控制编程技术。1-3、万向轮安装



  1. 至少要搭建一个最小系统

  2. 你需要编制一个51的控制程序

  3. 将程序编译连接成HEX或BIN格式的代码并下载或烧录到51单片机

    这样就可以使用了,一般来说你想要实现的功能需要在程序中写出来,而且确保程序没有错误以后再将程序烧入单片机中



51?扔掉!换STM32


如何同时正确使用一个单片机的定时器1和计数器1
其实,定时器和计数器都 是一个,只不过是两种叫法而已。实质上是计数器,只是对机器周期计数时,可以作为定时器用,对外部脉冲计数时,就是纯粹是计数器了。所以,要看做什么用,叫什么都行的。

51单片机一个工程中包含多个C文件怎么使用
这是标准的C语言写法。1. 不管有多少个函数,C总是从main()主函数开始执行。2. 至于你说的一个工程里面包括多个.c的文件,其实每个.c的文件里就是一系列函数而已。如果你要使用这些函数的话你要在头文件里加入#include。比如我要用“init.c”这个文件,则头文件中除了#include"reg51.h"你还要加...

单片机主要用途是什么?
综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次...

讲一下怎样使用单片机~~
看来你还真是个新手,什么都不懂。8031是单片机的型号,C51是51系列单片机的编程语言。所以无法比较哪个好。要给单片机编程需要专门的开发工具,用得做多的51系列单片机有AT89S51、AT89S52等,它具有ISP编程功能,甚至可以化30块钱买一根USB下载线就和电脑连接起来了。当然还要有51单片机的下载软件和编程软件...

单片机中bit函数如何使用 在什么情况下使用 举个例子 如何使用 谢谢
当然,如果返回值是char型,判断速度上和bit型差不多,但如果是int型,由于是双字节,就要多花些时间了。追问:你做过595的程序吗 那里用一位数据线输出8位数据 就用到bit bit a;bit testbit(unsigned char a,char n){ if(((0x01<<n)&a)==0){ return 0;}else return 1;} ...

51单片机计数器如何使用,我想要一个简单一点的程序
将定时器0或者1设置为计数器模式就可以了。举例如下:ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV TMOD,#06H MOV TH1,#0FFH MOV TL1,#0FFH SETB TR1 SETB ET1 SETB EA SJMP T0ISR:INC A MOV P1,A RETI END

C51单片机定时器1以方式1定时1秒如何设置?
1、先打开我们熟悉的单片机c51编程软件——keil,先把主方法写好。2、然后,我们要定义两个变量。3、接着,设定好定时器的工作方式。4、设置中断发生的机制。5、最后,我们要加进这几行代码进行初值的重装。6、最后,把if语句补充完毕就可以了。

使用51单片机定时器T1的工作方式1,一次定时50ms,其计数初值的十进制和...
如果要实现一次50ms的定时,可以按照以下步骤进行计算:1. 计算每个计数周期的时间:12\/OSC 秒2. 计算需要多少个计数周期才能达到50ms:50ms \/ (12\/OSC) = 4166.673. 计算需要设置的初始值:65536 - 4167 = 61369因此,在使用51单片机定时器T1工作方式1实现一次50ms的定时任务时,其十进制初始值...

1、单片机中使用MOVX A,@R1指令, 寻址数据存储器1050H单元.
因这条指命中R0只有八位,可这MOVX指令是对外寻址是十六位的,这间址用的是的R0时就需用高地址输出端口P2和他配合。所以该是C

如何用51单片机用一位数码管显示对应数字?
首先你要把0到9的数字对应的七段码放在一个数组中,然后用一个变量计按键的次数或序号,把该序号的七段码输出到对应的端口即可。

水磨沟区19397252597: 51单片机如何使用? -
鄞谦苦参: 我是一名多年的单片机工程师,下面的51单片机教程学习方法你参考一下1 首先了解单片机的硬件结构.2 掌握很基本的数电模电知识,如二进制、十进制、十六进制之间的转换,与、或、非逻辑关系等.3 熟悉5个基本语句的运用,如:if ...

水磨沟区19397252597: 怎样使用51单片机的定时器? -
鄞谦苦参: 1. 设定工作方式TMOD=..... 2. 装入初值 TH0=...TL0=....TH1=....TL1=..... 3.开启定时器中断和总中断ET0=1或ET1=1 EA=1 4.启动时器 TR0=1 TR1=1 5.写中断服务程序 其中 3和5可以没有

水磨沟区19397252597: 单片机如何使用 -
鄞谦苦参: 你问的问题太泛泛了,恐怕是谁也无法明确回答.看样子你对单片机了解还比较少,建议你还是先找一本基础的入门书好好看一下,这里我也简单解释一下:单片机全称叫单片微型计算机,顾名思义,就是把计算机的最基本功能集成在一个芯片上,它不像pc机一样运算速度快,内存容量是远不能和pc机相比的,但它着重于控制,并针对此设计了端口和某些内部资源,它需要通过一些接口或电路来采集外部的信息和向外部输出信息,软件上需要开发者根据具体情况编写软件来处理输入的信息和输出,东一句西一句的发现想说清还不太容易.

水磨沟区19397252597: 51单片机计数器怎么用 -
鄞谦苦参: 可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断.进入计数服务中断程序.

水磨沟区19397252597: 要怎么样学才能学会使用51单片机 -
鄞谦苦参: 学会51单片机可以做很多工作,简单列举一些吧.1、工业控制领域方面,很多设备的底层控制都是采用51单片机实现的.2、仪器仪表方面,51单片机由于成本低廉,所以很受该行业欢迎.3、汽车行业,一辆汽车的控制MCU很多,51单片机也占有一席之地 .4、通讯方面,51单片机在GPS、红外、射频等方面都有很广泛的应用.5、航海航空,尽管ARM逐步占有了主导地位,但是各个模块的底层51单片机仍然再使用.6、其他各个方面,其实作为最早大量使用的单片机之一,51单片机在各行各业都没有退出历史舞台,仍然在发挥作用.

水磨沟区19397252597: 51单片机如何入门? -
鄞谦苦参: 入门快不快要看你有没有一定的基础,比如电子电路知识,0基础的话确实是有点难.零基础的话建议:1,学习电子元器件基础2,学习模拟电子电路基础3,学习数字电路基础4,熟悉51单片机硬件结构5,学习编程语言 上面的学完了就入门了 ,我不建议买51单片机开发实验板来学习,开始学就是要增加自己的动手能力,动手才了解电路,排除故障,得到经验,制作一个51单片机最小系统是很简单的,再加个8位流水灯,就可以学了,然后再加按键,和流水灯一起学,这样硬件制作也学会,编程也学会,循序渐进才有进步,不要想着一步登天.有空和我交流交流,我也在学51单片机.

水磨沟区19397252597: 51单片机P3口的第二功能该怎么使用
鄞谦苦参: 使用51单片机p3口的第二功能,并不需要刻意安排,只要启用了相应功能或执行了相应指令,自然就启用了p3口的第二功能.比如:1、使用了串行口收发数据通信功能,P3.0、P3.1就是RXD、TXD通信线.2、允许了外部中断0和1,P3.2、P3.2自然就是外部中断输入管脚.3、以此类推,就不一一举例了.

水磨沟区19397252597: 51单片机(兼容Intel 8031系统的单片机统称) - 搜狗百科
鄞谦苦参: 51单片机定时器的GATE=1时,用外部INT0启动定时器,当INT0=0时, 定时器T1会停止计数,这个时候读取T1的值是可以计算出高电平的宽度的.

水磨沟区19397252597: 51单片机如何使用独立按键第一次按的时候,程序执行,再次按的时候, -
鄞谦苦参: while(1){ while(P1_0); // 等待按键按下. while(!P1_0); // 等待按键松开. while(P1_0) { //...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网