单片机程序举例(用单片机汇编语言编写两个程序(越简单越好))

本文目录
- 用单片机汇编语言编写两个程序(越简单越好)
- 单片机流水灯程序
- c51单片机程序实例
- 单片机程序
- 单片机的高八位和低八位,能不能用个简单的程序例子说明下用法
- 单片机乘法和除法指令及汇编语言程序举例
- 用C语言如何开51单片机的计数器,最好编个实例程序
用单片机汇编语言编写两个程序(越简单越好)
先来个抢答器的程序,P1接一个共阳极数码管,P0接8个抢答按键,主持人复位采用单片机复位按钮实现。
ORG 0000H
START: MOV A,P0
CJNE A,#0FFH,PL0
SJMP START
PL0: LCALL DELAY
MOV A,P0
CJNE A,#0FFH,PL1
SJMP START
PL1: JNB ACC.0,K1
JNB ACC.1,K2
JNB ACC.2,K3
JNB ACC.3,K4
JNB ACC.4,K5
JNB ACC.5,K6
JNB ACC.6,K7
JNB ACC.7,K8
LJMP START
K1: MOV P1,#0F9H
SJMP $
K2: MOV P1,#0A4H
SJMP $
K3: MOV P1,#0B0H
SJMP $
K4: MOV P1,#99H
SJMP $
K5: MOV P1,#9H
SJMP $
K6: MOV P1,#82H
SJMP $
K7: MOV P1,#0F8H
SJMP $
K8: MOV P1,#80H
SJMP $
DELAY: MOV R6,#15
DEL2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DEL2
RET
END
表决器见下面的链接吧,参考一下:
单片机流水灯程序
程序如下:
#include 《reg52.h》
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3。
让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。
从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期。
无论是自动测量还是智能仪表的实践,都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用。
c51单片机程序实例
#include《reg51.h》
#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;
led=0;
led=0;
led=0;
led=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;
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);
}
}
单片机程序
程序的总体功能就是按一下P3.7口所接的键盘就在数码管上加1 直至计数至99 数码管的数值清零 注释如下:
#include 《AT89X51.H》 //头文件
unsigned char code table={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//共阴极数码管的码值 依次为从0到9
unsigned char Count;
void delay10ms(void) //延时程序
{
unsigned char i,j;
for(i=20;i》0;i--)
for(j=248;j》0;j--);
}
void main(void)
{
Count=0; //计数值初始化
P0=table; //取计数值十位数字
P2=table;// 取计数值个位数字
while(1)
{
if(P3_7==0) //判断是否有键按下
{
delay10ms(); //延时用于消抖
if(P3_7==0) //再次判断是否有键按下
{
Count++; //有键按下则Count值加1
if(Count==100)
{
Count=0; //Count计数至100则清零
}
P0=table; //取计数值十位数字
P2=table; //取计数值个位数字
while(P3_7==0); //松手检测
}
}
}
}
我把关键的部分都注释了,相信你应该没有什么问题了,再有问题的话我们再交流!
单片机的高八位和低八位,能不能用个简单的程序例子说明下用法
最直接的例子,就是定时器初始化,比如:
TMOD=0x01;//定时器0设为工作方式1
TH0=(65536-50000)/256;//初值高八位赋值给TH0
TL0=(65536-50000)%256;//初值低八位赋值给TL0
单片机乘法和除法指令及汇编语言程序举例
1.乘法:
MUL AB ;(A)×(B),积的低8位在A中,积的高8位在B中;
C总为0。
2.除法:
DIV AB ;(A)÷(B),商在A中,余数在B中。
若(B)= 0 ,则结果不定,(OV)= 1,(C)= 0。
例、试将A中的二进制数转换为3位BCD码,其中,百位数存放于31H单
元,十位数和个位数压缩后存于30H单元中。
解;MOV B,#100
DIV AB
MOV 31H,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ADD A,B
MOV 30H,A
用C语言如何开51单片机的计数器,最好编个实例程序
#include 《reg51.h》
#define uchar unsigend uchar
#define uint unsigned int
unsigned char code LED7Code = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//数码管段码
void main()
{
uint k;
TMOD=0X50;//设置模式为1,计数模式
TH1=0X00;
TL1=0X00;//初始值设定
IE=0X00;//关全局中断
TR1=1;//开定时计数器1运行
while(1)
{
if(TL1==16)//进行判断,为16时,计数值归零
TL1=0X00;
k=TL1;
P0=LED7Code;//数码管进行显示
}
}
***隐藏网址***

更多文章:
java外包用的比较多技术(java后端程序员最常用的技术有哪些,重点技术有哪些)
2026年5月22日 18:30
clip converter(用ClipConverter下载的youku视频在电脑哪个文件夹)
2026年8月24日 21:15
chmod修改权限(ubuntu linux下使用 chmod 修改文件权限,命令后提示【缺少操作数】,求解决方法)
2025年8月3日 09:30
neighborhood在哪买(香港潮牌店铺推荐去香港买什么好)
2026年6月6日 23:00
richtextbox用法(怎样使用C#的RichTextBox控件)
2026年2月13日 20:45
js replace 正则表达式(求一个js正则表达式:替换html内容中除了标签外的特定字符为另外一个字符.)
2025年9月5日 03:00
rock什么意思中文意思(rock是什么意思 rock的中文翻译、读音、例句)
2026年9月6日 10:30
衣香丽影同档次的品牌(太平鸟,伊芙丽,衣香丽影,红袖三彩哪家好)
2026年8月15日 07:15
excel怎么用round保留一位小数(excel如何保留一位小数)
2025年12月21日 16:45
c语言数组元素求和(c语言求数组元素的总和!求助各位大佬!)
2025年9月7日 00:30













