51单片机仿真实例

合集下载

基于Proteus的51单片机的动态仿真

基于Proteus的51单片机的动态仿真

煤量指令同煤质的乘积代表折算为标准煤质的煤量指令, 或煤量 经延时折算进入炉内的煤量, 两者经大选形成总风量指令。
FTAF = f9 [MAX (M Z DM , M Z DELA Y (M ) ]
( 23)
式中, FPAP 、FPAF 、FTAF 分别为一 次风压、一 次风量、总风量 自动
设定值; f7 ~ f9为多段 折线函数; M 为锅炉总给 煤量; DM 为锅
1 仿真原理
单从仿真 角 度 来看, P ro teus 除 具有 基 本 仿 真功 能 之 外。 还具有两个独特 之处: 一 是对动 态元 件的 实时 仿真, 即 # 人机 交互 ∃的仿真; 二 是虚拟 仪表 箱的 功能, 能 对电 路及 各元 器件 参数进行实时测量, 增加了系统真实性。 1. 1 实时动态仿真
∀ 经验交流 ∀
4 2MW /m in, 负荷动态偏差为 [ 2. 6, - 4. 4] MW, 负荷稳 态偏差 为 [ 1. 7, - 0. 3]MW, AGC 响应 迟延 时间 为 10 秒, 主 汽压 力的 动态偏差为 [ 0. 6, - 0. 5]M P a, 稳态偏差为 [ 0. 2, 0 2] M P a。
关键词: 单片机; 元件库; 实时; 动态; 仿真 中图分类号: TP36 文献标识码: B
On dynam ic sim u lation of 51 simp le ch ip
computers by proteus
W ANG Yu ye ( Anhui Vocationa l and T echn ica l College, H efei 230051, China )
89 92. [ 8 ] 陈文敏. 煤的发 热量 和计 算公 式 [ M ]. 北京: 煤炭 工业 出版

51单片机密码锁仿真C程序

51单片机密码锁仿真C程序

#include<reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbitjdq=P3^0;ucharcount,buf[6],pw[6];uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; delay(unsigned int j){while(j--);}init() //清缓存子函数{pw[0]=pw[1]=pw[2]=pw[3]=pw[4]=pw[5]=10;count=0;}display() //数码显示子函数{unsigned char i,wk=0xfb;buf[0]=tab[pw[0]];buf[1]=tab[pw[1]];buf[2]=tab[pw[2]];buf[3]=tab[pw[3]];buf[4]=tab[pw[4]];buf[5]=tab[pw[5]];for (i=0;i<=5;i++){P3=P3|0xfc; //熄灭所有数码管并使最低2位保持不变P2=buf[i]; //依次输出段码P3=P3&wk; //输出位控并使最低2位保持不变delay(100); //延时wk=_crol_(wk,1); //位控左移一位P3=P3|0xfc; //熄灭所有数码管}}ucharkeypress() //按键处理子函数{unsigned char temp,num;num=15;temp=0xff;P1=0xf0;if (P1!=0xf0) //判断是否有按键按下{delay(300); //延时去抖if (P1!=0xf0) //再次判断是否有按键按下{P1=0xf0; //行作输出,列作输入temp=P1; //读取列值P1=0x0f; //列作输出,行作输入temp=temp|P1; //读取行值并和列值合并switch (temp){case 0xee:num=1; break;case 0xde:num=2; break;case 0xbe:num=3; break;case 0xed:num=4; break;case 0xdd:num=5; break;case 0xbd:num=6; break;case 0xeb:num=7; break;case 0xdb:num=8; break;case 0xbb:num=9; break;case 0xe7:num=0; break;case 0xd7:num=10; break;case 0xb7:num=11; break;}P1=0xf0;while (P1!=0xf0)display();}}returnnum;}button(){ucharkeyNum;keyNum=keypress(); //返回按键号,带返回值的函数的应用if (keyNum<10) //按下的是数字键{count++;if (count<7) //按键次数少于6次{pw[5]=pw[4]; //按下数字键后,将数字存入pw[0],而pw[4]=pw[3]; //将pw[i](i=0、1、2、3、4)中的数pw[3]=pw[2]; //依次送入pw[i+1]中,实现数码管上显示pw[2]=pw[1]; //的数字逐个左移的效果pw[1]=pw[0];pw[0]=keyNum;}}else{if (keyNum==10) //按下的是清除键{init(); //数码管清屏}if (keyNum==11) //按下的是确定键{if(pw[0]==6&&pw[1]==5&&pw[2]==4&&pw[3]==3&&pw[4]==2&&pw[5]==1) {jdq=0; //继电器吸合,开锁delay(50000);jdq=1;}init(); //数码管清屏}}}int main() //主程序{init(); //初始化程序while(1){display();button();}}。

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仿真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单片机仿真实例九、51单片机的最小工作系统

基于proteus的51单片机仿真实例九、51单片机的最小工作系统

基于proteus的51单片机仿真实例九、51单片机的最小工作系统1、前面我们已经利用proteus和keil c51建立了第一个仿真实例,并通过仿真运行验证了我们的实例的正确性。

现在我们已经了解了proteus和keil c51的基本操作。

2、但是毕竟是初学单片机,对于我们前面编写的程序所实现的功能可就是一头雾水,不知所云了。

那么接下来我们就了解一下51单片机的知识吧3、先来简单说说怎么学习单片机。

前面已经说过,单片机是一种软件和硬件紧密结合的技术,对于一个单片机应用系统来说,硬件电路是单片机系统运行的基础和保障,软件程序是单片机系统的灵魂。

相对于人来说,人的身体、四肢是一个硬件系统,大脑就是软件系统,只有通过大脑发出指令,身体的各个部分才会做出相应的动作,但是如果手被绑住了,大脑即使发出让手去拿一个杯子的指令,手也无法完成这个指令。

所以软件和硬件需要相互结合才能够去完成一项任务。

1)就像我们新买了一台电视机一样,买回来后我们会首先了解一下这个电视机的功能特点,看一下遥控器的说明书,给电视机加上电源和天线(或有线电视信号线),然后按照说明书的使用方法来一步一步熟悉和操作电视机。

单片机的学习也一样,我们接触到一种单片机后,首先要了解这种单片机的功能和性能特点,然后才能进行相应的开发设计。

怎么来了解一种单片机呢?单片机厂家提供的数据手册是第一手也是最准确的资料。

但是很多数据手册是英文的,对于我们很多人来说,看起来会比较吃力。

不过幸运的是,现在很多资料都已经被翻译过来了。

我们到网上搜索一下,会搜索到很多的中文数据手册和应用实例,所以网络现在已经成为我们学习的一个非常重要的工具和平台了。

2)单片机的结构是十分复杂的,我们打开一个单片机的数据手册,会发现前面里面到处充斥着结构图和理论知识的介绍,相信对于一个新手来说,看数据手册不到10分钟就想放弃。

但是很多人说,这些是最基础的,必须要理解和掌握。

确实,这些东西我们必须精通,但是是不是一开始就要完全精通这些呢?大可不必。

基于proteus的51单片机仿真实例六十四

基于proteus的51单片机仿真实例六十四

基于proteus的51单片机仿真实例六十四、字符液晶LCD1602显示字符串实例标签: proteus单片机实例液晶字符2010-02-20 00:121、本例用1602液晶循环右移显示一串字符串。

显示模式设置如下1)16*2显示,5*7点阵,8位数据接口2)开显示,有光标且光标闪烁3)光标右移,字符不移动2、由于一次只能向液晶写入一个字符,因此如果需要显示字符串的话,需要用到指针或者字符串数组,然后再设置一个循环,从第一个字符开始写入液晶,直到写到字符串结束标志“\0”为止。

字符显示地址的确定:由于1602液晶在第一个地址显示完毕后,能够自动指向先一个地址,因此只需要指定字符串的第一个字符显示的地址即可,3、在keil c51中新建工程ex52,编写如下程序代码,编译并生成ex52.hex文件//LCD1602.C//液晶控制与显示程序#include <reg51.h>#include <intrins.h>sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚//延时函数void delayms(unsigned int ms){unsigned char i;while(ms--){for(i = 0;i < 120;i++);}}//忙检测函数unsigned char busy_check(void){unsigned char LCD_Status; //定义忙状态变量RS = 0; //RW = 1;EN = 1;delayms(1);LCD_Status = P0; //读取忙状态EN = 0;return LCD_Status; //返回忙状态}//写命令void write_LCD_Command(unsigned char cmd){while((busy_check() & 0x80) == 0x80); //等待忙状态结束 RS = 0;RW = 0;EN = 0;P0 = cmd;EN = 1;delayms(1);EN = 0;}//写数据void write_LCD_data(unsigned char dat){while((busy_check() & 0x80) == 0x80);RS = 1;RW = 0;EN = 0;P0 = dat;EN = 1;delayms(1);EN = 0;}//初始化void init_LCD(void){write_LCD_Command(0x38); //显示模式设置 delayms(1);write_LCD_Command(0x01); //清屏delayms(1);write_LCD_Command(0x06); //字符进入模式:屏幕不动,字符后移delayms(1);write_LCD_Command(0x0c); //显示开,关光标delayms(1);}//显示字符串void ShowString(unsigned char x,unsigned char y,unsigned char *str) {unsigned char i = 0;//设置起始位置if(y == 0){write_LCD_Command(0x80 | x);}if(y == 1){write_LCD_Command(0xc0 | x);}//输出字符串for(i = 0; i < 16;i++){write_LCD_data(str[i]);}}4、在proteus中新建仿真文件ex52.dsn,电路原理图如下所示5、将ex52.hex文件载入at89c51中,启动仿真,观察运行结果。

基于proteus的51单片机仿真实例八十一、实时时钟芯片DS1302应用

基于proteus的51单片机仿真实例八十一、实时时钟芯片DS1302应用

基于proteus的51单片机仿真实例八十一、实时时钟芯片DS1302应用实例标签: proteus单片机芯片时钟实例2010-02-25 16:561、DS1302引脚排列:如下图引脚说明:1)Vcc1:后备电源,VCC2:主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

2)X1、X2:振荡源,外接32.768kHz 晶振。

3)RST:复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc>2.0V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

4)I/O为串行数据输入输出端(双向)。

5)SCLK为时钟输入端。

2、 DS1302的控制字节DS1302 的控制字如下图所示。

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

3、数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见数据手册。

基于proteus的51单片机仿真实例八十三-PROTEUS技术交流区-PROTE...

基于proteus的51单片机仿真实例八十三-PROTEUS技术交流区-PROTE...

基于proteus的51单片机仿真实例八十三-PROTEUS技术交流区-PROTE...proteus, 单片机, 实例, 仿真1、SPI总线器件与单片机的连接需要3跟线:时钟线SCK,数据线MOSI(主机发送,从机接收)和MISO(主机接收,从机发送)。

X5045是一种集合了看门狗、电压监控和串行EEPROM三种功能于一身的器件。

上电复位功能:在系统上电时产生一个足够长时间的复位信号,以确保单片机正常工作前,系统电路已处于稳定状态。

看门狗功能:如果在规定的时间内单片机没有在CS引脚产生规定的电平变化(喂狗信号),芯片内的看门狗电路将产生复位信号。

利用该功能,可让单片机死机后自动复位并开始工作。

电压检测:当电源电压下降到一定的值后,虽然单片机仍能工作,但可能已经不能稳定工作了,此时X5045将产生复位信号,直到电压恢复正常后,才能正常工作。

串行EEPROM:X5045自带512字节的数据存储空间,数据可掉电保存。

2、x5045的引脚及功能CS/WDI:片选输入端。

低电平时选中该芯片SO:串行数据输出端,数据在sck的下降沿输出WP:写保护端,该脚接地,写操作被禁止,接高电平,所有功能正常VSS:电源地SI:串行数据输入端,数据在sck的上升沿写入(高位在前)SCK:串行时钟端,RESET:复位输出端,用于电源监测和看门狗超时输出VCC:电源3、使用方法1)上电复位:当器件通电并超过规定值时,X5045内部的复位电路将会产生一个约200ms的复位脉冲,使单片机正常复位。

2)电压检测:工作过程中,X5045能不断检测VCC端的电压,在电压下降到一定值后,将产生一个复位脉冲,使单片机停止工作,这个复位脉冲一直有效,直到VCC下降到1V以下,整个系统停止工作。

如果VCC在下降后又升高,则当超过规定值后200ms,复位信号消失,单片机可以继续工作。

3)看门狗定时器:看门狗定时器电路通过检测WDI端的输入来判断单片机工作是否正常,在规定的时间内,单片机必须在WDI端口产生一个由高到低的电平变化。

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

51单片机仿真实例
l示例6&mdash;扫描与判断&mdash;(单端口)位扫描与字节(多端口)扫描
这是一个常用程序段&mdash;子程序&mdash;标准程序,
通过端口扫描而获得输入数据或控制输出数据,达到节
省位或字节的目的&mdash;节约硬件资源。

关于扫描,可以从位及其取反实现流水灯着手来理解。

可以通过移位实现流水灯&mdash;扫描。

可以通过字节数据(01H,02H,04H,08H,10H,20H,40H,80H&mdash;阳极管)的端口发送实现流水灯&mdash;扫描。

可以通过数据表(DB01H,02H,04H,08H,10H,20H,40H,80H&mdash;阴极管)实现流水灯&mdash;扫描。

可以通过循环跳转实现流水灯&mdash;扫描。

扫描注意入比出查&mdash;获得输入要比
较数据、发送输出要检查出口
扫描获取端口字节
扫描输出位移动产生动态效果(01、02、04、08、10、20、40、80),可以用字节表
扫描输出字符字节,通过延时可以变换字符以便造成数
字进位效果
ORG 0000H
START:
dbufequ30h;置存储区首址tempequ40h;置缓冲区首址org 00h
mov 30h,#2 ;存入数据mov 31h,#0
mov 32h,#1
mov 33h,#0
mov 34h,#7
mov 35h,#1
mov r0,#dbuf
mov r1,#temp
mov r2,#6;六位显示器
mov dptr,#segtab ;段码表首地址dp00:mov a,@r0
;取要显示的数据
movc a,@a+dptr ;查表取段码mov @r1,a;段码暂存
inc r1
inc r0
djnz r2,dp00
disp0:mov r0,#temp;显示子程序mov r1,#6;扫描6次
mov r2,#01h;从第一位开始
dp01:mov a,@r0
mov p2,a;段码输出
mov a,r2 ;取位码
mov p1,a;位码输出
acall delay;调用延时
mov a,r2
rl a
mov r2,a
inc r0
djnz r1,dp01
sjmp disp0
segtab:db 0C0H,0F9H,0A4H,0B0H,99H,92H;共阳极管
db 82H,0F8H,80H,90H,88H,88H,83H
delay:mov r4,#29h;延时子程序
aa1:mov r5,0ffh
aa:djnz r5,aa
djnz r4,aa1
ret
end
************************************************* ***********************
还可以用其他程序形式进行扫描,像循环、递增或递减判断程序等。

扫描技术可以用于点阵显示,液晶板(LCD)显示。

这些都需要字符编码、显示延时、扫描端口以充分利用资源(节约资源)。

l实例1&mdash;关于动态显示&mdash;LED闪烁
ORG 0000H
START:
MOVA,#0FFH;字节传送
MOVP3,A;字节传送
MOVP1,A
MOV C, 0A0H;位传送
JNB0A0H,GUAN;判断位电平低为真,则转移;直接地址
位为0转移
MOVP1,#00H;P1口先赋#0FFH,再赋#00H,则产生闪烁RET
GUAN :
MOVP3,#00H;P3口先赋#0FFH,再赋#00H,则产生闪烁,也可以使用取反指令
RET;可以产生闪烁效果
END
其他方法(如:延时子程序)也可以实现动态显示。

l实例2&mdash;单个LED灯-单个按键的仿真
ORG0000H;这是伪指令,机器并不执行,用于程序的交流。

指令执行的起始地址,十进制用D表示,十六进制
用H表示,二进制用B表示。

一个字节(8位机、16位机、32位机、64位机)一次执行。

也可以按位来执行,也就是一个bit。

ORG00000000B与ORG0000H作用相同。

注意8位(bit)
一个字节。

16位的处理器需要用0000 0000H表示。

16
或32位以上,使用操作系统(Wince、Linux等)更有效,可以利用大量的、底层的、专业化、标准化的面向控制
的库函数(如:API等)。

START:;这是伪指令,机器并不执行。

只是为了汇编语
言讲故事的可理解性
MAIN:
;伪指令,主程序,用于区别子程序
PC&rarr;MOVA,#00H;将立即数00000000B(常数0D)
传送给累加器ACC(专用寄存器,可用于存放计算结果等)。

要通过累加器A和其它存储地址进行数据交换。

注意PC是自动移位(自动+1)到下一个语句的地址。

使用该语句实质上是让PC具有初始位置。

PC&rarr;MOVP1,A;将累加器中的数(常数0D)传送给端
口P1(P1口8位全部置0,低电平,P1端口各位处于关闭状态,LED灯处于系统响应的准备状态),按字节传送数据。

特别记忆:PC&rarr;表示指针所指地址,并会自
动加1。

PC&rarr;MOVC,0A0H;检测P2.0口的状态,将P2.0口的状态(由按键状态决定)传送给位累加器C,位累加器C 的地址是PSW(程序状态字寄存器)的进位标志位
CY(D7H\PSW.7)。

P2.0口可以是开或关,也就是置1或0,高电平或低电平),按字节传送数据。

要通过位累加器C 和其它存储地址进行数据交换。

该语句也可以写成:MOVC,P2.0,比较字节数据传送MOVA,#00H或MOVA,P1。

PC&rarr;MOVP1.0,C;等价于MOV90H,C;将位累加器C 地址中的值传送给P1.0口(90H是其直接地址),也就
是将P2.0口的状态(由直接地址0A0H状态决定)传送给直接地址90H,P1.0口
PC&rarr;MOVP1.1,C ;等价于MOV91H,C
PC&rarr;MOVP1.2,C ;等价于MOV92H,C
PC&rarr;MOVP1.3,C ;等价于MOV93H,C等等END;伪指令,程序结束标志
l实例3&mdash;扫描实现数字移动变化的仿真l实例4&mdash;双数码管双端口数字进位仿真
l实例5&mdash;双四数码管组双端口数字显示&mdash;单端口扫描移动仿真&mdash;点阵
双四数码管组双端口数字显示&mdash;单端口扫描移动仿真,可以被分解为
a)双四数码管组双端口数字显示&mdash;单端口无扫描无移动&mdash;>;数字变化(依靠数表和指针),
b)双四数码管组双端口数字显示&mdash;单端口扫描移动&mdash;>;数字不变化(依靠数表和指针),
c)双四数码管组双端口数字显示&mdash;单端口扫描移动&mdash;>;数字变化(依靠数表和指针),。

相关文档
最新文档