⑴ 用c++怎样编写51单片机程序
相信很多初学者都有同样的疑问,也有同样的希望。就是用C++语言来写单片机程序的源代码。现在我来解释一下单片机的源代码程序几乎没有人用C++来写的。
1. 假设一下你现在用C++写完了一个程序代码。那么你要让单片机认识必须要编译吧,对吧 。请问你有合适的编译软件来编译你的代码吗?
2. 就算有编译器能编译,你能保证它的代码效率一定能给单片机用吗?
单片机的ROM是K级的水平,执行指令的速度也远远小于PC。绝对不能和PC机相比的。这个就决定了单片机编程时很多时候要考虑它的代码效率和代码大小问题。所以一般情况下对于单片机编程我们之用汇编语言或者C语言。就算是用C写程序也要注意代码的效率等问题。
还有就是只有很大型的项目及应用程序开发才有可能有C++来写程序。一般的系统文件,应用程序都是用C来写的。有的系统代码甚至要用汇编语言来写。
举个生活中的例子:如果你从家里去公司上班你一般的出行方式是什么?
1.坐公车 2.骑车 3.自己开车 4.坐地铁 5.走过去。如果谁说他是做直升飞机去上班的。那要么这个人脑子不正常,要么就是太有钱了炫富。如果你要打苍蝇用苍蝇拍子就行了。如果要你用巡航导弹来打苍蝇,你认为可能吗?
所以我们单片机写程序的话一般就是汇编语言和C语言。几乎没有人用C++语言的。
⑵ 你好,我想知道单片机计时器亮一秒灭一秒的程序编码
#include<reg52.h>
#defineucharunsignedint
uchartime;
voidmain()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
voidT0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
time%=20;
if(time==0)led1=!led1;
}
⑶ 学习51单片机时用什么软件编写程序代码啊
一般都用Keil来编的,当然还有其他软件。编写的程序是.asm后缀的,经编译后形成.hex文件,这个程序文件是51单片机可以识别的,载到单片机里面就可以执行的了。用C语言编出来的是高级语言,还要变成汇编语言。
⑷ 求一下单片机的程序编码总体作用和每一步的作用(1)
void main()
{
init();
write_setds(0x80,0x50); //以下的类似函数应该是用于初始化的 (液晶显示屏或是其他)
write_setds(0x82,0x59); //第一个参数应该是地址,第二个参数应该是命令
write_setds(0x84,0x10);
write_setds(0x86,0x17);
write_setds(0x88,0x03);
write_setds(0x8a,0x03);
write_setds(0x8c,0x10);
write_setds(0x90,0xa4);
while(1)
{
keyscan(); //键盘扫描函数
} ------------这个大括号貌似有点多余吧
display(); //显示函数
}
⑸ 求一下单片机的程序编码总体作用和每一步的作用
void SET_DS1302()
{
uchar i;
Write_DS1302(0x8e,0x00); //去除DS1302写保护
for(i=0;i<7;i++)
{
Write_DS1302(0x80+2*i,(DateTime[i]/10<<4|(DateTime[i]%10))); //写入初始时间
}
Write_DS1302(0x8e,0x80); //写保护使能
}
/*------------------------------------
读取当前时期时间
------------------------------------*/
void GetTime()
{
uchar i;
for(i=0;i<7;i++)
{
DateTime[i]=Read_Data(0x81+2*i); //将当前时间存入数组
}
}
/*------------------------------------
时间和日期转换成数字字符
------------------------------------*/
void Format_DateTime(uchar d,uchar *a)
{
a[0]=d/10+'0';a[1]=d%10+'0'; //因为从1302中读取的数据不能直接用于显示,所以要进行转 换然后才能用于液晶或者数码管显示
}
/*------------------------------------
判断是否为闰年
------------------------------------*/
uchar isLeapYear(uint y)
{
return (y%4==0&&y%100!=0)||(y%400==0); //很简单的闰年判断
}
/*------------------------------------
星期转换
------------------------------------*/
void RefreshWeekDay() //星期转化
{ //其实这些转换都不需要,直接通过相关的 命令读取1302数据即可
uint i,d,w=5;
for(i=2000;i<2000+DateTime[6];i++)
{
d=isLeapYear(i)? 366 : 365;
w=(w+d)%7;
}
d=0;
for(i=1;i<DateTime[4];i++)d+=MonthsDays[i];
d+=DateTime[3];
DateTime[5]=(w+d)%7+1;
}
⑹ 单片机的程序怎么编写
你可以先把0放到一个单元里面,比如说100h,然后
mov
r0,100h
inc
100h
mov
r1,100h
inc
100h
继续写下去就可以了。
⑺ 单片机代码问题
8.7秒=8700mS,如果你会了定时器20mS,那么设置一个变量 TN,在定时器中断例程里,每次加1,当 TN=435时(435*20=8700);
就是;
sbit P1_0 = P1^0;
void timer0() interrupt 3
{
......
TN++;
if(TN>=435) { P1_0 =! P1_0; TN=0}
......
}
⑻ 谁知道哪有单片机的典型程序代码
我有。
功能说明
用一位数码管循环显示0~9数字,数字变换间隔的时间为1秒。
程序:SMG2.ASM
01:
START:
MOV
DPTR,
#TABLE
;
存表
02:
MOV
R0,
#0
;
设定初始值
03:
LOOP
:
MOV
A,
R0
04:
MOVC
A,
@A+DPTR
;
取表代码
05:
MOV
P0,
A
;
送P0输出
06:
ACALL
DLY1S
;
调延时程序
存表取表
07:
INC
R0
;
R0值
加1
08:
CJNE
R0,
#10
,
LOOP
;
不是10,循环
09:
JMP
START
;
重新开始
判断循环
10:
DLY1S:
MOV
R5,
#50
;
11:
D1:
MOV
R6,
#100
;
12:
D2:
MOV
R7,
#100
;
13:
DJNZ
R7,
$
;
14:
DJNZ
R6,
D2
;
15:
DJNZ
R5,
D1
;
1秒延时
16:
RET
;
子程序
17:
TABLE:
DB
0C0H,
0F9H,
0A4H,
0B0H
;
18:
DB
99H,
92H,
82H,
0F8H
;
19:
DB
80H,
90H,
88H,
83H
;
20:
DB
0C6H,
0A1H,
86H,
8EH
;
代码表
21:
END
;
程序结束
功能说明
使用两位数码管显示器,利用扫描方式循环显示00~99两位数。
程序:SMG3.ASM
01:
START:
MOV
R0,
#0
;初始化计数器
02:
MOV
DPTR,
#TABLE
;存入查表启始地址
03:
LOOP:
ACALL
DISPLAY
;
调显示子程序
04:
INC
R0
;
计数器加1
05:
CJNE
R0
,#100,
LOOP
;
没到100
循环
06:
JMP
START
;
到开始处
主程序
07:
DISPLAY::MOV
A,
R0
;
08:
MOV
B,
#10
;
16进制换成10进制
09:
DIV
AB
;
A÷B商存A,余数存B
10:
MOV
R1,
A
;
R1内存放十位数
换
11:
MOV
R2,
B
;
R2内存放个位数
十进
12:
MOV
R3,
#50
;
设导通频率50次
13:
LOOP1:
MOV
A,
R2
;
个位数显示
14:
ACALL
CHANG
;
调显示子程序
15:
CLR
P2.0
;开个位显示
16:
ACALL
DLY10mS
;
调延时10ms程序
个位
17:
SETB
P2.0
;
关闭个位显示
显示
18:
MOV
A,
R1
;
取十位数
19:
ACALL
CHANG
;
调取表显示子程序
20:
CLR
P2.1
;
开十位显示
21:
ACALL
DLY10mS
;
调延时10ms程序
十位
22:
SETB
P2.1
;
关闭十位显示
显示
23:
DJNZ
R3,
LOOP1
;
100次没完,继续循环
扫描
24:
RET
;
子程序
25:
CHANG:
MOVC
A,
@A+DPTR
;
26:
MOV
P0,
A
;
27:
RET
;
取表子程序
28:
DLY10mS:MOV
R6,
#20
;
29:
D1:
MOV
R7,
#248
;
30:
DJNZ
R7,
$
;
31:
DJNZ
R6,
D1
;
延时10
m.S
32:
RET
;
子程序
33:
TABLE:
DB
0C0H,
0F9H,
0A4H,
0B0H
;
34:
DB
99H,
92H,
82H,
0F8H
;
35:
DB
80H,
90H,
88H,
83H
;
36:
DB
0C6H,
0A1H,
86H,
8EH
;
代码表
37:
END
;
程序结束
⑼ 求52单片机程序代码
程序代码如下:
#include<reg51.h>
sbitK1=P1^0;
sbitK2=P1^1;
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<120;i++);
}
main()
{
unsignedcharkeyval=0,led=0xfe;
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
keyval==1;
while(K1==0);
}
}
if(K2==0)
{
delay(10);
if(K2==0)
{
keyval==2;
while(K2==0);
}
}
if(keyval==1)P0=0xfe;
if(keyval==2)
{
P0=led;
led=_crol_(led,1);
delay(200);
}
}
}
⑽ 单片机如何进行编码的!!!
基本工作原理 系统分为红外发射部分和红外接受部分,红外发射部分是采用普通的遥控发射器(即所说的无线键盘),接收部分由红外遥控一体接收头.单片机组成。当红外遥控发射器有按键按下时,内部的编码电路将其转换为相对应的红外信号,从红外发射管发出,红外遥控一体接收头接收到信号后,将信号转换成相对应的脉冲信号。红外一体接收的信号接到CPU的INT0管脚,通过CPU进行解码。