- 博客(22)
- 资源 (2)
- 收藏
- 关注
原创 甲机通过传串口控制乙机的LED显示状态
一、目标单片机甲机P1端口外接8位拨码开关;乙机P0外接8只LED。要求使用单片机串行口通信,在查询状态下使单片机乙机的8只LED能够显示甲机8位拨码开关的状态。二、布线三、实现四、结语...
2021-03-25 15:05:12
5919
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
7240
2
原创 简单门铃设计
一、目标假设单片机的晶振频率为12MHz,设计1个简单门铃控制系统。要求按下按键K1时,蜂鸣器发出“叮咚”的声音。二、布线三、实现四、结语
2021-03-24 15:07:25
2245
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
5313
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
8176
原创 T0简单计数器
一、目标使用AT89C51单片机的P0、P2端口作为输出端口,外接2位LED数码管,P3.4外接按键K。功能:每次按下按键K时LED数码管进行加1显示,计数范围0~99。二、布线三、实现四、结语
2021-03-22 19:26:29
3501
1
原创 采用外中断进行的计数和清零控制
一、目标使用单片机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
6484
原创 采用外中断控制的LED彩灯设计
一、目标P0端口作为输出口,外接条形LED。编写程序,当按键K未按下时,LED进行循环左移显示。如果第一次按下按键K后,LED进行循环右移显示。如果第二次按下按键K后,LED进行拉幕式闭幕式花样显示。如果第三次按下按键K后,又恢复左移显示。二、Proteus三、代码实现1、分析一下我们要完成的目标。默认左流水,第一次按右流水,第二次按拉闭幕式,再按恢复默认。也就是说可以用一个counter记录按下次数,初始化counter=0,然后每次按下K就令counter++,然后进行counter=
2021-03-20 21:25:38
2371
1
原创 采用外中断控制的条形LED彩灯设计
一、目标P0端口作为输出口,外接条形LED。编写程序,当按键K未按下时,LED进行循环左移显示。如果第一次按下按键K后,LED进行循环右移显示。如果第二次按下按键K后,LED进行拉幕式闭幕式花样显示。如果第三次按下按键K后,又恢复左移显示。二、Proteus## 三、代码实现1、分析一下我们要完成的目标。默认左流水,第一次按右流水,第二次按拉闭幕式,再按恢复默认。也就是说可以用一个counter记录按下次数,初始化counter=0,然后每次按下K就令counter++,然后进行counter
2021-03-20 21:14:21
874
原创 带中断控制的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
1814
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
2298
原创 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
11679
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
345
1
原创 开闭幕式广告灯设计
标题利用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
814
原创 流水广告灯的设计
流水广告灯的设计利用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
808
原创 空瓶换饮料问题
看到一个有趣的题目:某商店规定:三个空汽水瓶可以换一瓶汽水。小王手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?答案是5瓶。方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。问:如果你手上有n个空汽水瓶,最多可以换多少瓶汽水喝?其实。。。。。Emmmmmm求解时直接把空瓶数除以2,即可得到正解。代码:#include<iostream>
2021-03-09 20:44:56
1794
2
原创 基于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
2169
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
1038
原创 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
2847
原创 ADC0809模数转换
目标将模拟电压通过AD转换,通过AT89C51单片机接数码管显示转换结果。代码ADC0809的芯片介绍:ADC0809的芯片简介#include "reg52.h" char code ShuMaGuan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴#define led P0 //P1端口控制数码管段选端
2020-06-25 11:02:55
3403
原创 ADC0809芯片简介
ADC0809A/D0809芯片特点ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,可根据地址码选通其中一路输入信号进行A/D转换。该芯片主要具有以下特性:8路输入通道,8位A/D转换器,即分辨率为8位;具有转换启动停止控制端;转换时间为100μs(时钟为640KHz时),130μs(时钟为500KHz时);单个+5V电源供电,低功耗,约15mW;模拟输入电压范围0~+5V,不需零点和满刻度校准;工作温度范围为-40~
2020-06-25 11:01:01
13100
原创 汇编:排序子程序
要求: 在内部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
1792
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅