avr计数_使用8位LCD创建计数器| AVR

avr计数

This type of counter may be also used in the EVM machines. A counter can be used to count the number of times a button is pressed. It can have many applications. The most widely used counter application is in EVM and also in customer feedback machines.

这种类型的计数器也可以在EVM机器中使用。 计数器可用于计算按下按钮的次数。 它可以有很多应用。 最广泛使用的计数器应用程序是在EVM中以及在客户反馈机中。

CODE

#include <avr/io.h>
#define F_CPU 1000000
#include <util/delay.h>
#define RS 0
#define EN 1
void lcd_comm	(char);
void lcd_data	(char);
void lcd_init	(void);
void lcd_string	(char*);
void lcd_num	(int n);
int main(void)
{
int c = 0;
DDRA = 0x00;
lcd_init();
lcd_comm(0x84);
lcd_string("COUNTER");
lcd_comm(0xC5);
lcd_data(c+48);
while(1)
{
if( (PINA & 0x01) == 1 )
{
c++;
lcd_comm(0xC5);
lcd_num(c);
while( (PINA & 0x01) == 1 );
}
}
}
void lcd_comm(char x){
PORTD = x;
PORTC &= ~(1<<RS);
PORTC |= 1<<EN;
_delay_ms(5);
PORTC &= ~(1<<EN);
}
void lcd_data(char x){
PORTD = x;
PORTC |= 1<<RS;
PORTC |= 1<<EN;
_delay_ms(5);
PORTC &= ~(1<<EN);
}
void lcd_init(void){
DDRD = 0xFF;
DDRC = 0x03;
lcd_comm(0x38);
lcd_comm(0x06);
lcd_comm(0x0E);
lcd_comm(0x01);
lcd_comm(0x80);
}
void lcd_string(char* p){
while(*p!='\0'){
lcd_data(*p);
p++;
}
}
void lcd_num(int n){
lcd_data((n/1000)+48);
n %= 1000;
lcd_data((n/100)+48);
n %= 100;
lcd_data((n/10)+48);
n %= 10;
lcd_data(n+48);
}

Explanation:

说明:

  • Firstly we have included all the header file that is required basically

    首先,我们包含了所有基本需要的头文件

  • At the initial condition, we have defined EN=1 and RS=0.

    在初始条件下,我们定义了EN = 1和RS = 0 。

  • Next we have defined certain functions lcd_comm(char), lcd_data(char) and lcd_init(void) etc.

    接下来,我们定义了某些函数lcd_comm(char) , lcd_data(char)和lcd_init(void)等。

  • Inside the int main(void) we have created a variable c which is an integer and initially it is equal to zero. It will remember the number of times we will press our push button.

    在int main(void)内部,我们创建了一个变量c ,它是一个整数,最初它等于零。 它会记住我们按下按钮的次数。

  • DDRA=0x00 says that we have connected a push button to PA0.

    DDRA = 0x00表示我们已将按钮连接到PA0 。

    The

    lcd_init(); will run the lcd_init function that we have defined below.

    lcd_init(); 将运行下面定义的lcd_init函数。

    The command

    命令

    0x84 is made our string(COUNTER) in between of the LCD display

    0x84是我们在液晶显示器之间的字符串(COUNTER)

    Lcd_string("COUNTER") will print COUNTER.

    Lcd_string(“ COUNTER”)将打印COUNTER。

    Lcd_data(c+48) is used to write our string in ASCII code.

    Lcd_data(c + 48)用于以ASCII代码写入我们的字符串。

  • Inside the while loop, we have written our condition if the button is pressed we add 1 to our variable c.

    在while循环内部,如果按下按钮,我们就写了条件,我们在变量c中加了1。

  • The command 0xCS will overwrite the initial zero condition of our counter.

    命令0xCS将覆盖计数器的初始零条件。

  • Inside the void lcd_comm(char x), we have taken the variable as char x, which we have assigned to PORTD. In the next step we have masked the initial value of RS which was initially 0, and here we have made it 1. Next, we have made our Enable Pin high and then low by giving the time delay of 5ms in between.

    在void lcd_comm(char x)内 ,我们将变量指定为char x ,并将其分配给PORTD 。 在下一步中,我们屏蔽了RS的初始值,该值最初为0,在这里我们将其设置为1。接下来,通过在5ms之间设置时间延迟,将使能引脚设为高电平,然后设为低电平。

  • Again for the next function, we would be giving the data to LCD through this. We have taken a variable x, and assigned to PORTD, again made RS pin 0 and also have done similarly the Enable pin high and then low by providing the time delay of 5ms. In this function lcd_init(void), we have written all the commands that are required for the LCD at the beginning. The DDRD=0xFF indicates all the data pins connected to the PORTD, and DDRC=0x03 is for the connection of the ENABLE Pin and R/S pin we connected to PORTC.

    再次为下一个功能,我们将通过此将数据提供给LCD。 我们已将变量x分配给PORTD ,再次将其设为RS引脚0,并且通过提供5ms的时间延迟,同样将Enable引脚设为高电平,然后设为低电平。 在此函数lcd_init(void)中 ,我们在一开始就编写了LCD所需的所有命令。 DDRD = 0xFF表示连接到PORTD的所有数据引脚,而DDRC = 0x03用于连接我们连接到PORTC的ENABLE引脚和R / S引脚。

    0x38 - as the LCD is in 8 bit mode.

    0x38 -LCD处于8位模式。

    0x06 - cursor shifts to the right.

    0x06-光标向右移动。

    0x0E - display ON and cursor ON.

    0x0E-显示打开,光标打开。

    0x01 - clears the screen.

    0x01-清除屏幕。

    Ox80 – 0th row and 0th column.

    Ox80 – 0行和 0列。

  • The function lcd_string(char *p) is used to print the words and are simple strings, here we have used them to print the word COUNTER.

    函数lcd_string(char * p)用于打印单词,它们是简单的字符串,这里我们使用它们来打印单词COUNTER。

  • The void lcd_num(int n) function is used to display n which is equal to the number of times the button is pressed. Inside the function, we have defined three conditions for n to be a three digit number, a two digit number, and a single digit number. We have also used mod here so that we can get the accurate value of n.

    void lcd_num(int n)函数用于显示n ,该n等于按钮被按下的次数。 在函数内部,我们为n定义了三个条件,即三个数字,两个数字和一个数字。 我们在这里还使用了mod,以便获得n的准确值。

Simulation:

模拟:

Simulation of Create counter using an 8-bits LCD | AVR

Explanation:

说明:

  • Components required:

    所需组件:

    1. 1 resistor
    2. 2 ground terminal
    3. LM016L i.e. our LCD
    4. Atmega16
    5. Push button
    6. Power terminal
  • Make the connections as shown above.

    如上所示进行连接。

  • Double click on power terminal and edit its property to +5V.

    双击电源端子,然后将其属性编辑为+ 5V。

  • Connected the resistor after the push button such that the high unwanted current goes directly ti it.

    在按钮之后连接电阻,以使多余的高电流直接流过该电阻。

  • Double click the Atmega16 and debug the HEX file.

    双击Atmega16并调试HEX文件。

  • Click on the Run Button and your counter will run and the no. if times you will press the button will appear on the screen.

    单击运行按钮,您的计数器将运行,并且没有。 如果您要按几次,该按钮将出现在屏幕上。

翻译自: https://www.includehelp.com/embedded-system/create-counter-using-an-8-bits-lcd-avr.aspx

avr计数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php将字符变为数字,数字字符怎么转化为数字 php 怎么将字符转成数字

java中&#xff0c;String字符串转化为数字我现在想把一个String字符串转化为数字&#xff0c; String s"00000123" 我直接使java中String字符串转化为数字&#xff1a; 转换为浮点型&#xff1a; 使用Double或者Float的parseDouble或者parseFloat方法进行转换 Strin…

用U盘作为启动盘做系统步骤

步骤一&#xff1a;BIOS设置U盘启动 制作好Win10 U盘系统安装盘之后&#xff0c;我们需要在电脑的BIOS设置中把第一启动设备设置为U盘&#xff0c;设置后就可以从我们制作的Win10 U盘系统安装盘启动&#xff0c;从而显示系统安装界面开始安装系统。BIOS设置U盘启动的方法如下&a…

使用tkinter模块在Python中进行GUI编程

GUI (Graphical User Interface): GUI(图形用户界面)&#xff1a; GUI is a simple application which helps the user to interact with the computer or any other electronic device through a graphical icon. This used to perform different tasks on a desktop or lapt…

Composer学习之————Ubuntu14.04下安装Composer

下载Composer&#xff1a; curl -sS https://getcomposer.org/installer | php 安装Composer&#xff1a; /usr/bin/php composer.phar --version 设置全局命令&#xff1a; sudo mv composer.phar /usr/local/bin/composer 查看是否安装与设置成功&#xff1a; composer -vers…

java如何解决高并发症,JAVA线上故障紧急处理详细过程!

链接&#xff1a;https://fredal.xin/java-error-check?hmsrtoutiao.io&utm_mediumtoutiao.io&utm_sourcetoutiao.io线上故障主要会包括 CPU、磁盘、内存以及网络问题&#xff0c;而大多数故障可能会包含不止一个层面的问题&#xff0c;所以进行排查时候尽量四个方面依…

php 查看扩展 代码,[扩展推荐] 使用 PHP Insights 在终端查看 PHP 项目代码质量

PHP Insights 是一个由 Nuno Maduro 发布的、可在控制台进行 PHP 即时质量检查的拓展包。在项目的 readme 文件中&#xff0c;可以发现 PHP Insights 的主要功能包含&#xff1a;代码质量 与 代码风格 分析一个针对于代码 结构 和 复杂度 的漂亮的预览界面在 Laravel、Symfon…

航空机票预订c#代码_航空公司座位预订问题的C ++程序

航空机票预订c#代码Problem statement: Write a program to assign passengers seats in an airplane. Assume a small airplane with seat numbering as follows: 问题陈述&#xff1a;编写一个程序来分配飞机上的乘客座位。 假设小型飞机的座位编号如下&#xff1a; 1 A B C…

linux命令之which

which这个命令可以说并不常用&#xff0c;它的作用是查看可执行文件的位置&#xff0c;并返回第一个搜索结果。可执行文件也就是指的某个系统命令&#xff0c;但是这个命令的位置必须是在PATH路径里存在的。截图中 &#xff0c;pwd的位置在/bin/pwd,当然&#xff0c;这个路径是…

线性代数向量乘法_向量的标量乘法| 使用Python的线性代数

线性代数向量乘法Prerequisite: Linear Algebra | Defining a Vector 先决条件&#xff1a; 线性代数| 定义向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a mat…

html的学习思维导图

转载于:https://www.cnblogs.com/lingdublog/p/6438088.html

cubic-bezier_带CSS中的示例的cube-bezier()函数

cubic-bezierIntroduction: 介绍&#xff1a; How many times have we come across the word function? Well, it would not be wrong to say a lot. The fact that functions are used in web development while developing a website or web page is very important. There…

上手Caffe(一)

author&#xff1a;oneBite 本文记录编译使用caffe for windows 使用环境 VS2013 ultimate,win7 sp1,caffe-windows源码&#xff08;从github上下载caffe的windows分支&#xff0c;下载解压之后&#xff0c;不要改变原有的目录结构,因为solution rebuild时会使用文件的相对路径…

关于设置不同linux主机之间ssh免密登录简易方法

2019独角兽企业重金招聘Python工程师标准>>> 在linux日常中&#xff0c;经常会有ssh链接其他主机服务器的action,也学习过大家日常用配置ssh免密登录的方法。 小编今天在这里给大家介绍一种比较简单的配置linux主机ssh免密登录的方法。 两台主机的IP地址&#xff1a…

java自定义线程池池,线程池使用及自定义线程池

一 案例引申编写代码同时只允许五个线程并发访问(以下文的函数为例子)private static void method() {System.out.println("ThreadName" Thread.currentThread().getName() "进来了");Thread.sleep(2000);System.out.println("ThreadName" Th…

impala和mysql语法,impala CREATE TABLE语句

CREATE TABLE语句用于在Impala中的所需数据库中创建新表。 创建基本表涉及命名表并定义其列和每列的数据类型。语法以下是CREATE TABLE语句的语法。 这里&#xff0c;IF NOT EXISTS是一个可选的子句。 如果使用此子句&#xff0c;则只有在指定数据库中没有具有相同名称的现有表…

Java二维数组谷电,java二维数组遍历的2种代码

二维数组遍历&#xff1a;思想&#xff1a;1.先将二维数组中所有的元素拿到2.再将二维数组中每个元素进行遍历&#xff0c;相当于就是在遍历一个一维数组第一种方法&#xff1a;双重for循环//遍历二维数组public class Traverse_a_two_dimensional_array {public static void m…

MATLAB元胞自动机报告,元胞自动机概述与MATLAB实现

什么是元胞自动机&#xff1f;元胞自动机(cellular automata&#xff0c;CA) 是一种时间、空间、状态都离散&#xff0c;空间相互作用和时间因果关系为局部的网格动力学模型&#xff0c;具有模拟复杂系统时空演化过程的能力。它能构建随时间推移发生状态转移的系统&#xff0c;…

php session redis db,php session redis 配置

具体环境&#xff1a;一台apachephp的服务器(yum安装remi源及配置 httpd-2.2.15 php-5.4.45)一台redis服务器(yum安装remi源及配置 redis-3.2.6)保证apache服务器可以访问redis服务器的6379端口具体步骤&#xff1a;1、在apachephp服务器上安装redis扩展点击(此处)折叠或打开yu…

(四)其他的说明

2019独角兽企业重金招聘Python工程师标准>>> 关于日志&#xff0c;主要是利用aop来实现的。cn.demoframe.test.frame.service.LogAspect&#xff0c;这里在方法前做了个切面setReqReachTime&#xff0c;设置了一个请求达到时间。接下来还有个切面&#xff0c;是在co…

vm中linux物理内存不足解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 之前创建的一个center os,默认是8GB&#xff0c;经过一顿折磨&#xff0c;装jdk,tomcat,redis,mycat,nginx,mysql,hadoop...终于&#xff0c;内存不足了&#xff0c;在使用docker build某镜像的时候。迭代懵逼了&am…