Proteus下简单51程序设计和仿真

    科技2025-10-30  8

    51单片机下定时器编译

    1、Proteus下绘制原理图

    新建工程后,在左侧菜单栏选择添加元件,添加如图所示的元件,单片机选AT89C51。摆放元件,用P0口控制秒位,用P2口控制毫秒位和暂停、重置功能。

    2、keil uVision4下编译程序

    打开keil程序,创建新工程。

    新建文本将以下代码输入文本中。

    #include<reg51.h> #include<stdio.h> sbit P20=P2^0; sbit P21=P2^1; sbit P22=P2^2; sbit P23=P2^3; sbit start=P2^4; //开始 sbit reset=P2^5; //复位 sbit redled=P1^0; //控制led sbit sounder=P1^1; //控制蜂鸣器 unsigned char led_times,sounder_times,sounder_flag,ge,shi,bai,qian; unsigned char code led[ ]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void display(); void delay_ms(unsigned int ms) { unsigned char a; while(ms--) for(a=125;a>0;a--); } void T0_init( ) { TMOD=0x01; TH0=0xD8; //10ms定时 TL0=0xF0; EA=1; ET0=1; redled=0;//初始led不亮 sounder=0;//初始不响 } void display( ) { P23=0; P0=led[0]; delay_ms(5); P23=1; P22=0; P0=led[shi]; delay_ms(5); P22=1; P21=0; P0=led[bai]|0x80; delay_ms(5); P21=1; P20=0; P0=led[qian]; delay_ms(5); P20=1; } void T0_int( ) interrupt 1 //定时器T0中断 方式1 { TH0=0xD8; TL0=0xF0; ge++; led_times++; if(led_times==50) { redled=~redled; led_times=0; sounder_times++; sounder=0; } if(sounder_times==90) { sounder=1; } if(sounder_times==110) { sounder=1; sounder_times=0; } if(ge==10) { ge=0; shi++; } if(shi==10) { shi=0; bai++; } } void main() { T0_init( ); while(1) { display( ); while(!start)//开始/暂停键 { display( ); if(start) TR0=!TR0; } while(!reset) //清零键 { display( ); if(reset) TR0=0; qian=0; bai=0; shi=0; ge=0; } if(bai==10) { bai=0; qian++; } if(qian==5&&bai==6) { qian=0;bai=0;shi=0;ge=0; } } }

    点击红框区域,选中生成HEX文件,即生成了.hex文件。

    3、仿真

    在Proteus中双击51单片机,将keil中生成的hex文件添加进去。 仿真结果

    Processed: 0.022, SQL: 8