单片机程序设计 很简单的 高分悬赏

单片机程序设计 很简单的 高分悬赏,第1张

每个灯亮1秒,每个灯闪亮频率为5次/秒。

下列程序,在PROTEUS中仿真通过

;-------------------------------------

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0_INT

ORG 0030H

MAIN:

MOV SP, #7FH

MOV TMOD,#01H

MOV TL0, #LOW(65536-50000)

MOV TH0, #HIGH(65536-50000)

SETB TR0

MOV IE, #82H

MOV R2, #2

MOV R3, #10

MOV R4, #0

M_LOOP:

LJMP M_LOOP ;等待中断,一切闪动、移位,都在中断里面解决

;----------------------------------------------------------------

T0_INT:

MOV TL0, #LOW(65536-50000)

MOV TH0, #HIGH(65536-50000)

DJNZ R2, T0_END

MOV R2, #2 ;加大此数字,如改为8,可降低速度,便于观察

INC R4

DJNZ R3, FLASH ;100ms减一次一

MOV R3, #10

INC R6 ;1s加一次一

FLASH:

MOV A, R6

ANL A, #7

MOV R5, A ;0~7, 1s换一次位

INC R5

MOV A, R4

MOV C, ACC0

MOV A, #255

MOV P1, A ;关显示

T0_LOOP:

RLC A

DJNZ R5, T0_LOOP

MOV P1, A

T0_END:

RETI

;------------------------------------------------------------

END

程序如下:

#include <reg52h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3。

让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。

从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期。

无论是自动测量还是智能仪表的实践,都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用。

单片机实验,其实这就是典型的流水灯电路,P1口接8个流水灯,每个灯点亮1秒。用定时器T1定时50ms,中断20次就为1秒,可用_crol_()移位函数实现。仿真效果如下图所示。

#include<reg51h>

sbit led=P1^0; //单片机管脚位声明

void main()

{

TMOD=0x01; //定时器TO工作在方式1

TH0=(65536-5000)/256; //装初值,12M晶振 1为1us; 5000为5000us=5ms;

TL0=(65536-5000)%256;

EA =1; //开总中断

ET0=1; //开定时器TO中断

TR0=1; //启动定时器

P1=0; //初始化P1口

while(1) ; //程序在这里等待中断发生

}

void T0_time() interrupt 1

{

unsigned char num;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

num++;

if(num==100) //05S (1s闪烁1次==05S亮05S灭)

{

num=0;

led=~led; //led状态取反

}

}

给你发个产品的真实程序,控制交流滑差电机,既检测控制速度,又检测实际速度,还根据检测值控制电机在控制速度值下平稳运行。

ORG

0000H

;主轴控制程序

START:

AJMP

MAIN

;

REALSPDL

EQU

30H

REALSPDH

EQU

31H

CMPSPDL

EQU

32H

CMPSPDH

EQU

33H

ADJSPD

EQU

34H

BKCNT

EQU

35H

T0COUNT

EQU

36H

T1COUNT

EQU

37H

IOSPDL

EQU

38H

IOSPDH

EQU

39H

T_TMP

EQU

3AH

T_MS

EQU

3BH

T_250MS

EQU

3CH

CH1

EQU

3AH

CH2

EQU

3BH

UPSPD

EQU

2

DNSPD

EQU

2

STOPB

EQU

P14

RUNB

EQU

P13

LAMPB

EQU

P37

PZB

EQU

P34

PAB

EQU

P33

SPDB

EQU

P32

BREAKB

EQU

P11

ENABLE

EQU

P10

;-----------------------------------

ORG

0003H

SJMP

IE0DEAL

ORG

000BH

SJMP

TF0DEAL

ORG

0013H

SJMP

IE1DEAL

ORG

001BH

SJMP

TF1DEAL

ORG

0023H

SJMP

RITIDEAL

;------------------------------------

ORG

0030H

IE0DEAL:

CLR

TR0

MOV

IOSPDL,TL0

MOV

IOSPDH,TH0

MOV

TL0,#0

MOV

TH0,#0

SETB

TR0

PUSH

ACC

CLR

02H

MOV

A,REALSPDH

CLR

C

SUBB

A,#2

JC

IE0D2

SETB

02H

IE0D2:

POP

ACC

IE0D3:

RETI

;------------------------------------

TF0DEAL:

SETB

01H

RETI

;------------------------------------

IE1DEAL:

CLR

TR1

MOV

REALSPDL,TL1

MOV

REALSPDH,TH1

MOV

TL1,#0

MOV

TH1,#0

SETB

TR1

JB

03H,IE1D1

INC

T1COUNT

MOV

A,T1COUNT

CLR

C

SUBB

A,#250

JC

IE1D1

MOV

T1COUNT,#0

INC

T0COUNT

MOV

A,T0COUNT

CLR

C

SUBB

A,#4

JC

IE1D1

MOV

T0COUNT,#0

SETB

03H

IE1D1:

CLR

01H

RETI

;------------------------------------

TF1DEAL:

SETB

01H

MOV

REALSPDL,#0FFH

MOV

REALSPDH,#0FFH

RETI

;------------------------------------

RITIDEAL:

RETI

;

DELAY2:

MOV

T_TMP,#0F9H

;0FAH=1ms

DJNZ

T_TMP,$

DJNZ

T_MS,DELAY2

;3EH=ms

RET

;------------------------------------------------------------------------------

DELAY3:

MOV

T_MS,#0FAH

;0FAH=250ms

LCALL

DELAY2

DJNZ

T_250MS,DELAY3

;3FH=250ms

RET

;------------------------------------

MAIN:

CLR

EA

CLR

ET0

CLR

ET1

CLR

EX0

CLR

EX1

CLR

TR0

CLR

TR1

SETB

RUNB

SETB

STOPB

MOV

SP,#60H

MOV

TMOD,#11H

MOV

TCON,#05H

MOV

TL0,#0

MOV

TH0,#0

MOV

TL1,#0

MOV

TH1,#0

MOV

T_250MS,#20

LCALL

DELAY3

SETB

TR0

SETB

TR1

SETB

ET0

SETB

ET1

SETB

EX0

SETB

EX1

SETB

EA

MOV

T1COUNT,#0

MOV

T0COUNT,#0

SETB

BREAKB

SETB

ENABLE

SETB

01H

CLR

03H

CLR

04H

SETB

RUNB

SETB

STOPB

MOV

T_MS,#100

LCALL

DELAY2

INIT:

JB

RUNB,LOOP

MOV

T_MS,#200

LCALL

DELAY2

CPL

P37

SJMP

INIT

LOOP:

JNB

RUNB,CONTINUE

LOOP0:

JNB

STOPB,STOPP

RESUME:

SETB

BREAKB

SETB

ENABLE

SETB

01H

CLR

P37

MOV

TL0,#0

MOV

TH0,#0

MOV

TL1,#0

MOV

TH1,#0

MOV

T1COUNT,#0

MOV

T0COUNT,#0

MOV

BKCNT,#0

CLR

03H

CLR

04H

SJMP

LOOP

CONTINUE:

JB

01H,CNT1

LCALL

COMPARE

JZ

CNT3

CJNE

A,#0FFH,CNT2

CNT1:

SETB

BREAKB

CLR

ENABLE

SJMP

LOOP

CNT2:

SETB

BREAKB

SETB

ENABLE

SJMP

LOOP

CNT3:

JB

02H,CNT2

JNB

03H,CNT2

CLR

BREAKB

SETB

ENABLE

CNT4:

SJMP

LOOP

;------------------------------------

STOPP:

CLR

BREAKB

SETB

ENABLE

STOPP1:

JNB

STOPB,STOPP1

SETB

BREAKB

SETB

ENABLE

SJMP

LOOP

;------------------------------------

COMPARE:

MOV

A,REALSPDL

ADD

A,#1

MOV

CMPSPDL,A

MOV

A,REALSPDH

ADDC

A,#0

MOV

CMPSPDH,A

CLR

C

MOV

A,CMPSPDL

SUBB

A,IOSPDL

MOV

CMPSPDL,A

MOV

A,CMPSPDH

SUBB

A,IOSPDH

MOV

CMPSPDH,A

JC

COM11

;MORE

JZ

COM12

COM10:

MOV

A,#0FFH

RET

COM11:

MOV

A,#00H

RET

COM12:

LCALL

GETADJ

CLR

C

MOV

A,CMPSPDL

SUBB

A,ADJSPD

JNC

COM10

MOV

A,#0A0H

RET

;------------------------------------

GETADJ:

MOV

A,IOSPDH

JNZ

GETADJ0

MOV

A,IOSPDL

SUBB

A,#79

JNC

GETADJ01

MOV

ADJSPD,#3

;>700

RET

GETADJ01:

SUBB

A,#32

JNC

GETADJ03

MOV

ADJSPD,#6

;500~700

RET

GETADJ03:

SUBB

A,#73

JNC

GETADJ04

MOV

ADJSPD,#10

;300~500

RET

GETADJ04:

MOV

ADJSPD,#16

;216~300

RET

GETADJ0:

MOV

A,REALSPDH

SUBB

A,#2

JC

GETADJ1

MOV

ADJSPD,#3

;<108

RET

GETADJ1:

MOV

A,REALSPDL

SETB

C

RRC

A

SUBB

A,#150

JNC

GETADJ2

MOV

ADJSPD,#24

;>200

RET

GETADJ2:

SUBB

A,#50

JNC

GETADJ3

MOV

ADJSPD,#48

;150~200

RET

GETADJ3:

MOV

ADJSPD,#96

;<150

RET

;------------------------------------

END

比如如下:

ORG 0000H ;程序入口

LJMP MAIN

ORG 0003H ;中断向量

LJMP EXT0

ORG 0030H

MAIN:

MOV SP,#5FH

SETB IT0

SETB EX0

SETB EA ;以上初始化

LOOP:

JB P10,LOOP1

CLR P00

SJMP LOOP

LOOP1:

SETB P00

SJMP LOOP ;以上主循环

EXT0:

RETI

END

;以上就是一个比较简单的单片机程序框架:包括:程序入口,中断,主循环

#include<reg51h>

#define uchar unsigned char

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};  //0到9

uchar num,cnt,disn;

uchar keyval,disk;

uchar led[]={1,2,3,4};

void dealdat(uchar a)

{

led[0]=0;

led[1]=0;

led[2]=0;

led[3]=0;

led[a]=disk;

}

void delay(unsigned int a)

{

unsigned int i,j;

for(i=0;i<a;i++)

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

}

void t0isr() interrupt 1

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

switch(num)

{

case 0:P2=0x01;break;

case 1:P2=0x02;break;

case 2:P2=0x04;break;

case 3:P2=0x08;break;

default:break;

}

P0=~tab[led[num]];

num++;

num&=0x03;

cnt++;

if(cnt>100)

{

cnt=0;

disn++;

disn%=4;

dealdat(disn);

}

}

uchar kbscan(void)

{

unsigned char sccode,recode;

P3=0x0f;  //发0扫描,列线输入

if ((P3 & 0x0f) != 0x0f)  //有键按下

{

// delay(20);   //延时去抖动

if ((P3&0x0f)!= 0x0f)

{

sccode = 0xef;    //逐行扫描初值

while((sccode&0x01)!=0)

{

    P3=sccode;

if((P3&0x0f)!=0x0f)

{

    recode=(P3&0x0f)|0xf0;

return((~sccode)+(~recode));

 }

        else

sccode=(sccode<<1)|0x01;

}

}

}

return 0;  //无键按下,返回0

}

void getkey(void)

{

unsigned char key;

key=kbscan();

if(key==0){keyval=0xff;return;}

switch(key)

{

case 0x11:keyval=7;break;

case 0x12:keyval=4;break;

case 0x14:keyval=1;break;

case 0x18:keyval=10;break;

case 0x21:keyval=8;break;

case 0x22:keyval=5;break;

case 0x24:keyval=2;break;

case 0x28:keyval=0;break;

case 0x41:keyval=9;break;

case 0x42:keyval=6;break;

case 0x44:keyval=3;break;

case 0x48:keyval=11;break;

case 0x81:keyval=12;break;

case 0x82:keyval=13;break;

case 0x84:keyval=14;break;

case 0x88:keyval=15;break;

default:keyval=0xff;break;

}

}

main()

{

TMOD=0x11;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

{

getkey();

if(keyval!=0xff)disk=keyval;

delay(10);

}

}

以上就是关于单片机程序设计 很简单的 高分悬赏全部的内容,包括:单片机程序设计 很简单的 高分悬赏、单片机流水灯程序、单片机实验 编写程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9488898.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存