Proteus下简单51程序设计和仿真
发布日期:2021-11-03 09:33:17 浏览次数:2 分类:技术文章

本文共 2071 字,大约阅读时间需要 6 分钟。

51单片机下定时器编译

1、Proteus下绘制原理图

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

在这里插入图片描述

2、keil uVision4下编译程序

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

在这里插入图片描述

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

#include
#include
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; //控制ledsbit 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文件添加进去。

在这里插入图片描述
仿真结果
在这里插入图片描述

转载地址:https://blog.csdn.net/weixin_51118019/article/details/108965420 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:GCC编译器背后的故事
下一篇:ARM开发环境入门:使用MDK编译STM32简单程序

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月14日 02时13分35秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

LeetCode题解(0537):字符串表示的复数乘法(Python) 2019-04-26
LeetCode题解(0539):最小时间差(Python) 2019-04-26
LeetCode题解(0553):在连续除法中添加括号使结果最大(Python) 2019-04-26
LeetCode题解(0556):计算调换整数的位使整数值大于当前值的最小值(Python) 2019-04-26
LeetCode题解(0564):寻找与当前数差值最小的回文数(Python) 2019-04-26
LeetCode题解(0583):删除两个字符串的字符直至两字符串相等的操作次数(Python) 2019-04-26
LeetCode题解(0609):在文件路径列表中查找重复内容的文件(Python) 2019-04-26
LeetCode题解(0632):包含每个列表中至少一个整数的最小区间(Python) 2019-04-26
LeetCode题解(0647):字符串的回文子串数量(Python) 2019-04-26
LeetCode题解(0678):判断包含通配符*的字符串中的括号是否有效(Python) 2019-04-26
LeetCode题解(0722):删除代码中的注释内容(Python) 2019-04-26
LeetCode题解(0730):字符串的不同的非空回文子序列数量(Python) 2019-04-26
LeetCode题解(0736):Lisp语法表达式解析(Python) 2019-04-26
LeetCode题解(0761):特殊的二进制序列交换后的最大值(Python) 2019-04-26
LeetCode题解(0767):重构字符串至相邻字符不相同(Python) 2021-06-29
LeetCode题解(0791):依据字符在另一个字符串中的出现顺序排序字符串(Python) 2021-06-29
LeetCode题解(0809):判断字符串是否由单词扩张形成(Python) 2021-06-29
LeetCode题解(0816):模糊坐标(Python) 2021-06-29
LeetCode题解(0831):隐藏邮箱地址和电话号码个人信息(Python) 2021-06-29
LeetCode题解(0833):字符串中的查找与替换(Python) 2021-06-29