Protues仿真赛 仿真模块和程序代码
protues编程及运行方法

protues编程及运行方法
Proteus是一款强大的电路仿真软件,它支持多种编程语言,包括汇编、C 和C++等。
以下是使用Proteus进行编程和运行的基本步骤:
1. 打开Proteus软件,创建一个新的工程。
2. 在工程中添加所需的元件和电路。
您可以使用Proteus提供的元件库,也可以自己创建元件。
3. 编写程序代码。
您可以使用汇编、C或C++等语言编写代码,并将代码添加到工程中。
4. 配置仿真参数。
您可以选择仿真速度、仿真精度等参数,并设置输入信号和观察点。
5. 运行仿真。
单击“运行”按钮,Proteus将开始仿真,并在仿真过程中显示结果。
6. 分析仿真结果。
您可以查看仿真波形、数据等,并根据需要调整代码或电路。
需要注意的是,使用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-仿真实例

/* 主程序 */
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仿真,最后都出现了一些奇怪的问题,有的根本没法读取数据,有的数据有错误。
当参考电压为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语言实例(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软件中,您可以创建新项目来开始您的电路仿真工作。
点击菜单栏中的“File”选项,选择“New Project”来创建一个新项目。
然后输入项目的名称并选择保存路径。
第三步:添加元件在PROTEUS软件中,您可以通过“Library”选项来选择各种电子元件,包括电阻、电容、电压源等。
点击“Library”选项,选择您需要的元件并将其拖动到工作区中。
连接元件之间的引脚以搭建电路。
第四步:设置仿真参数在搭建完电路后,您需要设置仿真参数。
点击菜单栏中的“Graph”选项,选择“Set Simulator Parameters”来设置仿真参数,包括仿真时间、步长等。
您还可以设置输出波形的显示格式和范围。
第五步:运行仿真设置好仿真参数后,点击菜单栏中的“Simulate”选项,选择“Run”来运行仿真。
PROTEUS将模拟您搭建的电路,并显示仿真结果。
您可以查看电压、电流等参数,并分析电路的工作情况。
第六步:调试电路在仿真过程中,您可能会发现电路存在问题,比如输出波形不符合预期,电流过大等。
您可以通过调试电路来解决这些问题。
尝试更改元件参数、连接方式等,并重新运行仿真来检查效果。
第七步:保存和导出仿真结果在完成仿真后,您可以保存仿真结果并导出到其他格式。
点击菜单栏中的“File”选项,选择“Save As”来保存仿真文件。
您还可以导出波形图、数据表等结果,以便后续分析和报告。
总结:本教程介绍了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实例

《单片机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此后变红灯,东西向变绿灯,如此重复。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);}复位电路晶振电路。