Protues仿真赛 仿真模块和程序代码

合集下载

protues编程及运行方法

protues编程及运行方法

protues编程及运行方法
Proteus是一款强大的电路仿真软件,它支持多种编程语言,包括汇编、C 和C++等。

以下是使用Proteus进行编程和运行的基本步骤:
1. 打开Proteus软件,创建一个新的工程。

2. 在工程中添加所需的元件和电路。

您可以使用Proteus提供的元件库,也可以自己创建元件。

3. 编写程序代码。

您可以使用汇编、C或C++等语言编写代码,并将代码添加到工程中。

4. 配置仿真参数。

您可以选择仿真速度、仿真精度等参数,并设置输入信号和观察点。

5. 运行仿真。

单击“运行”按钮,Proteus将开始仿真,并在仿真过程中显示结果。

6. 分析仿真结果。

您可以查看仿真波形、数据等,并根据需要调整代码或电路。

需要注意的是,使用Proteus进行编程和运行需要一定的电路和编程基础。

如果您不熟悉电路设计和编程语言,建议先学习相关基础知识。

Proteus仿真使用说明

Proteus仿真使用说明

本教程的目的是向您展示如何使用Proteus VSM和VSM Studio IDE对微控制器进行交互式仿真。

重点将放在模拟器和IDE的实际使用上,参考手册中对每个主题都有更详细的介绍。

本教程不涉及原理图;如果您不熟悉ISIS中的绘图,那么您应该花时间阅读ISIS参考手册中的教程内容。

我们将使用预先绘制的Microchip F1评估板原理图,如下所示。

从驱动VSM Studio IDE模拟的基本知识开始,我们将研究Proteus VSM软件中可用的一些调试和测量工具。

要求要完成本教程,您需要:Proteus软件8.0或更高版本的已安装副本。

如果您没有专业的软件副本,可以从Labcenter 网站免费下载该软件的演示副本。

高科技PIC16编译器9.8或更高版本的已安装副本。

可以从Proteus软件(VSM Studio IDE)中管理此编译器的下载和安装;我们将在下面教程的项目设置部分介绍这方面的过程。

我们仍然建议您通读教程,即使您没有安装工具。

大多数材料--以及所有调试技术--都是通用的,将在您自己的设计中被证明是有用的。

项目设置我们需要做的第一件事是设置我们的Proteus8项目。

由于我们使用的是虚拟开发板形式的预先绘制的原理图,这个过程被大大简化了:在Proteus的主页中,启动new project向导并选择development board选项。

接下来,从底部的列表框中将微控制器系列更改为PIC16,最后是F1评估板(F1发行版)。

单击finish导入项目。

在项目导入之后,您应该在应用程序中看到两个选项卡,一个是带有F1发行版设计的原理图捕获模块,另一个是包含用于驱动硬件的标准微芯片源代码的VSM Studio IDE我们需要做的第一件事是编译源代码并生成一些我们可以在模拟中测试的固件。

编译器配置微芯片的源代码是用高科技的PIC16编译器编写的,所以我们需要安装这个工具来编译固件。

切换到VSM Studio选项卡,并从Config菜单启动编译器配置对话表单。

Proteus-仿真实例

Proteus-仿真实例

/* 主程序 */
void main()
{
STB=1;
IE=0x85; //开外部中断:EA=1,EX1=1,EX0=1 即 IE=10000101B=85H
PX0=1;
//提升外部中断优先级
PX1=1;
IT0=1;
//外部中断设置为边沿触发
IT1=1;
output_led(LED_SEG[16]); //熄灭7段LED数码管(2位LED,所以 送两次)
}
/*******读出数据送显*********/
void int1() interrupt 2
{
uchar content,valueH,valueL; //声明内存变量
content=Read_One_Byte(0x04); //从AT24C02中04H单元读出数据
valueL=content%16;
参考C程序
#include<reg52.h> //包含头文件 #include<stdio.h> #include<absacc.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int #define DELAY_TIME 60 //定义常量 #define TRUE 1 #define FALSE 0 sbit SCL=P1^0; //用P1.0、P1.1 模拟I2C 总线
/*输入模块子程序*/ uchar pdat_in() {
uchar counter; uchar data_buf; counter=8; do { ACC=ACC<<1; SCLK=0; A0=SDAT; SCLK=1; } while(--counter!=0); SCLK=0; data_buf=ACC; return(data_buf); }

ADC0832程序完整版 源码+Proteus仿真

ADC0832程序完整版 源码+Proteus仿真

前段时间一直在为ADC0832的程序感到疑惑,从网上找了很多的代码,用Proteus仿真,最后都出现了一些奇怪的问题,有的根本没法读取数据,有的数据有错误。

当参考电压为5V时,如果把输入电压从0一直调到5V,读取的数据应该是从0到255,2.5V时应该是128。

但是我发现一些源码在输入0~2.5V时读取出来的是0~255,到2.5V时读取的数据为0,从2.5到5V,读出的值又从0增加到255,始终不正确。

今天下午特地查阅的ADC0832英文原版的DataSheet,又参考了一篇中文文档,终于写出了其完整的程序,并且先后读取了MSB FIRST DATA和LSB FIRST DATA,进行比较,如果两个数据相等,返回读取的数据,否则返回0,这样可以避免读取发生错误,更稳定可靠。

并通过了Proteus 仿真。

下图是ADC0832的时序图:其中T-SetUp为250ns,由于使用的是51单片机,晶振11.0592MHz,机器周期比这个值大,可以不考虑,但为了防止出现异常,还是延时了两个机器周期。

注意在第11个时钟下降沿之后,DO上的电平既是MSB FIRST 输出的最后一位,又是LSB FIRST输出的第一位。

以下是读取ADC0832的代码。

[cpp] view plaincopysbit CS_0832 = P1^0;sbit CLK_0832 = P1^1;sbit DO_0832 = P1^2; // DI、DO不同时有效,可共用一个接口sbit DI_0832 = P1^2;extern void _nop_ ( void );#define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0//把模拟电压值转换成8位二进制数并返回unsigned char read0832(){unsigned char i, ch = 0, ch1 = 0;CS_0832=0; // 片选,DO为高阻态DI_0832=1;// 此处暂停T-SetUp: 250ns (由pulse0832完成)pulse0832(); // 第一个脉冲,起始位,DI置高DI_0832=1;pulse0832(); // 第二个脉冲,DI=1表示双通道单极性输入DI_0832=1;pulse0832(); // 第三个脉冲,DI=1表示选择通道1(CH2)// 51单片机为准双向IO口:应先写入1再读取DI_0832=1;// MSB FIRST DATAfor(i = 0; i < 8; ++i) {pulse0832();ch <<= 1;if(DO_0832==1)ch |= 0x01;}// MSB FIRST输出的最后一位与LSB FIRST输出的第一位是在// 同一个时钟下降沿之后,故此处先执行读取,后执行pulse // LSB FIRST DATAfor(i = 0; i < 8; ++i) {ch1 >>= 1;if(DO_0832==1)ch1 |= 0x80;pulse0832();}CS_0832=1; // 取消片选,一个转换周期结束return (ch==ch1) ? ch : 0; // 返回转换结果}更多datasheet搜索: 。

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存储花样流水灯。

PROTEUS仿真教程

PROTEUS仿真教程

PROTEUS仿真教程第一步:安装PROTEUS软件第二步:创建新项目在PROTEUS软件中,您可以创建新项目来开始您的电路仿真工作。

点击菜单栏中的“File”选项,选择“New Project”来创建一个新项目。

然后输入项目的名称并选择保存路径。

第三步:添加元件在PROTEUS软件中,您可以通过“Library”选项来选择各种电子元件,包括电阻、电容、电压源等。

点击“Library”选项,选择您需要的元件并将其拖动到工作区中。

连接元件之间的引脚以搭建电路。

第四步:设置仿真参数在搭建完电路后,您需要设置仿真参数。

点击菜单栏中的“Graph”选项,选择“Set Simulator Parameters”来设置仿真参数,包括仿真时间、步长等。

您还可以设置输出波形的显示格式和范围。

第五步:运行仿真设置好仿真参数后,点击菜单栏中的“Simulate”选项,选择“Run”来运行仿真。

PROTEUS将模拟您搭建的电路,并显示仿真结果。

您可以查看电压、电流等参数,并分析电路的工作情况。

第六步:调试电路在仿真过程中,您可能会发现电路存在问题,比如输出波形不符合预期,电流过大等。

您可以通过调试电路来解决这些问题。

尝试更改元件参数、连接方式等,并重新运行仿真来检查效果。

第七步:保存和导出仿真结果在完成仿真后,您可以保存仿真结果并导出到其他格式。

点击菜单栏中的“File”选项,选择“Save As”来保存仿真文件。

您还可以导出波形图、数据表等结果,以便后续分析和报告。

总结:本教程介绍了PROTEUS的基本功能和使用方法,帮助您快速上手该软件进行电路仿真工作。

通过创建新项目、添加元件、设置仿真参数、运行仿真、调试电路和保存结果,您可以轻松完成电路仿真工作。

希望本教程对您有所帮助,祝您在PROTEUS软件中取得成功!。

proteus器件代码

proteus器件代码

7SEG-MPX4-CC 四个公阴二极管显示器1234 是阴公共端7SEG-MPX8-CC 八个公阴二极管显示器12345678 是阴公共端7SEG-MPX4-CA 四个公阳二极管显示器1234 是阳公共端7SEG-MPX8-CA 八个公阳二极管显示器12345678 是阳公共端1DPulse:单周期数字脉冲发生器。

DClock:数字时钟信号发生器。

DPattern:共阴极数码表uchardispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0 x79,0x71};共阳极数码表uchar dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff}共阳极数码管的公共阳极接+5V,当各段阴极上的电平为“0”时,该段点亮,电平为“1”时,该段熄灭。

RESPACK-X X表示包含x个电阻排阻AND 与门ANTENNA 天线BATTERY 直流电源BELL 铃,钟BVC 同轴电缆接插件BRIDEG 1 整流桥(二极管)BRIDEG 2 整流桥(集成块)BUFFER 缓冲器BUZZER 蜂鸣器CAP 电容CAPACITOR 电容CAPACITOR POL 有极性电容CAPVAR 可调电容CIRCUIT BREAKER 熔断丝COAX 同轴电缆CON 插口CRYSTAL 晶体整荡器DB 并行插口DIODE 二极管DIODE SCHOTTKY 稳压二极管DIODE VARACTOR 变容二极管DPY_3-SEG 3段LEDDPY_7-SEG 7段LEDDPY_7-SEG_DP 7段LED(带小数点) ELECTRO 电解电容FUSE 熔断器INDUCTOR 电感INDUCTOR IRON 带铁芯电感INDUCTOR3 可调电感JFET N N沟道场效应管JFET P P沟道场效应管LAMP 灯泡LAMP NEDN 起辉器LED 发光二极管METER 仪表MICROPHONE 麦克风MOSFET MOS管MOTOR AC 交流电机MOTOR SERVO 伺服电机NAND 与非门NOR 或非门NOT 非门NPN NPN三极管NPN-PHOTO 感光三极管OPAMP 运放OR 或门PHOTO 感光二极管PNP 三极管NPN DAR NPN三极管PNP DAR PNP三极管POT 滑线变阻器PELAY-DPDT 双刀双掷继电器RES1.2 电阻RES3.4 可变电阻RESISTOR BRIDGE ? 桥式电阻RESPACK ? 电阻SCR 晶闸管PLUG ? 插头PLUG AC FEMALE 三相交流插头SOCKET ? 插座SOURCE CURRENT 电流源SOURCE VOLTAGE 电压源SPEAKER 扬声器SW ? 开关SW-DPDY ? 双刀双掷开关SW-SPST ? 单刀单掷开关SW-PB 按钮THERMISTOR 电热调节器TRANS1 变压器TRANS2 可调变压器TRIAC ? 三端双向可控硅TRIODE ? 三极真空管VARISTOR 变阻器ZENER ? 齐纳二极管DPY_7-SEG_DP 数码管SW-PB 开关元件名称中文名说明7407 驱动门1N914 二极管74Ls00 与非门74LS04 非门74LS08 与门74LS390 TTL 双十进制计数器7SEG 4针BCD-LED 输出从0-9 对应于4根线的BCD码7SEG 3-8译码器电路BCD-7SEG转换电路ALTERNATOR 交流发电机AMMETER-MILLI mA安培计AND 与门BATTERY 电池/电池组BUS 总线CAP 电容CAPACITOR 电容器CLOCK 时钟信号源CRYSTAL 晶振D-FLIPFLOP D触发器FUSE 保险丝GROUND 地LAMP 灯LED-RED 红色发光二极管LM016L 2行16列液晶可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN 三个控制端口(共14线),工作电压为5V。

(完整版)PROTEUS仿真100实例

(完整版)PROTEUS仿真100实例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。

8051单片机Proteus仿真实例3(原理图+C程序)

8051单片机Proteus仿真实例3(原理图+C程序)
while(key==0);
}
}
}
void timer_0() interrupt 1
{
doorbell=~doorbell;
p++;
if(p<400)
{
TH0=(8192-700)/32;
case 1: transmit('B');break;
case 2: transmit('C');break;
}
delay(10);
}
}
void serial() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF>=0&&SBUF<=9)
P0=led_code[SBUF];
else P0=0x00;
ET0 = 1;
TR0 = 1;
P2=0x01;
while(1);
}
void timer_0() interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
count++;
if(count==10)
{
P2=_crol_(P2,1);
count=0;
}
}
6.继电器
原理图:
程序:
#include <reg51.h>
1.单片机之间通过串口进行通信
原理图:
程序:
#include <reg51.h>
sbit key=P1^0;
unsigned char code led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

protues 仿真简单步骤

protues  仿真简单步骤

Protues 仿真简单步骤一:编程仿真的首先要有自己的程序,根据你的程序以及你要达到的目的才可以选择硬件,进行protues仿真,每个人的课题不一样,程序就自己搞定(你懂得)。

老师要求是汇编语言,如果你的程序是c语言的,请致电魏钦玉,他会教你如何用keil 软件生成所需源文件,电话自己找。

二:软件安装你的电脑里一定有protues软件吧,如果没有的话在我们班级群里说一下,我们班很多人都会给你的,软件安装自己百度就可以了,有一定的步骤,一步一步来就可以了。

软件安装好之后是英文版的,如果你想汉化也可以,百度安装步骤里有说明,找我们班同学也可以,建议使用英语版的,与国际接轨。

三:线路图A:打开ISIS 7 Professional,找到自己需要的所有原件在软件左侧有一个工具栏,第一个黑色的箭头是selection mode,是选泽模式,第二个箭头是component mode,是组件模式,就是我们选择元器件的工具,点击之后,你会看见两个字母P 和L,单机字母P 会弹出一个窗口,keyword是搜索用找到自己的元器件后,单机可以在右侧看见元器件的具体信息,点击ok或者双击元器件即可添加,找出自己的所有元器件即可做下一步(温馨提示:里面的有些元器件比较难区分,选择的时候谨慎一些,比如选择显示器,共阴极和共阳极比较容易混淆)另外:power和ground是在左侧的工具栏里选择的,左侧工具栏里有一个terminals mode 工具,点击之后会出现如图所示页面,同选择元器件一样选择power或者ground即可B:元器件的布置元器件如何布置就要看个人喜好了,这里讲一下相关的一些工具应用首先是你选择元器件的字母P 左侧有几个旋转按钮,点击元器件后课看见元器件是如何放置的,竖直或者水平,按旋转按钮可改变状态,点击元器件之后,在软件主页面上单击左键可以预览,再次点击左键可以确定位置,左键单击软件主页面上的元器件,再双击右键可以删除,或者单击右键再选择delete 。

proteus 下简易仿真图和程序

proteus 下简易仿真图和程序

实验一:通过开关控制发光二极管的亮灭。

1:当开关未闭合时,灯不亮,现象如下:2:当开关闭合时,灯亮,实验现象如下:实验二:一路D/A转换,输出电压范围-5V~+5V; 1:一路直通双极性AD转换的模拟量的最小值-5v,实验原理图及现象如下:2:莫一时刻的AD转化的结果如下图:3:一路直通双极性AD转换的模拟量的最大值+4.95v,现象如下:实验二ad转换双极性输出端的波形显示:波峰值+4.95v,-5v;实验一:通过开关控制发光二极管的亮灭的程序源代码如下:#include "reg51.h"sbit p10=P1^0; //定义引脚sbit p20=P2^0;void delay_ms(void){unsigned int i;for(i=0;i<=100;i++);}void main(){while(1){if(p10==0) //判断按键是否按下{delay_ms(); //延时去抖动if(p10==0){p20=1;}else p20=0;}else p20=0;}}实验二:一路D/A转换的程序源代码如下:#include "reg51.h"void delay_ms(void){unsigned int i;for(i=0;i<=10000;i++);}void main(){unsigned char n;unsigned char m=0;for(n=0;n<=255;n++){P1=m;delay_ms();m++;}}。

proteus或ISIS常用代码表

proteus或ISIS常用代码表

proteus或ISIS常用代码表常用proteus或ISIS代码表SOURCE CURRENT 电流源SOURCE VOLTAGE 电压源BATTERY 直流电源button按钮开关SW ? 开关 SWITCH ?SW-DPDY ? 双刀双掷开关SW-SPST ? 单刀单掷开关SW-PB 按钮.SW-PB 开关Switches & Relays 开关,继电器,键盘AND 与门NAND 与非门NOR 或非门NOT 非门CAP 电容CAPACITOR 电容CAPACITOR POL 有极性电容CAPVAR 可调电容ELECTRO 电解电容CAP 电容CAPACITOR 电容器RES 电阻RESISTOR 电阻器POT 滑线变阻器PELAY-DPDT 双刀双掷继电器RES1.2 电阻RES3.4 可变电阻RESISTOR BRIDGE ? 桥式电阻RESPACK ? 电阻DIODE 二极管DIODE SCHOTTKY 稳压二极管DIODE VARACTOR 变容二极管1N914 二极管LED-RED 红色发光二极管NPN NPN三极管NPN-PHOTO 感光三极管OPAMP 运放OR 或门PHOTO 感光二极管PNP 三极管NPN DAR NPN三极管PNP DAR PNP三极管TRIAC ? 三端双向可控硅TRIODE ? 三极真空管INDUCTOR 电感INDUCTOR IRON 带铁芯电感INDUCTOR3 可调电感JFET N N沟道场效应管JFET P P沟道场效应管DPY_3-SEG 3段LEDDPY_7-SEG 7段LEDDPY_7-SEG_DP 7段LED(带小数点) LED 发光二极管CON 插口DB 并行插口PLUG ? 插头PLUG AC FEMALE 三相交流插头SOCKET ? 插座Connectors 排座,排插ANTENNA 天线BELL 铃,钟BVC 同轴电缆接插件BRIDEG 1 整流桥(二极管) BRIDEG 2 整流桥(集成块) BUFFER 缓冲器BUZZER 蜂鸣器CIRCUIT BREAKER 熔断丝COAX 同轴电缆CRYSTAL 晶振FUSE 熔断器LAMP 灯泡LAMP NEDN 起辉器METER 仪表MICROPHONE 麦克风MOSFET MOS管MOTOR AC 交流电机MOTOR SERVO 伺服电机SCR 晶闸管SPEAKER 扬声器THERMISTOR 电热调节器TRANS1 变压器TRANS2 可调变压器VARISTOR 变阻器ZENER ? 齐纳二极管DPY_7-SEG_DP 数码管7407 驱动门74LS390 TTL 双十进制计数器7SEG 4针BCD-LED 输出从0-9 对应于4根线的BCD码7SEG 3-8译码器电路BCD-7SEG转换电路ALTERNATOR 交流发电机AMMETER-MILLI mA安培计AND 与门BATTERY 电池/电池组BUS 总线CLOCK 时钟信号源CRYSTAL 晶振D-FLIPFLOP D触发器FUSE 保险丝GROUND 地LAMP 灯LM016L 2行16列液晶可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN三个控制端口(共14线),工作电压为5V。

proteus 8086 c语言编程

proteus 8086 c语言编程

proteus 8086 c语言编程Proteus是一款功能强大的电子设计自动化软件,它提供了丰富的仿真和调试工具,使得开发者可以在虚拟环境中进行电路设计和软件开发。

Proteus 8086是Proteus软件中针对8086微处理器的仿真模块,它可以帮助开发者进行基于8086微处理器的软硬件开发和调试。

8086微处理器是Intel公司于1978年推出的一款16位微处理器,它具有较大的寻址空间和强大的计算能力,被广泛应用于个人计算机的早期阶段。

在使用Proteus 8086模块进行编程时,我们可以通过C语言来编写程序,然后进行仿真和调试。

在Proteus 8086中进行C语言编程,首先需要创建一个新的工程,并选择8086微处理器作为目标芯片。

接下来,我们可以使用C语言编写程序,并通过连接器和仿真器将程序加载到虚拟的8086处理器中进行运行。

Proteus 8086提供了丰富的调试工具,如单步执行、断点设置和寄存器监视等,可以帮助开发者进行程序的调试和优化。

在编写C语言程序时,我们可以利用8086微处理器的丰富指令集和寄存器来实现各种功能。

例如,我们可以使用MOV指令将数据从一个寄存器复制到另一个寄存器,使用ADD指令进行加法运算,使用CMP指令进行比较操作等。

此外,8086微处理器还提供了许多特殊用途的寄存器,如栈指针寄存器、基址寄存器和指令指针寄存器等,可以用于实现复杂的功能。

Proteus 8086还支持与外部设备的连接和通信。

我们可以通过添加适当的外设模块,如LED显示器、键盘、数码管等,来模拟与外部设备的交互。

通过编写相应的C语言程序,我们可以实现与这些外设的数据传输和控制。

Proteus 8086的仿真功能可以帮助开发者通过虚拟环境来测试和调试他们的程序。

在仿真过程中,开发者可以观察程序的执行情况,并对程序进行单步调试,以便找出潜在的错误和问题。

此外,Proteus 8086还提供了波形显示功能,可以将程序的输入和输出信号以波形图的形式进行显示,方便开发者进行分析和调试。

8051单片机Proteus仿真实例2(原理图+C程序)

8051单片机Proteus仿真实例2(原理图+C程序)

1. INT0,INT1中断计数原理图:程序:#include <reg51.h>sbit k3=P3^4;sbit k4=P3^5;unsigned char code led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; unsigned char code seg_code[]={0x20,0x10,0x08,0x04,0x02,0x01};unsigned char led_buffer[]={0,0,0,0,0,0};unsigned int count_a=0,count_b=0;void delay(unsigned int x){unsigned char t;while(x--)for(t=0;t<120;t++);}void display(){unsigned char i;led_buffer[2]=count_a/100;led_buffer[1]=count_a%100/10;led_buffer[0]=count_a%10;if(led_buffer[2]==0){led_buffer[2]=10;if(led_buffer[1]==0)led_buffer[1]=10;}led_buffer[5]=count_b/100;led_buffer[4]=count_b%100/10; led_buffer[3]=count_b%10;if(led_buffer[5]==0){led_buffer[5]=10;if(led_buffer[4]==0)led_buffer[4]=10;}for(i=0;i<6;i++){P2=seg_code[i];P1=led_code[led_buffer[i]];delay(1);}}void main(){IT0=1;IT1=1;PX0=1;IE=0x85;while(1){k3=1;k4=1;if(k3==0) count_a=0;if(k4==0) count_b=0;display();}}void int0() interrupt 0{count_a++;}void int1() interrupt 2{count_b++;}2. INT0中断计数原理图:程序:#include <reg51.h>unsigned char code led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; unsigned char led_buffer[]={0,0,0};unsigned count=0;sbit key=P3^6;void display(){led_buffer[2]=count/100;led_buffer[1]=count%100/10;led_buffer[0]=count%10;if(led_buffer[2]==0){led_buffer[2]=10;if(led_buffer[1]==0)led_buffer[1]=10;}P0=led_code[led_buffer[0]];P1=led_code[led_buffer[1]];P2=led_code[led_buffer[2]];}void main(){IE=0x81;IT0=1;while(1){key=1;if(key==0)count=0;display();}}void int0() interrupt 0 {count++;}3.LED点阵原理图:程序:#include <reg51.h>sbit led1=P0^0;sbit led2=P0^1;void delay(long dly){while(dly--);}void main(){SCON=0x50;TMOD=0x20;TH1=0xfd;TL1=0xfd;PCON=0x00;TR1=1;RI=0;while(1){if(RI==1){RI=0;switch(SBUF){case 'A':led1=~led1;led2=1;break;case 'B':led1=1;led2=~led2;break;case 'C':led1=~led1;led2=~led2;break;}}else led1=led2=1;delay(1000);}}4.串行通信(MAX232芯片)原理图:程序:#include <reg51.h> sbit led1=P0^0;sbit led2=P0^1;void delay(long dly) {while(dly--);}void main(){SCON=0x50;TMOD=0x20;TH1=0xfd;TL1=0xfd;PCON=0x00;TR1=1;RI=0;while(1){if(RI==1){RI=0;switch(SBUF){case 'A':led1=~led1;led2=1;break;case 'B':led1=1;led2=~led2;break;case 'C':led1=~led1;led2=~led2;break;}}else led1=led2=1;delay(1000);}}5.MAX7221芯片原理图:程序:#include <reg51.h>#include <intrins.h>sbit DIN=P2^0;sbit CSB=P2^1;sbit CLK=P2^2;unsigned char code buffer[]={2,0,1,5,10,5,10,9};void delay(long dly){while(dly--);}void write(unsigned char addr,unsigned char dat){unsigned char i;CSB=0;for(i=0;i<8;i++){CLK=0;addr<<=1;DIN=CY;CLK=1;_nop_();_nop_();CLK=0;}for(i=0;i<8;i++) {CLK=0;dat<<=1;DIN=CY;CLK=1;_nop_();_nop_();CLK=0;}CSB=1;}void initialise(){write(0x09,0xff); write(0x0a,0x07); write(0x0b,0x07); write(0x0c,0x01);}void main(){unsigned char i; initialise();delay(10);for(i=0;i<8;i++)write(i+1,buffer[i]); while(1);}6. T0控制LED实现二进制计数原理图:程序:#include <reg51.h>void main(){TMOD=0x05;TR0=1;TH0=0x00;TL0=0x00;while(1){P1=TH0;P2=TL0;}}8. 按键控制LED循环原理图:程序:#include <reg51.h>#include <intrins.h>void delay(unsigned int x){while(x--);}void move_led(){if((P1&0x10)==0) P0=_cror_(P0,1);else if((P1&0x20)==0) P0=_crol_(P0,1);else if((P1&0x40)==0) P2=_cror_(P2,1);else if((P1&0x80)==0) P2=_crol_(P2,1);}void main(){unsigned char key;P0=0xfe;P2=0xfe;P1=0xff;key=0xff;while(1){if(key!=P1){key=P1;move_led();delay(15000); }}}9.按键控制数码管显示原理图:程序:#include <reg51.h>unsigned char code led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; unsigned char code led_seg[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};unsigned char led_buffer[]={0,10,10,10,10,10,10,10};void delay(unsigned int x){unsigned char t;while(x--) for(t=0;t<120;t++);}void led_display(){unsigned char i;for(i=0;i<8;i++){P2=led_seg[i];P0=led_code[led_buffer[i]];delay(2);}}void main(){unsigned char i,key_val,key_count=0;P0=0xff;P1=0xff;P2=0x00;while(1){led_display();key_val=P1;switch(key_val){case 0xfe:key_count++;if(key_count>8) key_count=8;led_buffer[key_count-1]=key_count;break;case 0xfd:if(key_count>0) led_buffer[--key_count]=10;if(key_count==0) led_buffer[0]=0;break;case 0xfb:led_buffer[0]=0;for(i=1;i<8;i++)led_buffer[i]=10;key_count=0;}while(P1!=0xff)led_display();}}10.报警器原理图:程序:#include <reg51.h>sbit SOUNDER=P1^0;sbit BUTTON=P1^7;void delay(unsigned int x){while(x--);}void alarm(unsigned char t){unsigned char i,j;for(i=0;i<200;i++){SOUNDER=!SOUNDER;for(j=0;j<t;j++);delay(15);}}void main(){SOUNDER=0;while(1){BUTTON=1;if(BUTTON==1){alarm(90);alarm(120);}}}。

proteus的msp430仿真,一学就会

proteus的msp430仿真,一学就会

第一步:在IAR中编写430程序:
为了便于实现和理解,我的例子比较简单,程序将P3OUT中的数据传给P2IN,然后再把P2IN 中的数据给P1OUT,最后输出到LED灯,程序如下:
#include <msp430x14x.h>
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P3DIR = 0xff; //P3设置为输出,P2设置为输入,P1设置为输出
P2DIR = 0x00;
P1DIR = 0xff;
P3OUT = 0x4a; //P3输出灯的控制信息,并通过连线传给P2IN
P1OUT = P2IN; //P2将信息给P1
while(1);
}
第二步:将程序生成为hex文件
右键TEST2,如图1,点击Option
图1
选中左边栏中的Linker,然后点击右栏中的output,如图2
图2
勾中Output file下的”Override default”选项并将输出文件名后辍改为”.hex”.在Format选项框中选中Other, Output 后选择”inter-extended”。

其他的值保持默认,点击确定。

点击”make”,生成proteus中需要的“.hex”文件,该文件生成在Debug文件夹下的Exe 中,如图3
图3
第三步:proteus中搭建好电路
图4
第四步:双击单片机导入生成的.hex程序,运行,就得到所要的结果
图5。

proteus代码流程

proteus代码流程

proteus代码流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 新建工程打开 Proteus 软件,选择“File”->“New Project”。

protues仿真游泳比赛计时器,原理图+程序

protues仿真游泳比赛计时器,原理图+程序

一,硬件系统的设计游泳计时显示系统的硬件设计原理如图1所示。

一般游泳项目自动计时显示系统应包括发令装置、触板和计时显示三部分组成。

发令功能现考虑由单片机来简单驱动蜂鸣器实现。

触板可以利用行程开关自制,也可以使用专用的成品触摸板, 但触摸板最好是继电器输出或TTL 低电平输出方式, 继电器输出可按图1模拟八泳道触摸板。

主控芯片采用AT89C51,该芯片具有4KB 闪存,2 个外部中断,2 个定时器中断。

晶振采用12MHZ,其机器周期仅为1μs,可满足系统的精度要求。

显示驱动采用美国MAXIM 公司生产的串行输入/ 输出共阴极显示驱动芯片MAX7219。

XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U2AT89C51X1CRYSTAL12MHz C222pFC122pFC322uFv c c510ΩX810KVCCLED23174LS02A 14B 16C 20D 23E 21F 15G 17D P22D I G 02D I G 111D I G 26D I G 37D I G 43D I G 510D I G 65D I G 78D I N 1L O A D 12C L K13I S E T 18D O U T24U3MAX7219R1200R21k123456788泳道触摸板模拟按键时间显示屏幕(0---9999.99)8泳道指示灯复位开始成绩停止查询比赛比赛R39.5kV C CLS1SOUNDER12456U1:A 74LS4091012138U1:B74LS40硬件图中AN1~AN4 为控制按钮, 可实现以下所述的功能. AN1复位按钮按下可实现按键电平复位,使复位后程序计数器PC=0000H 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Protues仿真赛DA模块(DAC0832)实例程序(实现0到255八位二进制的模拟电压转换)#include "reg51.h"#define uchar unsigned char#define uint unsigned int#define out P1sbitdac_cs=P2^0;sbitdac_wr=P2^1;void main(){uchar i=0,k=100;while(1){out=i;dac_cs=0;dac_wr=0;dac_cs=1;dac_wr=1;i++;if(i>255)i=0;while(--k);}}ADC0804模块与红外测距传感器GP2D12实例程序(将红外测距显示的距离化成P1口的八位二进制)uint adc0804()//adc0804读取数据并送入P1口,read=1991/(read+3)-7为距离传感器的计算公式{wr = 0;read = P1;delayms(10);wr=1;delayms(10);read=1991/(read+3)-7;return read;}LCD1602模块初始化#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit LCD_RS=P2^0; //lcd1602数据、命令选择端sbit LCD_EN=P2^2; //lcd1602使能线void LCD_init(void) //LCD初始化{LCD_EN=0;write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x01);}void write_cmd(uchar com) //写命令到LCD{LCD_RS=0;P0=com;delayms(5);LCD_EN=1;delayms(5);LCD_EN=0;}void write_data(uchardat) //写显示数据到LCD {LCD_RS=1;P0=dat;delayms(5);LCD_EN=1;delayms(5);LCD_EN=0;}void LCD_pos(ucharx,uchar y) //显示地址{ ucharpos;switch(x){case 0:x=0x80;break;case 1:x=0xc0;break;}pos=x+y;write_cmd(pos);}DS18B20温度传感器程序/*--------------精确延时5us子程序---------*/ void delay5(uchar n){do{_nop_();_nop_();_nop_();n--;}while(n);}/*--------------初始化函数--------------------*/ void init_ds18b20(void){uchar x=0;DQ =0;delay5(120);DQ =1;delay5(16);delay5(80);}/*--------------读取一字节函数----------------*/ ucharreadbyte(void){uchar i=0;uchar date=0;for (i=8;i>0;i--){DQ =0;delay5(1);DQ =1; //15微秒内拉释放总线date>>=1;if(DQ)date|=0x80;delay5(11);}return(date);}/*--------------写一字节函数------------------*/ voidwritebyte(uchardat){uchar i=0;for(i=8;i>0;i--){DQ =0;DQ =dat&0x01;//写"1" 在15微秒内拉低delay5(12); //写"0" 拉低60微秒DQ = 1;dat>>=1;delay5(5);}}/*--------------读取温度函数------------------*/ ucharretemp(void){uchara,b,tt;uint t;init_ds18b20();writebyte(0xCC);writebyte(0x44);init_ds18b20();writebyte(0xCC);writebyte(0xBE);a=readbyte();b=readbyte();t=b;t<<=8;t=t|a;tt=t*0.0625;return(tt);}定时器简单仿真与程序(控制P1^0口输出10Hz到2KHz的可调方波)void timer0() interrupt 1{TH0=X1;TL0=X2;OUTPUT=~OUTPUT;}void int0_ser(void) interrupt 0{FREQ=FREQ+10;X1=(uint)(65536-(double)(500000/(1.020*FREQ)))/256; //定时器初值计算X2=(uint)(65536-(double)(500000/(1.020*FREQ)))%256;TR0=1;}void int1_ser(void) interrupt 2{FREQ=FREQ-10;X1=(uint)(65536-(double)(500000/(1.020*FREQ)))/256; //定时器初值计算X2=(uint)(65536-(double)(500000/(1.020*FREQ)))%256;TR0=1;}//----------------------------------------------------------------------------------- //函数名:main();//函数功能:主函数入口;//------------------------------------------------------------------------------------ int main(){OUTPUT = 1;FREQ=10;TMOD=0X01;TR0=1;X1=(uint)(65536-(double)(500000/(1.020*FREQ)))/256; //定时器初值计算公式X2=(uint)(65536-(double)(500000/(1.020*FREQ)))%256;EX0=1;EX1=1;IT0=1;IT1=1;ET0=1;EA=1;LCD_init();string(0x80,"Have a nice day!");string(0xC0," Proteus VSM");delay(100);write_command(0x01);delay(100);while(1){delay(1000);write_command(0x80);string(0x80,"Frequency:");write_command(0x80+10);write_data(0x30+FREQ/1000);write_data(0x30+FREQ%1000/100);write_data(0x30+FREQ%1000%100/10);write_data(0x30+FREQ%1000%100%10/1); }}IO口开关实验main(){ucharkey_s,key_v;key_v = 0x03;LED = 0xfe;while(1){key_s = scan_key();if(key_s != key_v){delayms(10);key_s = scan_key();if(key_s != key_v){key_v = key_s;proc_key(key_v);}}}}ucharscan_key() {ucharkey_s;key_s = 0x00;key_s |= K2;key_s<<= 1;key_s |= K1;returnkey_s;}voidproc_key(ucharkey_v) {if((key_v& 0x01) == 0){LED = _cror_(LED,1);}else if((key_v& 0x02) == 0){LED = _crol_(LED, 1);}}LCD12864显示屏程序#define lcdrow 0xc0//设置起始行#define lcdpage 0xb8//设置起始页#define lcdcolumn 0x40//设置起始列#define c_page_max 0x08//页数最大值#define c_column_max 0x40//列数最大值//端口定义#define bus P0sbitrst=P2^0;sbit e=P2^2;sbitrw=P2^3;sbitrs=P2^4;sbit cs1=P2^5;sbit cs2=P2^6;//函数申明void delayms(uint); //延时n msvoid delayus10(void);//延时10usvoid select(uchar); //选择屏幕void send_cmd(uchar); //写命令void send_data(uchar); //写数据void clear_screen(void);//清屏void initial(void); //LCD初始化void display_zf(uchar,uchar,uchar,uchar); //显示字符void display_hz(uchar,uchar,uchar,uchar); //显示汉字void display(void); //在LCD上显示void main(){initial();display();clear_screen();display();while(1);}//延时10usvoid delayus10(void){uchar i=5;while(--i);}//延时10msvoid delayms(uint j){uchar i=250;for(;j>0;j--){ while(--i); i=249;while(--i);i=250;}}//屏幕选择-cs=0选择双屏,cs=1选择左半屏,cs=2选择右半屏void select(ucharcs){if(cs==0)cs1=1,cs2=1;else if(cs==1)cs1=1,cs2=0;else cs1=0,cs2=1;}//写命令void send_cmd(ucharcmd){rs=0;rw=0; bus=cmd;delayus10();e=1;e=0;}//写数据void send_data(uchardat){rs=1;rw=0; bus=dat;delayus10();e=1;e=0;}//清屏void clear_screen(void){ucharc_page,c_column;select(0);for(c_page=0;c_page<c_page_max;c_page++){send_cmd(c_page+lcdpage);send_cmd(lcdcolumn);for(c_column=0;c_column<c_column_max;c_column++) {send_data(0X00);}}}//LCD初始化void initial(void){select(0);rst=0;delayms(10);rst=1;clear_screen();send_cmd(lcdrow);send_cmd(lcdcolumn);send_cmd(lcdpage);send_cmd(0x3f);}//写字符//c_page为当前页,c_column为当前列,num为字符数,//offset为所取字符在显示缓冲区中的偏移单位voiddisplay_zf(ucharc_page,ucharc_column,ucharnum,uchar offset){uchar c1,c2,c3;for(c1=0;c1<num;c1++){for(c2=0;c2<2;c2++){for(c3=0;c3<8;c3++){send_cmd(lcdpage+c_page+c2);send_cmd(lcdcolumn+c_column+c1*8+c3);send_data(table_zf[(c1+offset)*16+c2*8+c3]);}}}}//写汉字//c_page为当前页,c_column为当前列,num为字符数,//offset为所取汉字在显示缓冲区中的偏移单位voiddisplay_hz(ucharc_page,ucharc_column,ucharnum,uchar offset){uchar c1,c2,c3;for(c1=0;c1<num;c1++){for(c2=0;c2<2;c2++){for(c3=0;c3<16;c3++){send_cmd(lcdpage+c_page+c2);send_cmd(lcdcolumn+c_column+c1*16+c3);send_data(table_hz[(c1+offset)*32+c2*16+c3]);}}}}//在LCD上显示void display(void) {select(1);display_zf(0,40,3,0); display_hz(2,0,4,0); display_hz(4,32,2,8); select(2);display_zf(0,0,4,3); display_hz(2,0,4,4); display_hz(4,0,2,10); }DHT11程序#include<reg52.h>#include<Time_Delay.h> sbit bit11=P2^0;unsignedcharU8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8check data;float F16T,F16RH; //用于最终读取的温湿度数据// read 8 bits onicechar COM(void){char i,U8temp,U8comdata;for(i=0;i<8;i++){while(!bit11);//表示读取的高电位延时大于20多us 则读取的是1 否则读取0Delay_us(35); //通过U8FLAG 可判断 bit11 显示数据的脉长U8temp=0;if(bit11)U8temp=1;while(bit11);U8comdata<<=1;U8comdata|=U8temp; //0}//rofreturn U8comdata;}//--------------------------------//-----温湿度读取子程序------------//--------------------------------//----以下变量均为全局变量--------//----温度高8位== U8T_data_H------//----温度低8位== U8T_data_L------//----湿度高8位== U8RH_data_H-----//----湿度低8位== U8RH_data_L-----//----校验8位== U8checkdata-----//----调用相关子程序如下----------//---- Delay();, Delay_10us();,COM();//--------------------------------void getDHT11(void){//主机拉低18msGO1: bit11=0;Delay_ms(20);bit11=1;//总线由上拉电阻拉高主机延时20usDelay_us(60);//主机设为输入判断从机响应信号// bit11=1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行if(!bit11) //T !{while(!bit11); //wait DHT goto highwhile(bit11);//数据接收状态U8RH_data_H=COM();U8RH_data_L=COM();U8T_data_H=COM();U8T_data_L=COM();U8checkdata=COM();bit11=1;//数据校验if((U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata) //if check wrong,read againgoto GO1;}F16T=U8T_data_H+(float)U8T_data_L/256; //change integer to float F16RH=U8RH_data_H+(float)U8RH_data_L/256;}void Delay_ms(unsigned int n)//n毫秒延时{unsigned char j;while(n--){for(j=0;j<125;j++);}}void Delay_us(unsigned char n) //N us延时函数精度±4us{n=n/2;while(--n);}复位电路晶振电路。

相关文档
最新文档