基于51单片机的按键计数仿真设计 您所在的位置:网站首页 52进制计数器设计 基于51单片机的按键计数仿真设计

基于51单片机的按键计数仿真设计

2023-09-01 02:28| 来源: 网络整理| 查看: 265

一、项目描述

基于89C52单片机,在protues环境中开发了一个含有按键计数功能的小项目,计数最大值是999。输入是接在P32口和P3^3口的两个按键,输出是在1602显示屏上显示结果。程序在keil C51软件中编写调试。

二、硬件设计

主体是单片机一个,外围电路有晶振电路、复位电路、1602液晶显示屏、两个按钮开关按键。1602的VSS接地,VDD接电源,VEE接滑动变阻器来调节电位,以此调节屏幕对比度。RS接P30,来选择数据或者命令;E接P31,控制1602使能;根据工作手册,RW可以一直为低电平,因此RW始终接地。D0~D7接到P2口作为传输总线。两个按键接在P32口和P3^3口,分别对应外部中断0和外部中断1,且低电平触发中断。晶振电路可以提供11.0592MHZ的工作频率,复位电路可以通过按钮开关按键复位。 图 1 硬件线路连接

三、软件代码 /******************************************************** * 文 件: 1602显示屏按键计数 * 作 者: * 外部晶振: 11.0592MHZ * 编译环境: Keil μVisio4 * 功 能: 数码管静态显示 * 注意事项: ********************************************************/ #include unsigned char code table1[]="COUNT:"; //命名数组用来显示字符“COUNT:” int count = 0; //全局变量初始化 sbit RS = P3^0; //数据/命令选择接口 sbit EN = P3^1; //使能接口 sbit button1 = P3^2; //按键1接在P3^2接口,对应外部中断0 sbit button2 = P3^3; //按键2接在P3^3接口,对应外部中断1 /******************************************************** 函数名:毫秒级CPU延时函数 调 用:delay_ms(?); 参 数:1~65535(参数不可为0) 返回值:无 结 果:占用CPU方式延时与参数数值相同的毫秒时间 备 注:应用于1T单片机时i for(i = 0; i RS = 1; EN = 0; P2 = y; delay(5); EN = 1; delay(5); EN = 0; } /********************************************************* 函数名:写变量函数 调 用:writechar(z); 参 数:无符号十六进制数0x?? 返回值:无 结 果:将数据发送至1602内部的显示内存中 备 注:不能将整数型变量count直接作为writedata的参数,需要将个、十、百位分别+48(0x30)转化成ascii码。 /*********************************************************/ void writechar(unsigned char z) { unsigned char A; unsigned char B; unsigned char C; RS = 1; EN = 0; A = z/1%10; //取个位 B = z/10%10; //取十位 C = z/100%10; //取百位 writedata(C+48); delay(5); writedata(B+48); //分离出变量的每一位数,再将每一位加上0x30, delay(5); writedata(A+48); //这样就变成了ASCII码了,再送给LCD才能显示出来变量的每一位的值。 delay(5); } /********************************************************* 函数名:1602设置初始化函数 调 用:init1602(); 参 数:无 返回值:无 结 果:初始化。具体指令在手册中查询。 /*********************************************************/ void init1602() { writeinstruction(0x38); //设置显示模式 指令码 00111000 => 0x38 delay(5); writeinstruction(0x0C); //[00001DCB]:D为显示开关,B为光标开关,C为光标闪烁开关。0x0C:开显示 不显示光标 不闪烁 delay(5); writeinstruction(0x06); //写一个字符后地址指针加一 delay(5); writeinstruction(0x01); //清屏 delay(5); } /********************************************************** 函数名:主函数main /**********************************************************/ void main() { char i; init1602(); writeinstruction(0x80); //设置数据地址指针从第一个开始 delay(5); /* 初始化中断 */ EA = 1; EX0 = 1; EX1 = 1; /* 写初始字符:COUNT:0 */ for (i = 0; i int i; if(button1==0) { delay(10); if(button1==0) { count++; //按键松开后,程序会运行到这里,计数值加1 while(!button1); //如果按键没有松开,程序会停在这里 } writeinstruction(0x01); //清屏 for (i = 0; i int i; writeinstruction(0x01); count=0; //count计数清零 for (i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有