51单片机行列式键盘的应用proteus仿真+源程序

合集下载

单片机原理及应用——C51编程+Proteus仿真(第3版)课件第5章 开关键盘显示器接口设计

单片机原理及应用——C51编程+Proteus仿真(第3版)课件第5章 开关键盘显示器接口设计
11
在【例5-1】基础上,编写控制发光二极管反复循环点亮的流水灯。 【例5-2】电路仍采用图5-2,制作由上至下再由下至上反复循环点亮显
示的流水灯,3种方法实现。
(1)数组的字节操作实现 建立1个字符型数组,将控制8个LED显示的8位数据作为数组元素,依
次送P1口。参考程序:
#include <reg51.h> #define uchar unsigned char uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f ,
// 读入P1口的状态,送入state // 屏蔽P1口的高6位 // 判P1口低2位开关状态
{
case 0: P2=0x01; break; case 1: P2=0x02; break; case 2: P2=0x04; break; case 3: P2=0x08; break;
// 点亮P2.0脚LED //点亮P2.1脚LED // 点亮P2.2脚LED //点亮P2.3脚LED
} }
//左移初值赋给temp
// temp中的数据取反后送P1口 // 延时 // temp 中数据左移一位 // 赋右移初值给temp
// temp中的数据取反后送P1口 // 延时 // temp 中数据右移一位
15
程序说明: 注意使用移位运算符“>>”、“<<”与使用循环左移函数 “_crol_”和循环右移函数“_cror_” 区别。左移移位运算“<<”是将高位 丢弃,低位补0 ;右移移位运算、“>>”是将低位丢弃,高位补0。而循环 左移函数“_crol_” 是将移出的高位再补到低位,即循环移位;同理循环 右移函数“_cror_” 是将移出的低位再补到高位。

基于Proteus的51系列单片机设计与仿真PPT课件

基于Proteus的51系列单片机设计与仿真PPT课件
现场总线控制系统 FCS (Fieldbus Control System)
把单个分散控制的测量设备变成网络节点,以现场总线为 纽带,把他们连接成可以相互沟通信息、共同完成自控任 务的网络控制系统。
返回本节首页
1.1.3.3 典型应用系统
典型的较全面的单片机测控系统 系统特点 受集成度限制/系统扩展/在线控制功能强 典型通道及特点 前向通道、后向通道、人机通道
高性能化 大容量 内装化
返回本节首页
1.1.3 单片机应用领域
1.1.3.1 单机应用 1.1.3.1 多机应用 1.1.3.1 典型应用举例 1.1.3.4 应用系统设计内容
返回本章首页
1.1.3.1 单机应用
测控系统
在线控制,将计算机与控制系统组合在一起,进行实时监控, 体积小,功耗低,可靠性高;适用于单片机。
返回本章首页
1.1.1 微型计算机概述
微型计算机的发展
电子管
半导体晶体管 小规模集成电路 大规模集成电路
返回本章首页
1.1.1 微型计算机概述
微型计算机的应用 举例:.....1 单片机的特点 1.1.2.2 单片机的发展
返回本章首页
1.1.1 微型计算机概述
微型计算机的概念
微处理器(Microprocessor)又称CPU,芯片内部集成运算器和 控制器,是构成微型计算机系统和网络工作站的核心部件。 1971年Intel公司制成第一个CPU—Inter 4004
微型计算机
单片机—将CPU、存储器、I/O接口、中断系统 集成在一块芯片上,程序存放在ROM中。 单板机--将CPU、存储器、I/O接口、中断系统 集成在一块印制电路板上,程序存放在ROM中。 多板机--- 将CPU、存储器、I/O接口、中断系统 集成在多块印制电路板上,程序存放在ROM中。 微型计算机系统,在多板机基础上发展而来,有更为丰富的 软硬件资源(计算机,电脑)。

单片机原理及应用——基于C51+Proteus仿真课件第6章单片机的输入输出

单片机原理及应用——基于C51+Proteus仿真课件第6章单片机的输入输出

数码显示
设计一个四量程LED数码管显示电 路
任务描述
设计一个能够显示四位十进制数的显示电路,显示器件采用LED数码 管。显示电路有一个旋转开关,四个档位,转动旋转开关,LED数码管 显示的数值跟随旋转开关的位置放大或缩小十倍。显示电路设有四个量 程,显示的数值范围为0.000~9999。
要求:
AT89C51
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1
void main()
{
while(1)
{
r=0;
g=1;
y=1;
rr=1;
yy=1;
gg=0; //南北绿灯亮,东西红
灯亮
delay(200);
r=0; g=1; y=1; rr=1; yy=0; gg=1; //东西红灯亮,南北黄灯

delay(30) ;
r=1;
g=0;
for(i=0;i<8;i++)
{
P1=temp;
delay();
temp=temp<<1;
}
}
}
void delay()
{
unsigned int j;
for(j=0;j<=20000;j++);
}

#include <reg52.h>

51单片机C语言实例(350例)Proteus仿真和代码都有

51单片机C语言实例(350例)Proteus仿真和代码都有

51单片机C语言实例(350例)Proteus仿真和代码都有51单片机C语言实例(400例)所有实例程序均经测试过,适合新手学习。

1-IO输出-点亮1个LED灯方法1 10-LED循环左移100-24c02记忆开机次数101-24c02存储上次使用中状态102-DS1302 时钟原理103-DS1302可调时钟104-DS1302时钟串口自动更新时间105-1602液晶显示DS1302时钟106-字库ST7920 12864液晶基础显示107-按键 12864显示108-PCF8591 1路AD数码管显示109-PCF8591 4路AD数码管显示11-LED循环右移110-PCF8591 DA输出模拟111-PCF8591 输出锯齿波112-PCF8591 1602液晶显示113-串口通讯114-串口通讯中断应用115-RS485基本通讯原理116-红外接收原理117-红外解码数码管显示118-红外解码1602液晶显示119-红外发射原理12-查表显示LED灯120-红外收发测试121-双红外发射避障原理测试122-1个18B20 温度传感器数码管显示123-1个18b20温度传感器1602液晶显示124-多个18b20温度传感器1602液晶显示125-超温报警测试126-温度可调上下限1602126-温度可调上下限1602显示127-PS2键盘输入1602液晶显示128-双色点阵1种颜色显示测试129-双色点阵2种颜色显示测试13-双灯左移右移闪烁130-双色点阵显示特定图形131-双色点阵交替图形显示132-双色点阵双色交替动态显示133-热敏电阻测试数码管显示134-光敏电阻测试数码管显示135-自动调光测试136-串转并数字芯片测试137-非门数字芯片测试138-电子琴139-实用99分钟倒计时器14-花样灯140-外部频率测试141-定时做普通时钟可调142-1602液晶显示的密码锁143-实用密码锁144-1602液晶显示的计算器145-秒表146-串口测温电脑显示147-交通灯测试148-点阵模拟电梯上行下行149-点阵流动广告模拟15-PWM调光150-综合测试程序151-12位AD_DS1621与12864液晶152-闪烁灯一153-闪烁灯二154-流水灯A155-51单片机12864大液晶屏proteus仿真156-流水灯B157-数码管显示158-12864LCD显示计算器键盘按键实验159-数码管显示(锁存器)16-共阳数码管静态显示160-数码管动态显示161-数码管滚动显示162-数码管字符显示163-独立按键164-矩阵键盘165-矩阵键盘(LCD)166-用DS1302与12864LCD设计的可调式中文电子日历167-定时器的使用(方式1)168-12864LCD图形滚动演示169-用PG12864LCD设计的指针式电子钟17-1个共阳数码管显示变化数字170-定时器的使用(方式2)171-外部中断的使用172-定时器和外部中断173-开关控制12864LCD串行模式显示174-点阵显示175-液晶1602显示176-12864带字库测试程序177-串行12864显示178-遥控键值解码-12864LCD显示179-液晶12864并行18-单个数码管模拟水流180-液晶12864并行2181-串口发送试验182-串口接收试验183-串口接收(1602)184-蜂鸣器发声185-直流电机调速186-蜂鸣器间断发声187-lcd-12864应用188-继电器控制189-直流电机调速19-按键控制单个数码管显示190-步进电机191-存储AT24C02192-PCF8591T AD实验193-PCF8591T芯片DA实验194-温度采集DS18B20195-EEPROM_24C02196-12864LCD显示24C08保存的开机画面197-红外解码198-12864LCD显示EPROM2764保存的开机画面199-时钟DS1302(LCD)2-IO输出-点亮1个LED灯方法220-单个数码管指示逻辑电平200-宏晶看门狗201-SD卡202-秒表203-普通定时器时钟204-彩屏控制205-彩屏图片显示206-12864+DS1302时钟+18B20温度计207-12864测试程序208-12864串行驱动演示209-12864生产厂程序21-8位数码管显示其中之一210-12864中文显示测试211-LCD12864212-12864M液晶显示(有字库)程序(汇编)213-超声波测距LCD12864显示214-红外遥控键值解码12864液晶显示(汇编语言)215-用DS1302与12864LCD设计的可调式中文电子日历216-中文12864217-中文12864LCD显示红外遥控解码实验218-IO端口输出219-IO端口输入22-8位数码管静态显示其中之二220-流水灯221-数码管显示223-独立按键224-独立按键去抖动225-定时器0226-定时器1227-定时器2228-外部中断0电平触发229-外部中断0边沿触发23-8位数码管动态扫描显示230-外部中断1231-矩阵键盘232-液晶LCM1602233-LCD1602动态显示234-EEPROM24c02235-开机次数记忆236-红外解码LCD1602液晶显示237-红外解码数码管显示238-喇叭239-液晶背光控制24-8位数码管动态扫描原理演示240-与电脑串口通信241-步进电机242-字库LCD12864液晶测试243-液晶数码综合显示244-99秒计时245-99倒计时246-抢答器247-PWM调光248-LED点阵249-直流电机调速250-按键计数器251-秒表252-数码管移动253-花样灯254-红绿灯255-音乐播放256-红外收发演示257-普通定时器时钟258-继电器控制259-ps2键盘LCD1602液晶显示26-9累加260-RTC实时时钟DS1302液晶显示261-单线温度传感器18b20262-串口测温263-带停机步进电机正反转264-步进电机正反转265-AD_DA_PCF8591266-液晶AD_DA_PCF8591267-秒手动记数268-功能感受269-流水登27-99累加270-点亮一个二极管271-用单片机控制一个灯闪烁272-将P1口状态送入P0、P2、P3273-P3口流水灯274-通过对P3口地址的操作流水点亮8位LED 275-用不同数据类型控制灯闪烁时间276-用P0口、P1 口分别显示加法和减法运算结果277-用P0、P1口显示乘法运算结果278-用P1、P0口显示除法运算结果279-用自增运算控制P0口8位LED流水花样28-999累加280-用P0口显示逻辑与运算结果281-用P0口显示条件运算结果282-用P0口显示按位异或运算结果283-用P0显示左移运算结果284-万能逻辑电路实验285-用右移运算流水点亮P1口8位LED286-用if语句控制P0口8位LED的流水方向287-用swtich语句的控制P0口8位LED的点亮状态288-用for语句控制蜂鸣器鸣笛次数289-包含单片机寄存器的头文件29-9999累加290-用do-while语句控制P0口8位LED流水点亮291-用字符型数组控制P0口8位LED流水点亮292-用P0口显示字符串常量293-用P0 口显示指针运算结果294-用指针数组控制P0口8位LED流水点亮295-用数组的指针控制P0 口8 位LED流水点亮296-用P0 、P1口显示整型函数返回值297-用有参函数控制P0口8位LED流水速度298-用数组作函数参数控制流水花样299-用数组作函数参数控制流水花样3-IO输出-点亮多个LED灯方法130-9累减300-用函数型指针控制P1口灯花样301-用指针数组作为函数的参数显示多个字符串302-字符函数ctype.h应用举例303-内部函数intrins.h应用举例304-标准函数stdlib.h应用举例305-字符串函数string.h应用举例306-宏定义应用举例307-文件包应用举例308-条件编译应用举例309-用定时器T0查询方式P2口8位控制LED闪烁31-99累减310-用定时器T1查询方式控制单片机发出1KHz音频311-将计数器T0计数的结果送P1口8位LED显示311-用定时器T0的中断控制1位LED闪烁312-用定时器T0的中断实现长时间定时313-用定时器T1中断控制两个LED以不同周期闪烁314-用计数器T1的中断控制蜂鸣器发出1KHz音频315-用定时器T0的中断实现渴望主题曲的播放316-输出50个矩形脉冲317-输出正脉宽为250微秒的方波318-用定时器T0控制输出高低宽度不同的矩形波319-用外中断0的中断方式进行数据采集32-999累减320-输出负脉宽为200微秒的方波321-方式0控制流水灯循环点亮322-数据发送程序323-数据接收程序324-单片机向PC发送数据325-单片机接收PC发出的数据326-用LED数码显示数字5327-用LED数码显示器循环显示数字0~9328-用数码管慢速动态扫描显示数字1234329-用LED数码显示器伪静态显示数字123433-9999累减330-用数码管显示动态检测结果331-数码秒表设计332-数码时钟设计333-用LED数码管显示计数器T0的计数值334-静态显示数字“59”335-无软件消抖的独立式键盘输入实验336-软件消抖的独立式键盘输入实验337-CPU控制的独立式键盘扫描实验338-定时器中断控制的独立式键盘扫描实验339-独立式键盘控制的4级变速流水灯34-显示小数点340-独立式键盘的按键功能扩展:以一当四341-独立式键盘调时的数码时钟实验342-独立式键盘控制步进电机实验343-矩阵式键盘按键值的数码管显示实验344-矩阵式键盘按键音345-简易电子琴346-矩阵式键盘实现的电子密码锁347-用LCD显示字符'A'348-用LCD循环右移显示Welcome to China 349-将数据0x0f写入AT24C02再读出送P1口显示35-数码管消隐350-液晶时钟设计36-数码管递加递减带消隐37-数码管左移38-数码管右移38-数码管右移139-数码管右移24-IO输出-点亮多个LED灯方法240-数码管循环左移41-数码管循环右移41-数码管循环右移142-数码管循环右移243-数码管闪烁44-数码管局部闪烁45-定时器046-定时器147-定时器248-产生1mS方波49-产生200mS方波5-闪烁1个LED50-产生多路不同频率方波51-1个独立按键控制LED52-1个独立按键控制LED状态转换53-2按键加减操作53-2按键加减操作数码管显示54-多位数按键加减(闪烁)54-多位数按键加减(闪烁)数码管显示55-多位数按键加减(不闪烁)55-多位数按键加减(不闪烁)数码管显示56-定时器扫描数码管(不闪烁)57-按键长按短按效果58-抢答器59-独立按键依次输入数据6-不同频率闪烁1个LED灯60-按键从右至左输入61-8位端口检测8独立按键62-矩阵键盘行列扫描63-矩阵键盘反转扫描64-矩阵键盘中断扫描65-矩阵键盘密码锁66-矩阵键盘简易计算器67-外部中断0电平触发68-外部中断1电平触发69-外部中断0下降沿触发7-不同频率闪烁多个LED灯70-外部中断1下降沿触发71-T0外部计数输入72-T1外部计数输入73-看门狗溢出测试74-按键喂狗75-喇叭发声原理76-警车声音77-救护车声音78-喇叭滴答声79-报警发声8-8位LED左移80-消防车警报81-音乐播放82-步进电机转动原理83-步进电机正反转84-步进电机按键控制85-步进电机转速数码管显示86-双步进电机综合控制86-步进电机调速原理87-双步进电机综合控制87-步进电机综合控制87-步进电机调速原理88-直流电机按键控制89-直流电机调速控制9-8位LED右移90-继电器控制原理91-双继电器模拟洗衣机电机控制92-1602液晶静态显示93-1602液晶动态显示94-1602液晶滚动显示95-1602液晶移动显示96-1602液晶按键输入显示97-2402存储1个数据98-24c02存储多个数据99-24c02存储花样流水灯。

51单片机行列式键盘程序

51单片机行列式键盘程序

扫描法:以4*4矩阵按键为例,将全部行线置低电平,然后检测列线的状态。

只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。

若所有列线均为高电平,则键盘中无键按下。

判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。

其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。

在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。

若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

#include "reg52.h"#define uchar unsigned char#define uint unsigned intvoid Delay_1ms(uint i);uchar keyScan(void);void Main(void){uchar keyValue;//存放键值,第一行的第一个为1第二行第一个为5,依次排列while(1){P1 = 0xf0;if(P1 != 0xf0)//判断是否有键按下{Delay_1ms(20);//消除键抖动if(P1 != 0xf0)//在此判断是否有键按下{keyValue = keyScan(); //逐行扫描,判断是哪个按键按下}}//此处用于对不同键值做出不同反应}}uchar keyScan(void){uchar temp,i,j,lineSelect[4]={0xef, 0xdf, 0xbf, 0x7f}; //数组用于线选for(j=0;j<4;j++)//循环四次用于四个行线依次拉低{P1=lineSelect[j];//每根行线依次拉低temp=1;for(i=0;i<4;i++)//循环四次用于判断哪列有键按下{if(!(P1&temp))//判断此列是否有键按下return (i+j*4);//返回键值,行*4+列,行和列的交叉处temp<<=1;//将目标移为下一列}}}void Delay_1ms(uint i)//延时函数{uchar x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);}线翻转法:Step 1:将列线作为输出线,行线作为输入线。

Proteus仿真51单片机

Proteus仿真51单片机
51单片机 Proteus仿真
一 概述
Proteus软件是英国Labcenter electronics公司出版的 EDA工具软件。它不仅具有其它EDA工具软件的仿真功
能,还能仿真单片机及外围器件。它是目前最好的仿真单
片机及外围器件的工具。
第一个实验
用proteus实 现这个实验
用 开关K0 控制 灯L0 的亮/灭。 取一根连接线连接P10和L0,另取一根连接线连接P11和K0,打 开实验箱电源。
4. 仿真并查看结果

单击
开始仿真,单击
19
停止仿真。
U1
XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
(3)放置电源和地

切换到“终端模式”下,选择电源和接地,POWER、 GROUND,放置到原理图编辑窗口中了,并右键编辑属性,
标号栏选择为VCC、GND。
(4)元器件之间的连线

单击鼠标左键,移动鼠标,靠近连接点时,可以完成自动连
线。ESC键或者单击鼠标的右键来放弃画线。
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17

Proteus使用笔记之51单片机4x4矩阵按键

Proteus使用笔记之51单片机4x4矩阵按键
程序如下: #include; #define uchar unsigigned int void delayMS(unsigned int z); uchar keyscan(void); void main(void) {
uchar key; while(1) { key=keyscan(); delayMS(50); } } void delayMS(unsigned int z) { unsigned i,j; for(i=z;i>;0;i--) for(j=122;j>;0;j--); } uchar keyscan(void) { uchar scode,scode1,scode2,k; P1=0xf0;
Proteus 使用笔记之 51 单片机 4x4 矩阵按 键
采用反转法判断按键坐标,即行号与列号获得按键码。 写完后发现 Proteus 一个问题:直接使用这样的 if(P1&0xf0!=0xf0)语句时,调不出来,当用了一个中间 变量过渡时,就调出来了,害我花了一个上午的时间,现 在暂时不知道 Proteus 为什么要这样,实际中是不需要的。
case 0x42: k=10;break; case 0x44: k=11;break; case 0x48: k=12;break; case 0x81: k=13;break; case 0x82: k=14;break; case 0x84: k=15;break; case 0x88: k=16;break; default: k=0;break; }
scode1=P1&0xf0; if(scode1!=0xf0) { delayMS(10); scode1=P1&0xf0; if(scode1!=0xf0) { scode1=P1^0xf0; //行号 P1=0x0f; scode2=P1^0x0f; //列号 scode=scode1+scode2; switch(scode) { case 0x11: k=1;break; case 0x12: k=2;break; case 0x14: k=3;break; case 0x18: k=4;break; case 0x21: k=5;break; case 0x22: k=6;break; case 0x24: k=7;break; case 0x28: k=8;break; case 0x41: k=9;break;

用Protues学习51键盘

用Protues学习51键盘

用Proteus学习51单片机之键盘键盘说开了,其实就是很多的按钮。

如果键盘数比较小的话,直接使用IO 口连接按钮就可以了,比如我要实现一个功能,按键使数字加1或减1,这样的话,只需要两个按键就可以了。

单个键盘的检测并不困难,先把IO口电平置为高电平,然后直接IO连按钮,再把按钮接地,当按下按钮时,检测到IO口电平为低即表示按下了按钮。

当然这是理论情况下,实际的情况是,按下按钮后,电平还会上下的跳变几次,所以如果只是单纯的检测电平的变化,是不准确的。

所以比较简单的方法是,检测到电平变化后,延时一段时间(比如10ms),再去检测电平,如果电平和先前检测到的一致,说明确实是按下去了。

下面是单独按钮的实验,简单起见,直接用LED灯来显示当前值的二进制(不考虑溢出等情况)当需要的的按键比较少的时候,可以直接把IO口和按钮直接相连,不过当需要的按钮很多的时候,则不能这样连接了。

像一般的电脑键盘100多个按键,难道直接和系统IO相连?这显然是不现实的。

矩阵键盘就是一种能够以较少的IO口,检测较多按键的键盘。

矩阵键盘的原理就不写了,网上很容易就找到,简单而言,就是检测按下的按键,是第几行,第几列。

具体检测的方法也很简单,首先给相连的所有IO口加高电平,然后把某一行的线置低电平,如果有按键按下的话,则对应的列连接的IO口也会变成低电平,这样,行和列就都知道了。

原理图如下,按下1-9时在数码管上显示数字,其他按键直接显示“-”号。

检测代码如下:charcheck(){uchar row=0,col=0;//定义行和列uchartmp = 0,tmp2 = 0;for(row=0;row<4;row++)//P2.0到P2.3表示是第几行,依次置低电位tmp = (0xFF & (~(1<<row)));//表示第一行是低电平P2 = tmp;tmp2 = tmp;//因为要逐个的检测列,tmp的值会改变,所以加了一个tmp2来记录行的值//P2.4到P2.7表示是第几列,依次检测是否低电平for(col=0;col<4;col++){tmp = tmp2 & (~(1<<(col+4))); //表示对应的行和列,表示到P2时,应该显示的值if(P2 == tmp){delay(); //去抖动if(P2 == tmp) //确认是第几行,第几列了,则返回对应的值{if(row==3 && col==1) //0在第四行,第二列return0;if(rowreturn(2-row)*3 + col + 1;return10;//表示按的键不在0到9之间}}}return-1;//表示没有按键}。

51单片机矩阵键盘PROTEUS仿真演示

51单片机矩阵键盘PROTEUS仿真演示

51单片机矩阵键盘PROTEUS仿真演示51单片机矩阵键盘PROTEUS仿真演示(图、程序)作者:给力哈哈程序如下:#include#define uchar unsigned char;uchar key_val=0; //定义键值,初始默认为0uchar code TAB[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e}; //0~F共阳数码管显示段码void Check_Key(void){unsigned char row,col,tmp1,tmp2;tmp1 = 0x10; //tmp1用来设置P1口的输出,取反后使P1.4~P1.7中有一个为0for(row=0;row<4;row++) // 行检测{P1 = 0x0f; // 先将p1.4~P1.7置高P1 =~tmp1; // 使P1.4~p1.7中有一个为0tmp1*=2; // tmp1左移一位if ((P1 & 0x0f) < 0x0f) // 检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测{tmp2 = 0x01; // tmp2用于检测出哪一列为0for(col =0;col<4;col++) // 列检测{if((P1 & tmp2)==0x00) // 该列如果为低电平则可以判定为该列{key_val = row*4 +col; // 获取键值,识别按键return; // 退出循环}tmp2*=2; // tmp2左移一位}}}}void main(){P2=0xFF; //位码,这里全部置高,点亮8位数码管while(1){Check_Key();P0=TAB[key_val]; //显示}}。

单片机KEIL51和proteus仿真软件的使用

单片机KEIL51和proteus仿真软件的使用

实验:KEIL51和proteus仿真软件的使用一、实验目的1、掌握KEIL51软件的使用方法2、掌握proteus仿真软件的使用方法二、实验设备及软件1、单片机实验板2、PC机3、KEIL514、proteus三、实验任务KEILC和proteus仿真软件的使用方法四、实验步骤1、Proteus ISIS 设计单片机电路的基本步骤:(1) 新建设计文件夹或打开一个现有的设计文件。

(2) 选择元器件(通过关键字或分类检索)。

(3) 将元器件放入设计窗口。

(4) 添加其他模型(电源、地线、信号源等)和相关的虚拟仪器。

(5) 编辑和连接电路。

(6) 编写单片机所需的源程序。

(7) 加入源程序,并通过构造,得到仿真程序或目标程序。

(8) 根据需要,设置对象的属性,如将单片机的”Program File”属性设置为上述仿真调试程序或目标程序。

(9) 启动仿真功能,对电路进行仿真操作,验证其功能。

2、Keil 51基本步骤(1)单击Project菜单项,选择New Project项。

此时弹出Create New Project对话框,选择合适的路径口,在文件名一栏中填入新工程的名字。

单击保存。

(2)根据所用的器件,选择CPU的型号,单击确定。

(3)Keil51询问是否生成默认的配置文件,这个可选可不选。

单击NO,观察项目文件管理窗口的变化。

(4)在File菜单下单击New选项,新建文件。

此时在代码窗口出现一“Text1”空白文档。

(5)在“Text1”中编辑完代码后,单击File菜单中的保存项,弹出保存对话框。

注意在对文件命名时必须加扩展名.asm。

(6) 在项目导航栏中Source Group 上单击右键,选Add File to Group ‘Source Group 1’。

弹出Add File 对话框。

选中刚才保存的xxxx.asm.文件,单击Add,然后关闭对话框。

此时在项目文件管理窗口中就会出现刚才所添加的文件xxxt.asm。

Proteus仿真51单片机入门

Proteus仿真51单片机入门

Proteus 7 Professional仿真51单片机入门教程初学单片机时,拿着一块实验板发呆,电路也不懂、程序也不懂,只好慢慢弄,等弄懂了,实验板也差不多报销了。

而proteus 正好可以解决这个问题,它功能强大,这里只讨论仿真MCU 的功能。

它可以在原理图上仿真,不用出PCB 板,不怕你“啥弄”。

下面就先认识一下proteus.上图是启动后的画面。

我们点中的“P”后,弹出下面的画面:在里输入at89c51 后:右侧出现AT89C51,双击它,左侧空白框中出现AT89C51.左键单击它,它上面框中显示出它的原理图,把鼠标移到右侧框中,鼠标变成铅笔形状,单击左键,框中出现一个AT89C51 原理图的轮廓图,可以移动。

鼠标移到合适的位置后,按下鼠标左键,原理图放好了。

好了,一个单片机的原理图放好了。

按这个方法依次把元件led-red、res 放到右侧的框中(单片机旁)。

这张图太小了,看得不清楚,要是大的就好了。

别着急,把鼠标放在LED 旁,向前滚动鼠标中键,图像放大,向后滚动鼠标,图像缩小。

如果你的鼠标没这个键,你可以试试上面工具栏上这二个图标,也是一样的。

选择左侧工具栏上的“箭头”图标,把鼠标移到右侧的原理图中,鼠标经过元件时会就成“手形”,把鼠标移到LED-RED 上,按下左键,LED-RED 高亮显示,鼠标变成“手形”并带有方向键头。

松开鼠标后,形状没变,指着LED-RED 按住鼠标左键,移动鼠标,哈哈!元件移动了。

好了,现在你应该明白它们了吧!不用我说你应该明白刚才用到的工具的作用了。

在任何情况下,右键单击元器件时,元件会亮显示并弹出菜单:非常直观,都是一些一目了然的图标。

从上到的几个菜单分别是:移动物体、编辑属性、删除物体、顺时针旋转90 度(后面几个就不用说了吧)。

单击鼠标左键操作。

当元件高亮显示时,再右键击它,会删掉它。

把原理图中的元件摆放好。

左键单击左侧工具栏上的元件图标,把鼠标移到LED-RED引脚上,引脚上高亮的小方框,单击左键,有一条绿色的线拉出来了。

用Proteus软件进行51系列单片机仿真的制作和演示教程

用Proteus软件进行51系列单片机仿真的制作和演示教程

用Proteus软件进行51系列单片机仿真的制作和演示过程教程一、ISIS界面简介假如读者的电脑上已成功安装了Proteus,则可以从电脑桌面的“开始”-“程序”-Proteus 6 Professional-ISIS 6 Professional,启动ISIS。

ISIS是仿真模拟设计SCH设计程序。

ISIS成功启动后的界面如图1所示,分为菜单栏、工具栏,工具箱、编辑窗口(显示正在编辑的电路原理图)、预览窗口(显示整个电路图的缩略图)、对象选择器,对象旋转工具和模拟调试时用的快捷调试按钮。

二、绘制仿真电路的原理图笔者以图2所示的电路为例,介绍电路原理图的绘制过程。

操作过程为,用鼠标左键点击工具箱的元器件“”按钮,使其选中,再选中ISIS对象选择器左边中间的“”按钮,出现“Pick Devices”对话框,如图3所示,在这个对话框里读者可以选择元器件和一些虚拟仪器。

在“Libraries”下面找到“MICRO”选项,找到单片机A T89C51,双击“A T89C51”,这样在左边的对象选择器就有了A T89C51这个元件了,点击一下这个元件,然后把鼠标指针移到右边的原理图编辑区的适当位置,点击鼠标的左键,就把A T89C51放到原理图区。

按照同样方法把所需的其它元器件都放到原理图编辑区。

元器件放置完后,若位置不合适,需要调整元器件的位置,可先通过鼠标右键选中对象,此时被选中的对象变成红色显示,再用鼠标左键点击被选中的对象不放并拖到合适的位置后再释放鼠标左键。

若要旋转对象,可在选中对象时按旋转按钮进行旋转。

若要编辑对象的属性,在对象被选中时,用鼠标左键点击对象,此时出现属性对话框,比如要改变电阻的属性,可右键选中电阻,再用左键点击被选中的电阻,出现如图4所示的对话框。

在这里我们可以改变电阻的标号,电阻值,PCB封装以及是否把这些东西隐藏等,修改后,点击“OK“按钮即可。

在Proteus,许多器件没有Vcc和GND引脚,其实它们被隐藏了,在使用时可以不加电源。

1基于proteus的51单片机仿真实例一、说明

1基于proteus的51单片机仿真实例一、说明

基于proteus的51单片机仿真实例一、说明一、单片机系统的开发流程1、搭建硬件电路;2、编写控制程序;3、将程序“装”到单片机里面;4、运行单片机系统,并检查、调试运行结果。

二、学习单片机的基本条件以一个计算机系统为例,我们想要使用计算机,首先必须配置计算机的各种组件(CPU、主板、内存、硬盘、声卡、显卡、显示器等);各种必需的组件齐套后,要将各组件进行正确的组装(这就相当于单片机硬件电路的搭建)。

计算机组装完成后,需要安装操作系统和相关工作软件(相当于把各种程序装入到单片机中)。

这样我们才能够利用计算机来完成各种工作(相当于组成了一个完整的单片机系统)。

单片机是一门实践性很强的技术,它牵涉到软件和硬件的学习。

软件指的是单片机控制程序;硬件则是保证单片机运行的基本电路。

无论是程序设计还是电路设计,都需要经过大量的实践练习才能够准确理解和熟练掌握。

1、软件条件:单片机软件的开发流程是:1)编写控制程序;2)对程序进行编译、排错、仿真、调试;3)生成可以“装”到单片机里面的程序文件(一般是二进制或十六进制文件)。

单片机的软件开发用到以下软件:程序编写、编译软件:用来编写、编译单片机的控制程序;仿真软件:用来调试单片机程序是否完成了既定功能;程序烧录软件:将程序烧录到单片机中。

2、硬件条件:程序编写调试完成后,需要在硬件系统中运行,才能够组成一个完整的单片机系统。

一般的必备硬件有:编程器:用来将程序烧录到单片机中的工具;单片机学习板:用来演示和检验单片机系统是否实现了既定功能。

三、单片机的编程语言和软件的选择单片机的编程语言有多种,从最早的机器语言、汇编语言,到现在广被采纳的C语言,还有一些高级语言,例如C++,BASIC等也可以用来开发单片机程序。

但是目前最流行的是C 语言。

目前用得最多的51单片机开发软件是keil c51;后面的学习中,将以c语言来编写相关单片机程序,采用的开发软件是keil c51 uv3.0。

基于msc51单片机实现的四位4乘4矩阵键盘计算器的C语言程序及其PROTUES电路和仿真_课程设计报告

基于msc51单片机实现的四位4乘4矩阵键盘计算器的C语言程序及其PROTUES电路和仿真_课程设计报告

单片机原理及接口技术课程设计报告设计题目:计算器设计信息与电气工程学院二零一三年七月计算器设计单片机体积小,功耗小,价格低,用途灵活,无处不在,属专用计算机。

是一种特殊器件,需经过专门学习方能掌握应用,应用中要设计专用的硬件和软件。

近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。

与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。

影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。

其中系统的抗干扰性能是系统可靠性的重要指标。

数学是科技进步的重要工具,数据的运算也随着科技的进步越发变得繁琐复杂,计算器的出现可以大大解放人在设计计算过程中的工作量,使计算的精度、速度得到改善,通过msc51单片机,矩阵键盘和LED数码管可以实现简单的四位数的四则运算和显示,并当运算结果超出范围时予以报错。

注:这一部分主要描述题目的背景和意义,对设计所采取的主要方法做一下简要描述。

字数不要太多,300-500字。

另注:本文要当做模板使用,不要随意更改字体、字号、行间距等,学会使用格式刷。

文中给出的各项内容都要在大家的报告中体现,可采用填空的方式使用本模板。

1. 设计任务结合实际情况,基于AT89C51单片机设计一个计算器。

该系统应满足的功能要求为:(1) 实现简单的四位十进制数字的四则运算;(2) 按键输入数字,运算法则;(3) LED数码管移位显示每次输入的数据和运算结果;(4) 当运算结果超出范围时实现报错。

主要硬件设备:AT89C51单片机、LED数码管、矩阵键盘。

注:这一部分需要写明系统功能需求,用到的主要硬件(参考实验箱的说明书)。

2. 整体方案设计计算器以AT89C51单片机作为整个系统的控制核心,应用其强大的I/O功能和计算速度,构成整个计算器。

通过矩阵键盘输入运算数据和符号,送入单片机进行数据处理。

基于proteus的51单片机仿真

基于proteus的51单片机仿真

基于proteus的51单片机仿真实例及应用开发说明一、单片机系统的开发流程1、搭建硬件电路;2、编写控制程序;3、将程序“装”到单片机里面;4、运行单片机系统,并检查、调试运行结果。

二、学习单片机的基本条件单片机是一门实践性很强的技术,它牵涉到软件和硬件的学习。

软件指的是单片机控制程序;硬件则是保证单片机运行的基本电路。

无论是程序设计还是电路设计,都需要经过大量的实践练习才能够准确理解和熟练掌握。

1、软件条件:单片机软件的开发流程是:1)编写控制程序;2)对程序进行编译、排错、仿真、调试;3)生成可以用特定软件能烧写到单片机里面的二进制或十六进制文件。

一般的单片机的软件开发用到以下软件:程序编写、编译软件(其中用到最广泛的Keil51):用来编写、编译单片机的控制程序(其中用到最广泛的是AVR fighter或者是STCISPV38A);仿真软件:proteus软件能很好地模拟展示单片机程序是否完成了既定功能;2、硬件条件:程序编写调试完成后,需要在硬件系统中运行,才能够组成一个完整的单片机系统。

一般的必备硬件有:编程器:用来将程序烧录到单片机中的工具;单片机学习板:用来演示和检验单片机系统是否实现了既定功能。

三、对于单片机的硬件电路的设计需要指出的是,单片机的硬件电路是千差万别的,尤其是在制作电路板的时候,牵涉到元器件的布局、走线、抗干扰等多种环境问题,所以单单依靠一个仿真软件是很难真实模拟单片机系统的工作的。

所以在这里的学习,只是作为一种辅助开发的手段,我们可以先将我们的电路和程序在该软件上进行验证,验证通过后在制作电路板进行实际验证。

四、下面简单地对proteus软件的入门进行以下介绍PROTEUS软件是英国Labcenter electronics公司研发的EDA工具软件。

它是一个集模拟电路、数字电路、模/数混合电路以及多种微控制器系统为一体的系统设计和仿真平台。

是目前同类软件中最先进、最完整的电子类仿真平台之一。

使用软件Proteus仿真51单片机的基本方法

使用软件Proteus仿真51单片机的基本方法

使用软件Proteus仿真51单片机的基本方法初学者学习单片机的一个比较好的方法是进行实践。

可以采用单片机芯片,也可以采用软件仿真。

Proteus是比较常用的仿真软件,下面介绍如何使用Proteus 软件仿真51系列单片机。

添加最主要的仿真元件——单片机。

点击左侧工具栏中的Component Mode(元件模式)按钮,再单击Pick form Libraries(从库中选择)按钮,如下图红框所示位置。

该按钮仅显示一个字母“P”。

会弹出如下图所示对话框,在Keywords文本框(下图红框区域)输入“89C”,就可以在右侧看见大量的单片机型号。

Proteus7.8中可以仿真89C51/89C52以及89C55等多种型号的单片机。

可以根据自己仿真的单片机型号进行选择。

对于初学者,选择89C51就可以。

点击89C51后,点击上图中的OK按钮。

此时鼠标会变成一支笔的形状,在绘图区域的蓝色框内直接点击鼠标左键,鼠标会变为一个单片机的预览,此时将鼠标移动到合适的位置点击鼠标左键,就可以将单片机放置在该位置。

至此我们就已经将AT89C51单片机放置到仿真软件中了。

搭建单片机最小系统读者注意,单片机最小系统可以说是单片机可以正常运行所需要最少的元件组成的系统。

在仿真软件Proteus中,即使没有搭建单片机最小系统,单片机也可以正常仿真运行。

为了让仿真图更加规范合理,建议大家把单片机最小系统搭建出来。

添加电容、电阻以及晶振等电子元件方法类似于单片机,这里不再赘述。

绘制电路图如下图所示。

其中X1为晶振,关键词为“crystal”;C1和C2为瓷片电容,关键词为“cap”,C3为有极性电容,一般为电解质电容,关键词为“cap-elec”;R1为电阻,关键词为“res”。

在上图所示的单片机最小系统中,搭建的自动复位电路需要连接VCC以及GND。

点击左侧工具栏中Terminal Mode按钮,选择按钮右侧的POWER或GND就可以添加了,如下图所示,添加方法与添加元件方法类似。

51单片机教程:按键输入、矩阵按键(按键巧用)proteus仿真+keil

51单片机教程:按键输入、矩阵按键(按键巧用)proteus仿真+keil

51单⽚机教程:按键输⼊、矩阵按键(按键巧⽤)proteus仿真+keil⽂章⽬录IO⼝原理(P1⼝最简单,所以这⾥只介绍P1,其他IO⼝原理类似)P1⼝原理可以看到的是P1⼝的⼯作原理⽐较简单,⾸先⽤P1⼝做输⼊输出较为好理解。

1、内部总线:就是内部P1.X位寄存器的值,⽐如说内部总线P1.0上电压为0V,那么对应P1.0=0;内部总线P1.0上电压为5V,那么对应P1.0=1;2、P1.X引脚:对应单⽚机引脚接⼝3、读锁存器:读锁存器为1,允许读锁存器。

为0,不允许读锁存器。

4、读引脚:为0不允许读引脚,为1允许读引脚5、写锁存器:提供⼀个上升沿锁存数据(写数据到单⽚机IO⼝上时⾃动提供⼀个脉冲)⼏个核⼼问题:1、读锁存器与读引脚区别是什么?读锁存器:读锁存器Q的电平读引脚:读P1.X引脚的电平2、读锁存器与读引脚能不能同时读?不能,两个输⼊缓冲器只能同时打开⼀个,所以只能同时读取⼀个电平。

3、什么时候读锁存器,什么时候读引脚?凡属于读-修改-写⽅式的指令,从锁存器读⼊信号,其它指令则从端⼝引脚线上读⼊信号。

也就是说遇到读指令时,相应的输⼊缓冲器才会打开,⼀般是出于关闭状态4、如果P1.0⼝⼀开始置⼀,然后⽤按键拉低,松开按键后P1.0⼝会是低电平吗?不会,锁存器锁1,没有写⼊0之前⼀直输出1,按下按键只不过P1.0引脚变低了,松开后依然是⾼电平(有了以上知识,我们就可以轻松解决很多问题了)按键输⼊按键由于是机械结构,按下的时候难免产⽣抖动,⼀般抖动会在按下的时候与松开的时候产⽣,抖动时间⼤概是10ms⼆、打开proteus仿真,绘制电路功能:利⽤⼀个按键对⼀个发光⼆极管进⾏控制。

这个可以说是最简单的按键输⼊实验了!由于是51单⽚机,内部有上拉电阻,我们就不要浪费材料在按键上接上拉了三、打开keil,编写如下代码sbit key=P1^0;//定义key为P1.0sbit led=P2^0;//定义LED为P2.0void delay10(void)//延时10ms{int n=1000;while(n--);}void main(void){while(1){if(key==0)//读P1.0引脚,如果引脚为低电平,则进⼊if{delay10();//延时10ms消抖if(key==0)//再次判断按键是否按下,防⽌⼲扰,增强稳定{led =!led;//led状态改变while(key==0);//等待按键松开,防⽌往下执⾏}}}}博主有个疑问也很不解,当"key"换成"P2^0"后程序就不能正常运⾏了,知道的⼩伙伴能不能给我解解惑。

基于proteus的51单片机仿真实例四、第一个proteus仿真实例

基于proteus的51单片机仿真实例四、第一个proteus仿真实例

基于proteus的51单片机仿真实例四、第一个proteus仿真实例现在来做第一个基于proteus的仿真实例,同时也了解、熟练一下proteus的使用方法1、打开proteus的智能原理图输入系统ISIS,进入工作环境,2、这个实例中,我们建立如下的电路图。

下面就开始一步一步的实现这个目标吧。

3、单击菜单栏“文件”--“新建设计”选项,弹出模板选择窗口,如下图所示,选择默认模板“DEFAULT”,选择“OK”按钮,即可创建一个新的设计文件。

4、文件创建成功后,要养成立即保存的习惯。

点击“保存”选项,选择保存的路径和文件名。

5、元件的选取。

操作步骤如下图6、点击“P”按钮后,弹出元器件选择对话框。

元器件的选取有两种方法:输入关键字查找、在分类元件中查找。

如下图所示7、添加单片机,在关键字文本框中输入“at89c51”,然后从搜索结果中选择所需要的型号,如下图所示。

选中元件后双击该元件名,该元件就被自动添加到对象选择器。

8、添加电阻。

输入关键字“resistors 470r”,搜索结果栏中将显示所有的匹配元件。

在这里我们选择参数为470R,0.6W的电阻,双击元件名将其添加到对象选择器中。

用同样的方法添加10K电阻(0.6W)到对象选择器中。

9、添加发光二极管。

输入关键字“led-yellow”,在搜索结果栏中选择所需的发光二极管,双击将其放入对象选择器。

10、添加晶振。

输入关键字“cycrtal”,结果搜索栏内只有一种晶振类型,双击将其加入对象选择器。

11、添加电容。

添加33P电容:输入关键字“capacitors”,在搜索结果栏内列出了各种类型的电容,接着输入“33pF”。

则列出各种33pF的电容,选择耐压为50V的电容,双击将其加入对象选择器。

添加10U电容,输入关键字“capactions 10u”,选择“50V radial electrolytic”(圆柱形电解电容),双击将其添加到对象选择器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg51.h>
#include<intrins.h>
void delayms(unsigned char ms);
unsigned char data dis_digit;
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xff};
51单片机行列式键盘的应用proteus仿真
本人喜好单片机设计,精通单片机编程和硬件电路设计,在空余之际编一些小程序与大家分享,有哪位路过,请多多指教,希望大家在一起能互相学习,互相进步。这里的程序已经测试通过。发表出来,一来可以帮助同样爱好单片机的朋友们,二来,希望能结交一些同道中人,共同学习。
源程序:
unsigned char data dis_index;
void main()
{
P2=0xff;
P1=0x00;
dis_index=0;
dis_digit=0x01;
while(1)
{
P2=dis_code[dis_index];
P1=dis_digit;
delayms(1);
P1=0x00;
dis_digit=_crol_(dis_digit,1);
dis_index++;
dis_index &=0x07;
}
}
void delayms(unsigned char ms)
{
unsigned char i;
while (ms--)
{
for(i=0;i<120;i++);
}
}
仿真图:
如果您想做项目开发,或者是做课题,或者您只是有一个想法,亲联系我们,我们会尽最大努力帮您完成,您的需要就是我们奋斗的方向!
小张:15838040206
阿里旺旺:tb3569_1968;zwjyln
我们拥有40G!!超大容量!!!是单片机入门者的首选经典资料!!!
您在单片机方面有任何问题,请及时和我们联系,我们开发和硬件开发。我们是一组拥有扎实的单片机基础知识的大学生,我们可以给您提供从项目开始到项目的完成整个过程的技术支持,其中包括原理图的设计、电路图的proteus软件仿真、程序的编写以及相关软件的使用等软件类和单片机板子、相关元器件或者是整个硬件的设计。
本人有给学生做课程设计的经验,欢迎亲们来本店咨询哦
淘宝店铺地址: ;

QQ:1203026348;496617571
邮箱:1203026348@;496617571@
电话:小陈:15225093569
相关文档
最新文档