单片机
文章平均质量分 53
yydtz
这个作者很懒,什么都没留下…
展开
-
甲机通过传串口控制乙机的LED显示状态
一、目标单片机甲机P1端口外接8位拨码开关;乙机P0外接8只LED。要求使用单片机串行口通信,在查询状态下使单片机乙机的8只LED能够显示甲机8位拨码开关的状态。二、布线三、实现四、结语...原创 2021-03-25 15:05:12 · 5451 阅读 · 2 评论 -
速度可调流水灯控制
一、目标假设单片机晶振频率为12MHz,单片机P0口外接8只LED,P3.2按键外接K1,P3.3外接K2。编写程序,每次按下按键K1时,加快8只LED的流水显示速度;每次按下K2时,降低8只LED的流水显示速度。(该实验要求用到定时器)二、布线三、实现1、设置全局变量,定义管脚。sbit K1=P3^2;sbit K2=P3^3; uint speed_control=10;uint counter=0;uint p0=0xFE;2、两个外部中断和一个定时器中断函数。void i原创 2021-03-24 16:21:16 · 6845 阅读 · 2 评论 -
简单门铃设计
一、目标假设单片机的晶振频率为12MHz,设计1个简单门铃控制系统。要求按下按键K1时,蜂鸣器发出“叮咚”的声音。二、布线三、实现四、结语原创 2021-03-24 15:07:25 · 2057 阅读 · 2 评论 -
59s计时器设计
一、目标假设单片机的晶振频率为12MHz,设计一个59秒计时器,要求使用T0工作方式1下进行硬件延时。二、布线三、实现1、#include<reg52.h>#include <intrins.h>#define uchar unsigned char//宏定义#define uint unsigned int //宏定义uchar code Display[]={ 0x0C0,//"0" 0x0F9,//"1" 0x0A4,//"2" 0x0B0,//原创 2021-03-23 21:52:27 · 5048 阅读 · 1 评论 -
用定时器实现方波
一、目标假设单片机的晶振频率为12MHz,使用T1,在方式1下控制P1.0输出1ms的等宽方波信号。二、布线三、实现时间常数TC=65536-12000000*0.001/12=65536-1000。sbit K=P1^0;void init_T1() interrupt 3{ TH1=(65536-1000)/256; TL1=(65536-1000)%256; K=~K;} void init(){ TMOD=0x01;//工作方式1 TH1=(65536-1000)/原创 2021-03-23 13:45:55 · 7770 阅读 · 0 评论 -
T0简单计数器
一、目标使用AT89C51单片机的P0、P2端口作为输出端口,外接2位LED数码管,P3.4外接按键K。功能:每次按下按键K时LED数码管进行加1显示,计数范围0~99。二、布线三、实现四、结语原创 2021-03-22 19:26:29 · 3262 阅读 · 0 评论 -
采用外中断进行的计数和清零控制
一、目标使用单片机P0、P2端口作为输出口,外接一个2位LED数码管,P3.2外接按键K1,P3.3外接按键K2。编写程序,按键K1作加一计数,按键K2作为“加1/暂停/清零”控制。当按键K2没有按下时。按键K1按下后LED数码管总显示0;第一次按下K2时,每次按下K1,LED数码管进行加1显示;第二次按下K2时,暂停加1计数,按键K1按下后LED数码管显示暂停前的数值;第三次按下K2时,LED数码管显示位0;第四次按下K2时,与第一次相同。二、布线三、代码实现1、首先针对不同的功能对原创 2021-03-22 12:09:46 · 6078 阅读 · 0 评论 -
采用外中断控制的条形LED彩灯设计
一、目标P0端口作为输出口,外接条形LED。编写程序,当按键K未按下时,LED进行循环左移显示。如果第一次按下按键K后,LED进行循环右移显示。如果第二次按下按键K后,LED进行拉幕式闭幕式花样显示。如果第三次按下按键K后,又恢复左移显示。二、Proteus## 三、代码实现1、分析一下我们要完成的目标。默认左流水,第一次按右流水,第二次按拉闭幕式,再按恢复默认。也就是说可以用一个counter记录按下次数,初始化counter=0,然后每次按下K就令counter++,然后进行counter原创 2021-03-20 21:14:21 · 664 阅读 · 0 评论 -
采用外中断控制的LED彩灯设计
一、目标P0端口作为输出口,外接条形LED。编写程序,当按键K未按下时,LED进行循环左移显示。如果第一次按下按键K后,LED进行循环右移显示。如果第二次按下按键K后,LED进行拉幕式闭幕式花样显示。如果第三次按下按键K后,又恢复左移显示。二、Proteus三、代码实现1、分析一下我们要完成的目标。默认左流水,第一次按右流水,第二次按拉闭幕式,再按恢复默认。也就是说可以用一个counter记录按下次数,初始化counter=0,然后每次按下K就令counter++,然后进行counter=原创 2021-03-20 21:25:38 · 2002 阅读 · 1 评论 -
带中断控制的LED花样灯
一、目标P0端口作为输出口,外接8只LED,P3.2外接按键K。编写程序,当K未按下时,8位LED进行默认显示,其显示规律为左移流水->右移流水->隔灯闪烁三次花样显示;如果按下K键后,8只LED暂停默认显示,而进行闪烁显示,当显示5次后,继续按默认规律显示。二、proteus连线三、代码实现1、首先我们来实现默认的花样流水灯显示void Multi_Display(){ uint i=0; uint p0=0x00; //left_LED左移流水 p0=0x7F;原创 2021-03-20 16:45:27 · 1583 阅读 · 1 评论 -
用C51实现简单拨号
目标通过89C51的P1口连接4*4的矩阵键盘,P0和P2口连接八位数码管。开始运行后,按下矩阵按键后数码管上显示出对应的键值,从左向右依次排列。当数码管显示满八位数字后,再有字符输入时整体字符向左平移,输入字符从最右端挤入。Proteus布线用P0口的低四位P0.0-P0.3来连接矩阵键盘的行线,用P0口的高四位P0.4-P0.7来连接矩阵键盘的列线。我是按照下图这样来给矩阵键盘分配键值的。矩阵键盘判断按键值的原理和步骤:(1)令P0=“11110000”,当无按键按下时,P0保持不变。一旦有原创 2021-03-17 20:59:32 · 2027 阅读 · 0 评论 -
8位数码管动态显示字符
目标使用单片机89C51的P0和P2口显示“872AF635”。Proteus连线过程1、首先定义好数码管的字符码,我习惯采用共阴极的(使用共阳极的数码管直接取反就行了)uchar code display[]={ 0x0C0,//"0" 0x0F9,//"1" 0x0A4,//"2" 0x0B0,//"3" 0x99, //"4" 0x92, //"5" 0x82, //"6" 0x0F8,//"7" 0x80, //"8" 0x90, //"9" 0x88, //"A"原创 2021-03-15 10:47:43 · 11161 阅读 · 1 评论 -
复杂广告灯设计
89C51亮灯规律:正向流水–>反向流水 -->各灯闪烁三次 -->高四盏、低四盏闪烁两次,重复循环。##连线和前两次的一样只用P0口就够了。##代码int main(){ uint p0=0xff,ms=200; while (1) { uint i=0; p0=0x7f; for(i=0;i<7;i++) { P0=p0; p0=_cror_(p0,1); Delay(ms); } for(i=0;i<7;i++)原创 2021-03-14 17:03:18 · 223 阅读 · 1 评论 -
单字节的乘法指令设计汇编程序11*12
题目汇编语言编写如下程序:利用单字节的乘法指令,将(R2R3)和(R6R7)中双字节无符号整数相乘,并把结果送到R4R5R6R7中。在R2R3和R6R7中输入无符号整数 (十进制数11,22分别送R3,R7),断点或单步运行本实验程序后检查R4R5R6R7中内容(十进制数11*22=242,转成十六进制即为F2)。代码用masm运行下面代码:DATAS SEGMENT ;此处输入数据段代码 ORG 0030H R2 DW 0 R3 DW 11 R4 DW 0原创 2020-11-02 14:27:06 · 915 阅读 · 0 评论 -
AD转换及单片机通信
要求用量两片单片机进行通信,其中甲机外接0809芯片进行AD转换,将AD转换结果送至P0端口用4位数码管显示,并将数据发送至乙机;乙机接收甲机发送的数据,和甲机同步显示AD转换结果。ADC0809芯片由于芯片介绍篇幅过大这里就,不做详细描述。详情请见硬件及连线甲机代码:#include <reg52.h>#define uchar unsigned char#define uint unsigned intint display[]= {0x3f,0x06,0x5b,0x4f原创 2020-06-25 11:04:56 · 2668 阅读 · 0 评论 -
汇编:排序子程序
要求: 在内部RAM30H开始的10个单元中连续存放着10个无符号随机数,编写一段程序,将这10个数中从大到小排列,存放在内部RAM40H开始的连续10个单元中。 将30H开头的10个单元格定义为TAB,将40H开头的10个单元格定义为TAB1。 思路是先将TAB中的数据复制到TAB1中,然后在进行冒泡排序。代码:DATAS SEGMENT ;此处输入数据段代码 ORG 0030H TAB DB 2,4,9,6,3,5,7,0,8,1 ORG 00原创 2020-06-25 10:19:50 · 1671 阅读 · 0 评论 -
开闭幕式广告灯设计
标题利用89C51单片机的P0端口实现八个LED灯的开闭幕式广告灯设计。开幕式亮灯顺序:全灭–>D3,D4–>D2,D5–>D1,D6–>D0,D7闭幕式灭灯顺序:全亮–>D0,D7–>D1,D6–>D2,D5–>D3,D4Proteus连线代码int main(){ uint p0=0xff; while (1) { p0=0xff; P0=p0; Delay(100);//ms p0=~0x18; P0=p0;原创 2021-03-14 16:29:04 · 637 阅读 · 0 评论 -
流水广告灯的设计
流水广告灯的设计利用89c51单片机的端口控制8个LED需变换点亮,先是D0-D7依次点亮,接着D7-D0依次点亮,如此重复循环。proteus连线代码#include<reg52.h>#include <intrins.h>#define uchar unsigned char//宏定义#define uint unsigned int //宏定义 void Delay(uint ms){ uint i; while(ms--) for(i原创 2021-03-14 16:01:00 · 678 阅读 · 0 评论 -
基于51的八位抢答器
8位抢答器利用51单片机设计一个8位抢答器。按下按钮,倒计时10s,初始状态LED处于熄灭状态,最后5s倒计时伴随LED闪烁。有玩家抢答或者计时结束时,LED灯常亮。开始计时后的任意状态下再次按下按钮,抢答器重置。Proteus布线图代码#include<reg52.h>#include<intrins.h>#define uchar unsigned char//宏定义#define uint unsigned int //宏定义sbit LED = P3^1原创 2021-03-06 21:24:57 · 2037 阅读 · 1 评论