标题:
单片机累加累减程序与Proteus仿真图
[打印本页]
作者:
18896597781
时间:
2021-5-29 12:18
标题:
单片机累加累减程序与Proteus仿真图
累加累减程序最大数值十999。
按加建KEY1数值加1并显示;
按减建KEY1数值减1并显示;
按归零键数值归零并显示;
附件包含完整程序和仿真设计
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
无标题.png
(220.58 KB, 下载次数: 59)
下载附件
2021-5-29 12:11 上传
单片机源程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define DB P1
/*************** 物理连接
P2^0对应 LCD_RS;
P2^1对应LCD_RW;
P2^2对应LCD_E;
P1对应LCD_DB;
P3^0对应KEY1加键;
P3^1对应KEY2减键;
P3^2对应KEY3清零键;
******************/
void LCD_init(); //1602初始函数
void LCD_write_command(uchar dat); //1602写命令函数
void LCD_write_dat(uchar dat); //1602写数据函数
void delay40us(uint n); //延时函数,单次40US
void display(uint tt); //显示函数
uint KEY_scan(uint num);
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;
uint num,key; //全局变量
uchar table[]="The num is";
//**************延时函数,单次约40US************
void delay40us(uint n)
{ uint i;
uchar j;
for(i=n;i>0;i--)
for(j=0;j<2;j++); //在这个延时循环函数中我只做了2次循环,
} //实践证明我的LCD1602 上普
//通的指令只需1次循环就能可靠完成
//*************LCD初始化函数***************
void LCD_init()
{
LCD_write_command(0x38);//设置8位格式,2行,5x7
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
LCD_write_command(0x06);//设定输入方式,增量不移位--------------
LCD_write_command(0x01);//清除屏幕显示----------------
delay40us(100); //实践证明,我的LCD1602上,用for 循环200 次就能可靠完成清屏指令
}
//*****************1602写命令函数************
void LCD_write_command(uchar dat)
{
DB=dat;
LCD_RS=0; //写命令
LCD_RW=0; //写容许
LCD_E=1; //LCD_E下降沿触发写
LCD_E=0;
delay40us(1); //延时确保写成功
}
//*************1602写数据函数*************
void LCD_write_dat(uchar dat)
{
DB=dat;
LCD_RS=1; //写数据
LCD_RW=0; //写容许
LCD_E=1; //LCD_E下降沿触发写
LCD_E=0;
delay40us(1); //延时确保写成功
}
//****************读键盘***************
uint KEY_scan(uint num )
{
if(KEY1==0) //加键按下
delay40us(25); //延迟1MS
if(KEY1==0) //确认加键按下
{
if(num==1000)
num=0;
++num; //显示当前数值
display(num);
while(!KEY1); //等待加键松开
}
if(KEY2==0)
delay40us(25);
if(KEY2==0)
{
if(num==0)
num=1000;
--num;
display(num);
while(!KEY2);
}
if(KEY3==0)
delay40us(25);
if(KEY3==0)
{
num=0;
display(num);
while(!KEY3);
}
return num;
}
//********************显示当前数值***********
void display(uint tt)
{
LCD_write_command(0x80+68);
LCD_write_dat(0x30+tt/100);
delay40us(15);
LCD_write_dat(0x30+tt/10%10);
delay40us(15);
LCD_write_dat(0x30+tt%10);
delay40us(15);
}
//************主函数************
main()
{
uchar k;
P3=0xff;
num=0;
LCD_init();
LCD_write_command(0x80);
for(k=0;k<12;++k)
{
LCD_write_dat(table[k]);
delay40us(1500);
}
while(1)
{
num= KEY_scan(num);
}
}
复制代码
所有资料51hei提供下载:
累加累减程序.zip
(62.77 KB, 下载次数: 13)
2021-5-29 12:15 上传
点击文件名下载附件
仿真设计和程序
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1