用80c196kb单片机机80c51与7seg-mpx4cc构成仿真999秒倒计时,求程序

用PROTEUS对单片机进行仿真的方法与实例
我的图书馆
用PROTEUS对单片机进行仿真的方法与实例
Proteus软件是英国Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计; ISIS模块用来完成电路原理图的布图和仿真。它可以进行模拟电路仿真、数字电路仿真,也可以进行单片机及其外围电路组成的系统的仿真;软件提供了各种虚拟仪器,如示波器、逻辑分析仪、信号发生器、电压表、电流表等。和其它仿真软件相比,Proteus ISIS最大特色是对单片机系统的仿真,目前支持的单片机类型有: 68000系列、8051系列、ARM系列、AVR系列、PIC系列、Z80系列、HC11系列等。本文主要介绍Proteus软件在单片机方面的仿真功能,即ISIS模块的用法。
&&& 在单片机学习开发的过程中,程序的调试是一个很重要的环节,要安装电路进行实验,而且电路在调试过程中往往要进行调整和改变,这不紧增加了费用和难度,而且也影响了学习和开发的进度,这也成了一些初学者学习的障碍。如果使用Proteus 软件就可以大大节省时间和开发费用,可以在软件仿真通过后再制作印刷电路板进行电路实验。
一、Proteus ISIS软件的工作环境和一些基本使用方法
&& 下面通过一个流水灯的实例来说明Proteus的基本使用方法,使用的软件版本是Proteus.Professional 7.1 SP2。
&&& 流水灯使用AT89C51单片机,用P2口作输出口。先在Keil uVision编译器中输入下列程序:
#include &reg51.h&
void Delay1ms(unsigned int count)//延时子程序
&& unsigned int i,j;
&& for(i=0;i&i++)
&& for(j=0;j&120;j++);
main() //主程序
&& unsigned char LEDIndex = 0;
&& bit LEDDirection = 1;
&& while(1)
&&&&& if(LEDDirection)
&&&&&&&&& P2 = ~(0x01&&LEDIndex);
&&&&& else
&&&&&&&&& P2 = ~(0x80&&LEDIndex);
&&&&& if(LEDIndex==7)
&&&&&&&&& LEDDirection = !LEDD
&&&&& LEDIndex = (LEDIndex+1)%8;
&&&&& Delay1ms(200);
将上述程序编译生成目标文件LED.hex。
然后按下列步骤进行:
1.&&& 运行Proteus 7 Professional(ISIS 7 Professional)
出现如图1所示的界面:
&&&& 这是一种标准的Windows界面,包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
2.添加元件到对象选择器元件列表中
&&& 单击绘图工具栏中的按钮,再单击对象选择按钮P,出现挑选元件对话框,见图2。按表1添加本例所用的元件。
种类(Category)
子种类(Sub-category)
Microprocessor ICs
8051 Family
Switches & Relays
Capacitors
电解电容器
Capacitors
发光二极管
Optoelectronics
Miscellaneous
&&& 如果一开始对种类不熟悉,可直接在对话框的KEYWORDS中输入元件的名称如AT89C51、CAP等,就可以直接找到所需的元件,如图3。
&&& 添加好元件的对象选择器元件列表见图4。
&&& 3.放置元件
&&& 在元件列表中左键选取AT89C51,在原理图编辑窗口中适当的位置单击左键,这样AT89C51就被放到原理图编辑窗口中了,同样放置其它元件。两次右击可以删除放置的元件,右击选中元件后按方向控制按钮可改变元件的方向。右击选中元件后再按住左键可移动元件位置。
&&& 4.放置“地”、“电源”
&&& 添加“地”:左键选择模型选择工具栏中的 图标,在图5中左键选择
GROUND,并在原理图编辑窗口中左击,这样“地”就被放置到原理图编辑窗口中了。
同样地,选择POWER可放置“电源”。
&&& 5.编辑元件的属性
&&& 右击选元件后再左击即可编辑元件的属性,也可以右击后在快捷菜单中选择命令Edit Prorerties。如R1的属性窗口如图6。
&&& 在对AT89C51的属性进行编辑时要加入仿真文件,在Program File中单击出现文件浏览对话框,找出LED.hex文件,单击确定完成添加文件,单击OK退出。
&&& 在要连线的一个点左击,移动鼠标到到另一个点再左击即可画好一条连线,按 放置导线连接结点,画好连线的仿真电路图见图7。
&&& AT89C51的VSS、VDD不需要连线,默认VSS=0V、VDD=+5V、GND=0V。
&&& 7.仿真
&&& 单击仿真进程控制按钮中的开始仿真,我们可看到发光二极管分别按两个方向依次点亮。输出端的小方点红色代表高点平,蓝色代表低电平,灰色代表不确定电平。
在仿真时单片机的晶振电路和复位电路可以省略不画,时钟频率可以在AT89C51的属性中设置,默认值为12MHz。
对于设计好的文件可以保存以便下次调用。
&&& 二、单片机仿真实例
&&& 上面通过一个简单的例子介绍了Proteus ISIS的基本使用方法,下面再通过笔者设计的几个实例进一步介绍Proteus ISIS的使用方法和技巧,同时也能够使大家看到几个单片机应用的实例。
&&& 1.电感测试仪
电感测试仪以电感加上电压后电流增加的规律作为测量依据,因为电感加上电压后电流增加的速度与电感量相关,通过测量电流达到某一预定值所花的时间就能测量出电感的电感量。单片机使用AT89C2051,测量电路如图8所示,A为
AT89C2051内部构造的电压比较器,利用电压比较器测量电感中电流的变化,合上开关后电源电压E+ 加在电感LX和电阻R的串联回路上,这时回路中电流IL由零开始逐渐增加,在电阻R两端电压从0升到0.632E+的过程中,P3.6口输出为0,当电阻R两端电压一旦超过0.632E+后,P3.6口输出电平即变为1。以P3.6口的输出状态为依据,用AT89C2051内部的定时器T0对时间进行计数,再将计数结果显示出来即得出测量结果。量程可分为多档,采用两位半数码管显示,单位为mH。我们只要仿真其中的一档即可,这里取×10档进行仿真,即读数乘以10为实际电感量。
电感测试仪的源程序如下:
#include &reg51.h&
unsigned char j,m,n,t,DispBuf[3];
unsigned int L;
unsigned char code
BitTab[3]={0xdf,0xef,0xf7};//位驱动码
unsigned char code
DispTab[11]={0x41,0xcf,0x52,0x46,0xcc,0x64,0x60,0x4f,0x40,0x44,0xff};//字形码
sbit P1_2=P1^2;
sbit P3_6=P3^6;
void Delay1ms(unsigned int count) //延时程序
&&&&& for(n=0;n&n++)
&&&&& for(m=0;m&250;m++);
void main()& //主程序
{&&& TMOD=0x01;//定时器T0方式1&
&&&&& while(1)& //无限循环
&&&&& t=BitTab[j];//取位值
&&&&& P1=P1|0x38;//P1.3-P1.5送1
&&&&& P1=P1&t;&& //P1.3-P1.5输出取出的位值
&&&&& t=DispBuf[j];//取出待显示的数
&&&&& t=DispTab[t];//取字形码
&&&&& P3=t; //字型码由P3输出显示
&&&&& Delay1ms(5);
&&&&& j++;& //j作为数码管的计数器,取值0-2,显示程序通过它确认显示哪个数码管
&&&&& if(j==3)
&&&&& j=0;
&&&&& TH0=0;
&&&&& TL0=0;
&&&&& P1_2=0;//测试开始
&&&&& TR0=1; //开定时器T0
&&&&& for(;P3_6==0;);//判断电阻上的电压上升到参考电压否&&&&&&&
&&&&& TR0=0;//电压达到参考电压,关定时器T0
&&&&& P1_2=1;
&& L=TL0|(TH0&&8);//取定时器T0中的数值
&&&&& L=L-3;
&&&&& if(L&=200)
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& DispBuf[2]=10;
&&&&&&&&&&&&&&&&&&& DispBuf[1]=10;
&&&&&&&&&&&&&&&&&&& DispBuf[0]=1;& //超量程,百位数显示1,个位、十位不显示(灭)
&&&&&&&&&&&& }
&&&&& else& //不超量程,取各位数值
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& DispBuf[2]=L;//取个位数
&&&&&&&&&&&&&&&&&&& L=L/10;
&&&&&&&&&&&&&&&&&&& DispBuf[1]=L;//取十位数
&&&&&&&&&&&&&&&&&&& DispBuf[0]=L/10;//取百位数
&&&&& &&& }
用Keil uVision将上述程序编译生成目标文件DGZS.hex。
电路中所使用的元件见表2。
种类(Category)
子种类(Sub-category)
Microprocessor ICs
8051 Family
可变电阻器
Transistors
4位共阴数码管
7SEG-MPX4-CA
Optoelectronics
7-Segment Displays
绘制好的仿真电路图如图9。图中添加示波器时,先左键选择模型选择工具
栏中的 图标,再选择OSCILLOSCOPE,并在原理图编辑窗口中左击,这样示波器就被放置到原理图中了。
由于AT89C2051的P1.0和P1.1是复用端口,除了作I/O口外,还有一个功能是作为电压比较器的输入端,P1.0为同相输入端,P1.1为反相输入端,这里作电压比较器的输入端使用,因此在设置AT89C2051的属性时要将其设置电压比较器的输入端,即Ehable Comparator选择Yes,如图10。
被测电感器的电感量定为1H。单击开始仿真,可变电阻RP1是用来校准测量值的,按动RP1的+或-按钮,调节RP1使数码管显示100。仿真结果见图10。电阻R2为换挡电阻,改变它的值即可改变挡位。
&&& 这是用PIC12F675单片机做的充电器,能对两节镍镉或镍氢电池充电,充电器采用电压监测的方法判断充电是否结束,充电结束后能自动停止充电。
图11是电路图,图中PIC12F675的7脚作模拟信号输入端AN0使用。单片
机使用内部时钟振荡器,引脚3作充电控制电压输出端GP4使用。S为复位开关,复位开关主要在重新放上电池后使用。
&&&&&& 接上电源后,PIC12F675的GP4输出低电平,三极管VT1饱和导通,两节电池开始充电。随着电池电压的上升,输入到单片机的模拟电压也不断升高,当电压大于预定的设定值3V时,GP4输出高电平使VT1截止,电池停止充电,并自锁在这一工作状态,即使电池在停止充电后电压略有下降也不会重新进行充电。
&&&&&& 在PIC单片机的MPLAB IDE编译器中输入下列程序:
#INCLUDE "P12F675.INC"
W_TEMP&&&& EQU&&&&& 20H
SW&&&&&&& EQU&&&&& 21H
TEMP&&& EQU&&&&& 22H
&&&&&&&&&&&&& ORG&&&&& 000H
MAIN&&& NOP
&&&&&&&&&&&&& MOVLW&&&&& 00H
&&&&&&&&&&&&& MOVWF&&&&& SW
&&&&&&&&&&&&& MOVLW&&&&& 95H
&&&&&&&&&&&&& MOVWF&&&&& TEMP
&&&&&&&&&&&&& BSF&&&&&&&&&&&&& STATUS,RP0
&&&&&&&&&&&&& MOVLW&&&&& B''
&&&&&&&&&&&&& MOVWF&&&&& TRISIO
&&&&&&&&&&&&& MOVLW&&&&& B''&&&&&&&
&&&&&& &&&&&& MOVWF &&& ANSEL
&&&&&&&&&&&&& MOVLW&&&&& B''&&&&&&&&
&&&&&&&&&&&&& MOVWF&&&&& OPTION_REG
&&&&&&&&&&&&& BCF&&&&&&&&&&&&& STATUS,RP0
&&&&&&&&&&&&& MOVLW &&& B''
&&&&&&&&&&&&& MOVWF&&&&& CMCON
&&&&&&&&&&&&& BCF&&&& GPIO,GP4
&&&&&&&&&&&&& BSF&&&& GPIO,GP5
LOOP&&& BTFSC&& SW,0
&&&&&&&&&&&&& GOTO&&& LOOP
&&&&&&&&&&&&& MOVLW&&&&& B''
&&&&&&&&&&&&& MOVWF&&&&& ADCON0
&&&&&&&&&&&&& BSF&&&&&&&&&&&&& ADCON0,GO
ADC&&&&&&&&&&&& BTFSS&& PIR1,ADIF
&&&&&&&&&&&&& GOTO&& ADC
&&&&&&&&&&&&& MOVF&& ADRESH,0
&&&&&&&&&&&&& SUBWF TEMP,0
&&&&&&&&&&&&& BTFSC& STATUS,C
&&&&&&&&&&&&& GOTO&& LOOP
&&&&&&&&&&&&& BSF&&&&&& GPIO,GP4
&&&&&&&&&&&&& BCF&&& GPIO,GP5
&&&&&&&&&&&&& BSF&&&&&& SW,0&&&&
&&&&&&&&&&&&& GOTO&& LOOP
&&&&&&& END
&&& 然后编译生成目标文件charger.hex。
&&& 对充电器仿真时有一个难点,就是Proteus元件库中没有可仿真的充电电池,它的电池元件加上充电电流后电压不会上升,为此可在电池上串一只可变电阻,这样改变可变电阻的大小就可以就可以改变充电回路两端的电压,用来模拟电池电压的变化。
电路中所使用的元件见表3。
种类(Category)
子种类(Sub-category)
Microprocessor ICs
PIC12 Family
可变电阻器
Transistors
Switches & Relays
发光二极管
Optoelectronics
Miscellaneous
绘制仿真电路图时添加直流电压表和上例中选择示波器类似,先左键选择模型选择工具栏中的 图标,再选择DC VOLTMETER即可。
&&& 将可变电阻器RP1滑动触点调到中点以下的位置单击 开始仿真,仿真结果见图12。
RP1的滑动触点向上调节,电压表的读数会逐渐上上升,当读数大于3V时,会停止充电,发光二极管VD1熄灭,电压表的读数恢复为2.5V,这时即使我们把RP1 滑动触点调到中点以下也不会重新充电,只有按一下复位键S1才会重新充电。
&&& 3. 电机调速控制器
&&& 直流电机的调速主要调整其工作电流,通常有两种方式:一种是在电机供电电路中串接一个可变电阻,通过改变可变电阻的阻值调节工作电流,从而调节转速;另一种方法是在直流电机上加直流脉冲电压,通过改变脉冲直流电的占空比来调节转速。前一种方法因为可变电阻上有压降要损耗功率,所以效率不高,只有用小功率直流电机时使用,后一种工作效率高,如目前的电动自行车都采用这种调速方式。
下面用AVR单片机ATmega8设计一个电机调速控制器,使其定时/计数器T/C1工作在PWM模式,作为PWM脉宽调制器。
在ICCAVR编译器中输入下列程序:
#include &iom8v.h&
#define uchar unsigned char&&&&&&&&&&&&&&&
&&&&&&&&&&
void DelayMs(char i)&&&&&&&&&&
&for(;i!=0;i--)
& {for(j=143;j!=0;j--);}
#pragma interrupt_handler INT_0:2
void INT_0(void)
&if(k!=250)
&OCR1A=k; //设置PWM参数
&DelayMs(100);
#pragma interrupt_handler INT_1:3
void INT_1(void)
&OCR1A=k; //设置PWM参数
&DelayMs(100);
void main(void)
&DDRD=0X00;&&&&&&&&&&&&&&&&
&PORTD=0 //设置PD口为带上拉电阻的输入口
&DDRB=0& //设置PB口为推挽1输出
&SREG=0x80;& //开全局中断
&GICR=0xc0;& //开外部中断
&TCCR1A=0xc1; //8位PWM,向上计数置位OC1A,向下计数清零OC1A
&TCCR1B=0x01; //时钟1分频,PWM信号频率为1M/512=2KHz
&OCR1A=k; //设置PWM参数
&while(1);
&&& 编译生成目标文件djts.hex。
电路中所使用的元件见表4。
种类(Category)
子种类(Sub-category)
Microprocessor ICs
AVR Family
Transistors
Switches & Relays
Miscellaneous
Electromechanical
&&& 绘制好仿真电路图,仿真结果见图13。
当按下S1时,PB1输出PWM信号占空比减小,电机速度减小;当按下S2时,PB1输出PWM信号占空比增加,电机速度增加。从示波器上可以看到PWM信号占空比在调节时的变化。
&&& 4. 智力竞赛抢答器
&&& 用单片机AT89C51做一个抢答器,供8组抢答,当主持人按一下开始键后即可开始抢答,当某一组按下抢答键后,其它各组的按键被锁定,主机上的数码管显示相应的组号,同时该组桌上的发光二极管也点亮,并发出1秒钟的报警声,数码管和发光二极管的显示时间为5秒钟。
&&& 在Keil uVision编译器中输入下列程序:
#include &reg51.h&
unsigned char n,i;
unsigned long int m,t;
sbit S1=P0^0;
sbit S2=P0^1;
sbit S3=P0^2;
sbit S4=P0^3;
sbit S5=P0^4;
sbit S6=P0^5;
sbit S7=P0^6;
sbit S8=P0^7;
sbit VD1=P1^0;
sbit VD2=P1^1;
sbit VD3=P1^2;
sbit VD4=P1^3;
sbit VD5=P1^4;
sbit VD6=P1^5;
sbit VD7=P1^6;
sbit VD8=P1^7;
sbit SOUND=P3^0;
sbit START=P3^1;
void delay(t) //延时子程序
& for(;t&0;t--)
& {&&& for(i=0;i&250;i++);& }
void main() //主程序
& while(1) //无限循环
&& if(START==0)//若开始键按下
&& & while(n==0)//若n=0,循环执行
&&&&&& if(S1==0)//若S1按下
&&&&&& & {VD1=0;P2=0x79;n=1;} //发光二极管VD1点亮,数码管显示1
&&&&&& else if(S2==0)&&&&&&&& //若S2按下
&&&&&& & {VD2=0;P2=0x24;n=1;}& //发光二极管VD2点亮,数码管显示2
&&&&&& else if(S3==0)&&&&&&&& //若S3按下
&&&&&& & {VD3=0;P2=0x30;n=1;}& //发光二极管VD3点亮,数码管显示3
&&&&&& else if(S4==0)&&&&&&&& //若S4按下
&&&&&& & {VD4=0;P2=0x19;n=1;}& //发光二极管VD4点亮,数码管显示4
&&&&&& else if(S5==0)&&&&&&&& //若S5按下
&&&&&& & {VD5=0;P2=0x12;n=1;}& //发光二极管VD5点亮,数码管显示5
&&&&&& else if(S6==0)&&&&&&&& //若S6按下
&&&&&& & {VD6=0;P2=0x02;n=1;}& //发光二极管VD6点亮,数码管显示6
&&&&&& else if(S7==0)&&&&&&&& //若S7按下
&&&&&& & {VD7=0;P2=0x78;n=1;}& //发光二极管VD7点亮,数码管显示7
&&&&&& else if(S8==0)&&&&&&&& //若S8按下
&&&&&& & {VD8=0;P2=0x00;n=1;}& //发光二极管VD8点亮,数码管显示8
&& & & for(m=0;m&1000;m++)&&& //发出1秒报警声
&& &&& {&&&&& &
&&&&&& & SOUND=!SOUND;
&&&&&& & delay(1);
&&&&&&& delay(5000); //发光二极管、数码管继续点亮5秒
&&&&&&& P1=0
&& &&&& P2=0
&&& 将上述源程序编译生成目标文件vie_answer.hex。
&&& 电路中所使用的元件见表5。
种类(Category)
子种类(Sub-category)
Microprocessor ICs
8051 Family
Transistors
共阳数码管
7SEG-COM-ANODE
Optoelectronics
7-Segment Displays
Speakers & Sounders
&&& 绘制好仿真电路图,设置好有关元件的属性,仿真后先按一下开始按钮S9,再按一下S1~S8中的任一个按钮比如S6,仿真结果见图14。
&学习PROTEUS仿真,请联系
[转]&[转]&[转]&
喜欢该文的人也喜欢求51单片机控制的交通灯C程序和仿真图,要求红灯30秒,绿灯25秒,黄灯闪5秒,倒计时显示_百度知道
求51单片机控制的交通灯C程序和仿真图,要求红灯30秒,绿灯25秒,黄灯闪5秒,倒计时显示
我有更好的答案
你好!& &是这样的效果吗,私信联系我吧&&&&
采纳率:62%
Proteus的 可以 吧会
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机60秒倒计时_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机60秒倒计时
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩20页未读,
定制HR最喜欢的简历
你可能喜欢单片机设计60秒倒计时正计时+Proteus仿真_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机设计60秒倒计时正计时+Proteus仿真
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩7页未读,
定制HR最喜欢的简历
你可能喜欢还没有帐号? 赶紧
用户版块帖子
菜鸟第一次发贴,999S倒计时程序
UID:1284127
在线时间42小时
M币1862专家2
本人菜鸟一枚,学习单片机已经有一段时间,第一次写个 999秒倒计时程序 ,是在去年写的,今年 发出来,希望与大家分享,在分享的同时,希望大家给我这个菜鸟一点小小的信心,不要打击过大,本人心理承受能力太差了,呵呵,最最重要的是,大家慷慨解囊,把M币给我砸过来吧我需要M币,我需要M币,我需要M币,重要的事说三遍
/******************************************************&&项目名称:999秒倒计时&&时间:&&V1.0&&目的:使用51单片机的定时器1实现99秒倒计时&&单片机平台:KST51单片机开发平台-金沙滩单片机&&注意:unsigned char 的取值范围为0-255&&unsigned int 的取值范围为0-65535&&要结合单片机的硬件来看程序&&&&V1.1&&增加按键功能&&&&&&增加显示为3位数码管&&&&按向上键一下,可以让数字上升,最大至999&&&&增加按键功能停止或者启动,同一个按键实现功能
**********************************************************/ #include&reg52.h& sbit ADDR3 = P1^3;sbit ENLED = P1^4;sbit KEY3 = P2 ^6;sbit KEY4 = P2 ^7; bit flag = 1;bit KeySta = 1;bit KeySta_1 = 1;unsigned int sec = 999; sbit beep_dr = P1 ^ 6; unsigned char code LedChar[] ={&&&&0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,&&&&0x80,0x90,0X88,0x83,0XC6,0xA1,0x86,0x8E}; unsigned char LedBuff[6] = {&&&&0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
void LedScan()&& //此函数实现Led的动态扫描{&&&&static unsigned char i = 0; &&&&P0 = 0xFF;&&&&P1 = (P1 & 0xF8)|&&&&P0 = LedBuff[ i];&&&&if(i & 2)&&&&&&&&i++;&&&&else&&&&&&&&i = 0;}void Led(){&&&&&&&&LedBuff[0] = LedChar[sec % 10];&&&&&&&&LedBuff[1] = LedChar[sec/10 %10];&&&&&&&&LedBuff[2] = LedChar[sec/100 %10]; }void main(){&&&&bit backup = 1;&&//按键值备份,保存前一次的扫描值&&&&bit backup_1 = 1; &&&&ENLED =&&0;&&&&ADDR3 = 1; &&&&//定时器寄存器初始化&&&&TMOD = 0X01;&&&&&&TH0 = 0xFC;&&&&//1 ms定时&&&&TL0 = 0x67;&&&&EA = 1;&&&&ET0 = 1;&&&&TR0 = 1;&&&&P2 &= 0xF0;&&&&&&P2 |= 0x06;//不影响其它的位&&&& //P2.3 and P2.0 置 0 ,即Keyout1&&keyout4输出低电平&&&&&&&&&&&&&&&&&& &&&&while(1)&&&&{ &&&&&&&&&&&&&&if(KeySta != backup)&&//当前状态与前次值不相等说明此时按键有动作&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&if(backup == 0)&& //如果前次值为0,则说明当前是弹起状态&&&&&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&flag = 0;&&&&&& //倒计时停止&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&sec++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(sec == 1000)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&sec = 999;&&&&&&&&&&&&&&&&&&&&&&&&&&&&beep_dr = 0;&&//当增加值达到999后不再向上加,蜂鸣器响一声 &&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&backup = KeyS&&//更新备份为当前值,以备时行下次比较 &&&&&&&&&&&&&&&&if(KeySta_1 != backup_1)&& //Enter按键&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&if(backup_1 == 0)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&flag = ~&& //重新启动倒计时&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&backup_1 = KeySta_1;&&&&&&&&&&&&&&Led();
&&&&&&&&}&&&&}
//中断服务函数void InterruptTimer0() interrupt 1{&&&&static unsigned int cnt = 0;&&&&static unsigned char keybuf = 0xFF;&&&&&&static unsigned char keybuf_1 = 0xFF; &&&&//Range of &unsigned char& is 0 to 255&&&&//Range of &unsigned int&&&is 0 to 65535 &&&&TH0 = 0xFC;&&&&TL0 = 0x67;&&&&cnt++;&& &&&&LedScan(); &&&&keybuf = (keybuf && 1) | KEY4; &&&&if(keybuf == 0)&&&&{&&&&&&&&KeySta = 0;&&&&}&&&&else if(keybuf == 0xFF)&&&&{&&&&&&&&KeySta = 1;&&&&}&&&&//end key4 pro&&&&keybuf_1 = (keybuf_1 && 1) |KEY3; &&&&if(keybuf_1 == 0)&&&&{&&&&&&&&KeySta_1 = 0;&&&&}&&&&else if (keybuf_1 == 0xFF)&&&&{&&&&&&&&KeySta_1 = 1;&&&&} &&&&//end the key3 &&&&if(cnt &= 1000 && flag == 1 )&&&&{&&&&&&&&cnt = 0;&&&&&&&&if(sec &0)&&&&&&&&&&&&sec --;&&&&&&&&else&&&&&&&&&&&&sec = 999;&&&&}&&&&if(cnt & 800) &&&&&&&&beep_dr = 1;
}希望大家多给意见和M币![ 此帖被蚕豆学生在 19:35重新编辑 ]
UID:806097
在线时间323小时
M币1062专家4
unsigned int在c51默认为16为无符号整数
UID:805500
在线时间4430小时
M币4630专家85
&&注意:unsigned char 的取值范围为0-255&&unsigned char 的取值范围为0-65535下面那个错了
UID:1284127
在线时间42小时
M币1862专家2
回 benli 的帖子
:  注意:unsigned char 的取值范围为0-255  unsigned char 的取值范围为0-65535下面那个错了 ( 22:14) 谢谢 马上更改一下
UID:904084
在线时间270小时
M币12专家0
楼主你好,能不能帮我把程序改一下,两位数码管显示,74hc164d驱动,按键一按下加一秒,按键二减一秒,按键三开始和停止,倒计时过程中按下暂停,倒计时结束继电器断开,暂停时也断开,用htc15f104w单片机,共六个口,用多脚单片机不用驱动也行,谢谢!stc15f104w如图连接
本文内容包含图片或附件,获取更多资讯,请
后查看;或者
成为会员获得更多权限
UID:1284127
在线时间42小时
M币1862专家2
回 yoyu21 的帖子
:楼主你好,能不能帮我把程序改一下,两位数码管显示,74hc164d驱动,按键一按下加一秒,按键二减一秒,按键三开始和停止,倒计时过程中按下暂停,倒计时结束继电器断开,暂停时也断开,用htc15f104w单片机,共六个口,用多脚单片机不用驱动也行,谢谢![图片]stc15 .. ( 23:15) 我刚学单片机,没写过多少程序,身边没有相关元器件,164译码器,所以--不过你这个要求以后有机会我可以写写
UID:904084
在线时间270小时
M币12专家0
回 蚕豆学生 的帖子
:我刚学单片机,没写过多少程序,身边没有相关元器件,164译码器,所以--不过你这个要求以后有机会我可以写写  ( 08:28) 先谢谢你了啊,那能不能改成不用驱动的,我用多脚单片机,因为最近要用,所以就想着麻烦你一下,如果你不方便也没关系,如果能写的话麻烦你帮一下忙,谢谢!
UID:1284127
在线时间42小时
M币1862专家2
不用164驱动吗?
UID:1284127
在线时间42小时
M币1862专家2
回 yoyu21 的帖子
:先谢谢你了啊,那能不能改成不用驱动的,我用多脚单片机,因为最近要用,所以就想着麻烦你一下,如果你不方便也没关系,如果能写的话麻烦你帮一下忙,谢谢! ( 16:03) 程序已经写出来了,你看一下有没有什么问题:
UID:1284127
在线时间42小时
M币1862专家2
回 蚕豆学生 的帖子
:程序已经写出来了,你看一下有没有什么问题 ( 10:04) 没有加驱动芯片的
访问内容超出本站范围,不能确定是否安全
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:06-14 02:04, Total 0.244502(s) query 13,
Gzip enabled&

我要回帖

更多关于 80c51单片机引脚图 的文章

 

随机推荐