导航:首页 > 操作系统 > 单片机程序大全

单片机程序大全

发布时间:2022-05-21 15:28:32

单片机程序

#include<reg51.h>
sbitkey=P3^2;

.......

voidmain()//主程序入口
{
TMOD=0X01;//选择单片机T0定时器M1工作方式
TH0=0XFc; //1ms定时TL0=(65536-921)%256=103=0x67
TL0=0X67;//晶振频率是11·0592M,可算出,计数脉冲个数是921个;TH0=(65536-921)/256=252=0xFC;
TR0=1;//定时器/计数器----启动
ET0=1;//定时器0的中断允许开关
EA=1; //开总中断
IT1=1;//设定外部中断1为低边缘触发类型
//stop();先屏蔽这个,测试按键
while(1)//程序主循环
{
if(key==0)
{
delay_nms(10);
if(key==0)
{
temp++;
while(key==0);
}
}
if(temp>3)
{
temp=1;

}
ShowPort=LedShowData[temp];//这个函数不知有没有问题,你查一下。

Ⅱ 求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);
}
}
}

Ⅲ 单片机的程序

你可能编译器不对,也有可能芯片选的不对,你的这个系统,芯片选AT89C2051足够你用了,用AT89C51 AT89S51……等芯片都是可以的。
以后如果你对51单片机不是很熟悉的话,前面几行最好就照我的这个写法写:
$MOD51 ;8051单片机汇编语言的头文件
ORG 00H ;定义地址为00H
AJMP START;跳到START,跳过所有的中断源入口
ORG 040H ;定义地址
START:
MOV SP,#60H ;初始化堆栈。因为51单片机上电时默认堆栈指针是07H, 这个地
;址不是很好,所以要初始化一下。
……
……
……;省略号处请补上自己需要的代码
END

下面我用Atmel的assemble编译的结果。编译通过了。

010 PAGE 1

1 $MOD51
0000 2 ORG 0000H
0000 0143 3 AJMP START
0040 4 ORG 40H
0040 758160 5 MOV SP,#60H
0043 6 START:
0043 7590FF 7 MOV P1,#0FFH
0046 E590 8 MOV A,P1
0048 F540 9 MOV 40H,A ;暂存于40H
004A 116A 10 ACALL DL10MS ;去抖延时
004C E590 11 MOV A,P1
004E B54009 12 CJNE A,40H,PASS
0051 B4FE0B 13 CJNE A,#0FEH,LAMP1 ;第一键?
0054 75A0FF 14 MOV P2,#0FFH
0057 758000 15 MOV P0,#00H ;点亮第一行发光二极管
005A 12006A 16 PASS: LCALL DL10MS ;延时
005D 0143 17 AJMP START
005F B4FDF8 18 LAMP1: CJNE A,#0FDH,PASS ;第二键?
0062 7580FF 19 MOV P0,#0FFH
0065 75A000 20 MOV P2,#00H
0068 015A 21 AJMP PASS
22 ;延时子程序:
006A 7F08 23 DL10MS:MOV R7,#08h
006C 7EF9 24 LOOP1: MOV R6,#0F9H
006E 00 25 LOOP2: NOP
006F 00 26 NOP
0070 DEFC 27 DJNZ R6,LOOP2
0072 DFF8 28 DJNZ R7,LOOP1
0074 22 29 RET
30 END

VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
010 PAGE 2

DL10MS . . . . . . . . . . . . . C ADDR 006AH
LAMP1. . . . . . . . . . . . . . C ADDR 005FH
LOOP1. . . . . . . . . . . . . . C ADDR 006CH
LOOP2. . . . . . . . . . . . . . C ADDR 006EH
P0 . . . . . . . . . . . . . . . D ADDR 0080H PREDEFINED
P1 . . . . . . . . . . . . . . . D ADDR 0090H PREDEFINED
P2 . . . . . . . . . . . . . . . D ADDR 00A0H PREDEFINED
PASS . . . . . . . . . . . . . . C ADDR 005AH
SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED
START. . . . . . . . . . . . . . C ADDR 0043H

Ⅳ 有关单片机程序。。。

1 单片机的程序从编写到下载到单片机,主要分为几个部分:编辑、编译、链接、下载
我们通常用的Keil,实际上是把上述四个过程集成到一块了,是傻瓜式软件,表面上看是一体的,
其实则不然。而我们写大型程序,比如写Android,以上的过程是分开的。
2 编译器与下载器之间没有通讯,我们之所以能用有的开发环境下载程序,比如用Keil下载,实际上是Keil调用了下载部分的程序,而不是编译和下载之间的关系。

3 单片机下载分为三个部分,PC机上的软件,下载器,单片机。 当然,有的单片机没有下载器。
PC上软件的作用就是把Hex文件转换成Bin文件,然后通过厂家协议下载到单片机,或者直接把Bin文件下载到单片机。
对于没有下载器的,比如STC系列单片机,它的通信由两部分组成:PC软件和单片机内部的ISP
对于有下载器的,比如AVR,STM32的JTAG,通信由三部分组成,PC<---->下载器<--->单片机的ISP.

4 对于不经过下载器的单片机,每个厂家的单片机的ISP是不一样的,因此,你要想知道通信协议,可以用BUS HOUNDER自己去捕捉,我曾经捕捉过STM32的ISP协议,当然,失败了,因为程序不同,协议不太一样,主要是有个校验和问题。

5 对于要经过下载器的单片机,比如AVR,就比较麻烦,除了用BUSHOUND,还要有专门的逻辑分析仪去捕捉下载器与单片机之间的协议。

总结:想要捕捉单片机的下载协议,并不是个简单的工作,需要有深厚的技术基础。

Ⅳ 单片机程序,急需!

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TOMD,#02H

MOV TH0,#6

MOV TL0,#6

SETB TR0

SETB EA

SETB ET0

MOV R2,#0

MOV R3,#0

MOV R6,#0

MOV R7,#0

LCALL DISPLAY

LOOP:

JNB TF0,$

CLR TR0

INC R7

CJNE R7,#200,LOOP

MOV R7,#0

INC R6
CJNE R6,#20,LOOP

MOV R6,#0

INC R3

LCALL DISPLAY

CJNE R3,#10,LOOP

MOV R3,#0

INC R2

LCALL DISPLAY

CJNE R2,#10,LOOP

MOV R2,#0

LCALL DISPLAY

LJMP LOOP

END

DISPLAY:
MOV DPTR,#TABLE

MOV A,R2

MOVC A,@A+DPTR

MOV P0,A

MOV A,R3

MOVC A,@A+DPTR

MOV P2,A

RET

;---------------------------------------
TABLE: ; 共阴极数码管显示代码表
DB 0FCH ;"0" 00H
DB 60H ;"1" 01H
DB 0DAH ;"2" 02H
DB 0F2H ;"3" 03H
DB 66H ;"4" 04H
DB 0B6H ;"5" 05H
DB 0BEH ;"6" 06H
DB 0E0H ;"7" 07H
DB 0FEH ;"8" 08H
DB 0F6H ;"9" 09H

Ⅵ 单片机程序设计

51单片机?自学已经足够了、用心点、别一开始就想着要依赖别人、你要想着靠自己也可以学好——而且单片机挺好玩的、学起来很有乐趣的、会越来越想学的——建议你买个实验板——

Ⅶ 求单片机c经典程序!!!

这是数字温度计的程序,从DS18B20数字温度传感器中读取温度,然后显示在数码管上!DS18B20数字温度传感器采用了单总线通讯方式(即采用一根线完成所有信号的传送),并且对时序要求比较高,看程序时要结合DS18B20数字温度传感器的时序图去看。

#include<reg52.h>
#include<intrins.h>
sbit sjx=P1^6; //ds18b20数据线接口位声明
sbit x1=P1^0;
sbit x2=P1^1;
sbit x3=P1^2;
sbit x4=P1^3;
unsigned char wei1,wei2,wei3,zf;
unsigned int wen,zijie=0;
unsigned char wdjc[2]={0,0};
int bb=0;
unsigned char code xianshima[] //0~9的显示码
={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,};
void xianshi(); //显示子程序声明
void yanshi(unsigned int z); //延时子程序声明
void reset(); //复位子程序声明
void chushihua (); //初始化子程序声明
void quwen(); //读取温度子程序声明
void xie(char); //向18b20写字节子程序声明
unsigned int (); //从18b20读字节子程序声明
void yanshi_18B20(unsigned int); //18b20延时子程序声明

main() //主函数
{
chushihua();
quwen();
yanshi(1000);
EA=1; //总中断允许
ET0=1; //定时器0中断允许
TMOD=0x01;
TH0=(65535-15535)/256;
TL0=(65535-15535)%256;
TR0=1; //定时器0启动

// chushihua();
while(1) //使程序循环
{
// chushihua(); //调用初始化子程序
// quwen(); //调用读取温度子程序
xianshi(); //调用显示子程序
}
}

void chushihua (void) //初始化子程序
{
reset(); //复位
xie(0xCC); //跳过序列号
xie(0x44); //温度转换命令
}

void quwen(void) //读取温度子程序
{
int k,i;
int wd; //存放读取的温度值 将其除以16即为得到的值
reset(); //复位
k++; //延时4us
xie(0xCC); //跳过序列号
k++; //延时4us
xie(0xBE); //发出读指令
k++;k++; //延时8us
wdjc[0]=(); //读取低字节
wdjc[1]=(); //读取高字节
i=wdjc[1]; //把第二个字节先存至低8位
i<<=8; //把第二个字节移到高八位上去
i|=wdjc[0]; //把第一个字节放到底八位上去
if( (wdjc[1]&0x08)) //去除的到数据的数据位,得到符号位
{
wd=0xffff-i+1; //如果为负温则去除其补码
zf=0; //表示温度为负数
}
else
{
wd=i; //如果为正温度则只直接赋予wd
zf=1; //表示温度为正数
}

wen=wd*10/16; //获取的温度转换成十进制温度数值的10倍
}

/*
数码管接线说明:
P2口接共阴极数码管段选(从低位到高位依次接数码管的a~h)
P1.0接数码管第一位的阴极,P1.1接数码管第二位的阴极,
P1.2接数码管第三位的阴极,P1.3接数码管第四位的阴极。
*/

void xianshi() //显示子程序
{
wei1=wen/100%1000%100%10;
wei2=wen/10%10000%1000%100%10;
wei3=wen/1%100000%10000%1000%100%10;

if(zf==0){x1=0;x2=1;x3=1;x4=1;P2=0x40;} //正负号显示
yanshi(5);

x1=1;x2=0;x3=1;x4=1;
P2=xianshima[wei1];
yanshi(5);

x1=1;x2=1;x3=0;x4=1;
P2=xianshima[wei2]+0x80; //小数点显示+80H
yanshi(5);

x1=1;x2=1;x3=1;x4=0;
P2=xianshima[wei3];
yanshi(5);

}

void yanshi(unsigned int z) //延时子程序
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void yanshi_18B20(unsigned int ys) //18b20延时子程序
{
for(;ys>0;ys--);
}

void reset() //18b20复位子程序
{
sjx = 0;
yanshi_18B20(44);
sjx = 1;
yanshi_18B20(15);
}

unsigned int () //读18b20子程序
{
unsigned char i;
for (i=8;i>0;i--)
{
zijie>>=1;
sjx = 0;
_nop_();_nop_();_nop_();_nop_();
sjx = 1;
if(sjx)
{
zijie|=0x80;
}
yanshi_18B20(4);
}
return(zijie);
}

void xie(char xzj) //写18b20子程序
{
unsigned char i,j;
for (i=8; i>0; i--)
{
sjx = 0;
j++;
sjx = xzj&0x01;
yanshi_18B20(8);
sjx = 1;
j++;
xzj>>=1;
}
}

void time0() interrupt 1 //中断服务程序
{
TH0=50000/256;
TL0=50000%256;
bb++;
if(bb==50)
{
bb=0;
chushihua();
quwen();
}
}

Ⅷ 求 单片机简单的C语言程序例子(越多越好)

我前几天刚在网上看到的,不知道对你有没有用》

1. 闪烁灯
1. 实验任务
如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2. 电路原理图

图4.1.1
3. 系统板上硬件连线
把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4. 程序设计内容
(1). 延时程序的设计方法
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:
如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒
机器周期 微秒
MOV R6,#20 2个机器周期 2
D1: MOV R7,#248 2个机器周期 2 2+2×248=498 20×
DJNZ R7,$ 2个机器周期 2×248 498
DJNZ R6,D1 2个机器周期 2×20=40 10002
因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:
DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET
(2). 输出控制
如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5. 程序框图
如图4.1.2所示

图4.1.2
6. 汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}}

2. 模拟开关灯
1. 实验任务
如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
2. 电路原理图

图4.2.1
3. 系统板上硬件连线
(1). 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;
(2). 把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;
4. 程序设计内容
(1). 开关状态的检测过程
单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。
(2). 输出控制
如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5. 程序框图

图4.2.2
6. 汇编源程序 ORG 00HSTART: JB P3.0,LIGCLR P1.0SJMP STARTLIG: SETB P1.0SJMP STARTEND
7. C语言源程序#include <AT89X51.H>sbit K1=P3^0;sbit L1=P1^0;void main(void){while(1){if(K1==0){L1=0; //灯亮}else{L1=1; //灯灭}}}

3. 多路开关状态指示
1. 实验任务
如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
2. 电路原理图

图4.3.1
3. 系统板上硬件连线
(1. 把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;
(2. 把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;
4. 程序设计内容
(1. 开关状态检测
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。
(2. 输出控制
根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。
5. 程序框图

读P1口数据到ACC中
ACC内容右移4次

ACC内容与F0H相或

ACC内容送入P1口
<![endif]-->
图4.3.2
6. 方法一(汇编源程序)ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP STARTEND7. 方法一(C语言源程序)#include <AT89X51.H>unsigned char temp;void main(void){while(1){temp=P1>>4;temp=temp | 0xf0;P1=temp;}}8. 方法二(汇编源程序)ORG 00HSTART: JB P1.4,NEXT1CLR P1.0SJMP NEX1NEXT1: SETB P1.0NEX1: JB P1.5,NEXT2CLR P1.1SJMP NEX2NEXT2: SETB P1.1NEX2: JB P1.6,NEXT3CLR P1.2SJMP NEX3NEXT3: SETB P1.2NEX3: JB P1.7,NEXT4CLR P1.3SJMP NEX4NEXT4: SETB P1.3NEX4: SJMP STARTEND9. 方法二(C语言源程序)#include <AT89X51.H>void main(void){while(1){if(P1_4==0){P1_0=0;}else{P1_0=1;}if(P1_5==0){P1_1=0;}else{P1_1=1;}if(P1_6==0){P1_2=0;}else{P1_2=1;}if(P1_7==0){P1_3=0;}else{P1_3=1;}}}

先给你,传不上 太多了

Ⅸ 51单片机源程序设计

先实现一个功能吧,按K1数码管显示加1,LED灯左移一位。
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳级数码管码表0-9
ucharkey;
voidext0()interrupt0
{
key++;
P1=_crol_(0xfe,key);
P0=table[key];
}
main()
{
EX0=1;
IT0=1;
EA=1;
while(1);
}

阅读全文

与单片机程序大全相关的资料

热点内容
魔术app怎么用 浏览:338
单片机有4个8位的io口 浏览:895
win10rar解压缩软件 浏览:164
plc教程pdf 浏览:665
pythonshell清屏命令 浏览:278
检测到加密狗注册服务器失败 浏览:203
解压后手机如何安装 浏览:518
极客学院app为什么下架 浏览:13
图片批量压缩绿色版 浏览:651
东北程序员帅哥 浏览:707
加密封条风噪小 浏览:974
安阳少儿编程市场 浏览:499
云服务器建设原理 浏览:259
javajunit4for 浏览:847
华为服务器如何进阵列卡配置 浏览:435
apache服务器ip地址访问 浏览:720
如何买到安卓手机预装软件 浏览:537
冤罪百度云不要压缩 浏览:89
苏州云存储服务器 浏览:178
解压收纳原声 浏览:387