导航:首页 > 操作系统 > 伟福单片机8位数码管显示19

伟福单片机8位数码管显示19

发布时间:2025-09-27 04:49:30

‘壹’ 如何用51单片机做计算器(要求用C语言编程) 由于是新手所以没积分 对不住各位了

给你参考一下的,我最近做的:

我的实验板上的键不够,所以只能做加法运算,而且两数之和不能大于十。

嘿嘿,没错这个给某种人用的。

//**********myh.h***********有两个文件,一个是头文件myh.h一个是js.c

#include<reg52.h>

typedefunsignedcharuchar;

typedefunsignedintuint;

typedefbitBOOL;

//**

sbitrs=P2^6;

sbitrw=P2^5;

sbite=P2^7;

//**

ucharKey_Down(void);//返回0到12的键盘的编码

voiddelay(uchar);//延时

voidInit(void);

voidWrite_Cmd(uchar);

voidWrite_Data(uchar);

BOOLIf_Busy();

//**

ucharcodeLcd_tab[]="0123456789+=";

ucharcodeKey_tab[]={0xb7,0xbb,0xbd,0xbe,0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};

//**********

uintQ0;

uintQ1;

uintQ2;

//*************js.c********

#include"myh.h"

//**************

voidmain()

{ucharm_key;

ucharm_inc=0;

Init();

Write_Cmd(0x80);

while(1)

{Q1=0;

Q0=0;

Q2=0;

m_key=Key_Down();

Write_Cmd(0x01);

Write_Data(Lcd_tab[m_key]);

Q0=m_key;

m_key=Key_Down();

Write_Data(Lcd_tab[m_key]);

m_key=Key_Down();

Write_Data(Lcd_tab[m_key]);

Q1=m_key;

m_key=Key_Down();

Write_Data(Lcd_tab[m_key]);

Q2=Q0+Q1;

Write_Data(Lcd_tab[Q2]);

}

}

//************************

ucharKey_Down(void)

{ucharKey_number=0;

ucharm_cx;

ucharm_cy;

ucharm_cxy;

P3=0x0f;

m_cx=P3;

while(1)

{if(m_cx!=0x0f)

{delay(500);

m_cx=P3;

if(m_cx!=0x0f)

break;}

else{P3=0x0f;m_cx=P3;}

}

P3=0x0f;

m_cx=P3&0x0f;

P3=0xf0;

m_cy=P3&0xf0;

m_cxy=m_cx|m_cy;

for(Key_number=0;Key_number<12;Key_number++)

{if(m_cxy==Key_tab[Key_number])

break;

}

returnKey_number;}

//**********

voiddelay(uchartime)

{ucharj;

for(;time>0;time--)

for(j=0;j<200;j++);

}

//**************

voidinit()

{delay(10);

Write_Cmd(0x38);

delay(10);

Write_Cmd(0x38);

delay(10);

Write_Cmd(0x38);

delay(10);

Write_Cmd(0x0c);

delay(10);

Write_Cmd(0x06);

delay(10);

Write_Cmd(0x01);

}

//***********

voidWrite_Cmd(ucharcmd)

{//while(If_Busy());

e=0;

rw=0;

rs=0;

delay(4);

P0=cmd;

delay(4);

e=1;

delay(10);

e=0;

}

//***

voidWrite_Data(uchardat)

{//while(If_Busy());

e=0;

rw=0;

rs=1;

delay(4);

P0=dat;

delay(4);

e=1;

delay(10);

e=0;

}

//**

BOOLIf_Busy()

{

BOOLresult;

rw=1;

rs=0;

e=1;

delay(4);

result=(BOOL)(P2&0x80);

e=0;

returnresult;

}

‘贰’ 51单片机用什么软件编程

开源软件mcu8051ide 功能不是一般的强,用c语言编程,界面不输给商业软件,而且提供多种模拟器件如:led 数码管,矩阵数码管(8×8)按键,矩阵按键,甚至温度传感器。开源的没有任何限制,完全免费,自动生成多种烧录文件(我们一般就用.HEX的)感觉keil c弱爆了。
安装方法,下载sdcc(mcu8051ide是基于sdcc的)和mcu 8051 ide都安装好就可以啦,头文件在sdcc的安装文件夹内(include)有些关键字要加两个连在一起的下划线比如 __interrup, __code.
头文件与keil的不通用,比如定义P0口
在keil下是: sfr P0=0x80; 在sdcc下是: __sfr __at P0 0x80; 这个P0^1的不行,但sdcc里面有很多头文件8051.h 80c51.h 80c52.h等等 基本满足要求,给stc单片机编程不用改,加一点特殊的就可以。这样优秀的开源软件不用真的是白不用啊。

‘叁’ 51单片机的编程问题

1:C51编译器如何区分位地址和字节地址
是靠预定义实现的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者声明了P0端口地址位于0x80,后者说明了P0端口的bit0,即P0.0位于位地址空间0x80处。这2个0x80具有完全不同的含义,靠关键字sfr和sbit来区别。这样当程序被编译时,编译器会依此编译成相应的汇编语言。例如:

C51语句: P0 = 1;

P0声明为sfr,因此编译成:mov 80h,01h,将把0x01数据送入0x80单元,由于0x80单元物理上对应P0端口,因此,P0.0脚将输出高电平(其实是呈现高阻态,P0口独有的),其他.1-.7脚输出低电平。

C51语句: P0_0 = 1;

P0_0声明为sbit,因此编译成:setb 80h,这将把位地址空间的0x80地址的bit的值置1。这个位正是P0口的bit0,执行后,P0.0将输出高阻态。而P0.1-.7不会变化。

2:C51为什么要嵌套汇编
51单片机一个显着优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就带来几个问题:如何声明函数、参数如何传递等。限于篇幅,不能说得很细。下面举例:

汇编程序单独保存一个文件,加入到工程中,函数如下:

_proc_a:

mov a, r7

inc a

mov r7, a

ret

用c语言在.h文件中声明: extern unsigned char proc_a(unsigned char val);

调用时形如: retvalue = proc_a(0x11);

说明:

a:汇编程序如果带参数,则需要在汇编程序前多加一个下划线。而声明它的地方不用加(伟福编译器这么要求的)。

b:函数的形参中第一参数用R7传递,函数返回值用R7返回,这是C51的通用规范。其他参数都有相应规定。函数可以返回一个位,用psw的c位返回。c:上面的语句,执行顺序是把0x11给R7,然后跳转子程序,子程序将它加1后送回。

d:函数跳转到汇编程序时,本区的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考虑调用后是否要恢复这些常规资源。上例中,A的值被函数使用了,编程者不必恢复调用前的值。

阅读全文

与伟福单片机8位数码管显示19相关的资料

热点内容
国际服ec服务器为什么进不去 浏览:28
伟福单片机8位数码管显示19 浏览:855
电视盒和app有什么区别 浏览:217
cocos2dxlinux 浏览:726
西方哲学史学术版pdf 浏览:777
程序员接盘知乎 浏览:163
在线编程代码实现 浏览:79
法兰克数控机床编程角度 浏览:132
崩坏三游戏安卓服指的是什么 浏览:701
androidbluedroid 浏览:675
一套源码可以架设几个服 浏览:722
程序员用一串代码 浏览:59
程序员顾默顾筱柒剧情片段 浏览:768
深圳压缩机厂家 浏览:969
51单片机c语言实例 浏览:313
linux命令bak 浏览:433
解压无聊的视频 浏览:620
35岁以上程序员有前端开发的吗 浏览:352
液态压缩空气的时候会吸热吗 浏览:976
php的cms系统源码 浏览:767