-
Notifications
You must be signed in to change notification settings - Fork 0
/
LCD_program.c
131 lines (113 loc) · 3.76 KB
/
LCD_program.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/****************************************************************************************************************************/
/***************** Author : Diea Abdeltwab **********************************************************************************/
/***************** File : Program of LCD ************************************************************************************/
/***************** Date : 10/9/2022 ****************************************************************************************/
/***************** Version : 1.0 *******************************************************************************************/
/***************** Description : LCD ****************************************************************************************/
/****************************************************************************************************************************/
#define F_CPU 8000000UL
#include <util/delay.h>
#include"STD_TYPES.h"
#include"BIT_MATH.h"
#include"DIO_interface.h"
#include"LCD_interface.h"
#include"LCD_config.h"
#include"LCD_private.h"
void LCD_voidInit(void)
{
DIO_voidSetPortDirection(LCD_u8_DATA_PORT,0xFF);
DIO_voidSetPinDirection(LCD_u8_CONTRAL_PORT,LCD_u8_RS_PIN,HIGH);
DIO_voidSetPinDirection(LCD_u8_CONTRAL_PORT,LCD_u8_RW_PIN,HIGH);
DIO_voidSetPinDirection(LCD_u8_CONTRAL_PORT,LCD_u8_E_PIN,HIGH);
_delay_ms(35);
LCD_voidSendCmnd(LCD_FUN_SIT);
_delay_ms(1);
LCD_voidSendCmnd(LCD_DISPLAY_ON_OF_CONTROL);
_delay_ms(1);
LCD_voidSendCmnd(LCD_DISPLAY_CLEAR);
_delay_ms(2);
}
void LCD_voidSendCmnd(u8 Copy_u8Comnd)
{
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_RS_PIN,LOW);
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_RW_PIN,LOW);
DIO_voidSetPortValue(LCD_u8_DATA_PORT,Copy_u8Comnd);
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_E_PIN,HIGH);
_delay_us(1);
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_E_PIN,LOW);
}
void LCD_voidSendChar(u8 Copy_u8Char)
{
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_RS_PIN,HIGH);
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_RW_PIN,LOW);
DIO_voidSetPortValue(LCD_u8_DATA_PORT,Copy_u8Char);
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_E_PIN,HIGH);
_delay_us(1);
DIO_voidSetPinValue(LCD_u8_CONTRAL_PORT,LCD_u8_E_PIN,LOW);
}
void LCD_voidSendString(u8 *Copy_pu8String)
{
for(int i=0; Copy_pu8String[i] != '\0' ; i++)
LCD_voidSendChar(Copy_pu8String[i]);
}
void LCD_voidSendNumber(u32 Copy_u8Number)
{
u32 Local_remainder=0,Local_reverse=0,Local_TMP=0,Local_Counter,Local_TMPNum=Copy_u8Number;
if (Copy_u8Number==0)
{
LCD_voidSendChar('0');
}
else{
for(Local_Counter=-1;0==Local_TMP;Local_Counter++)
{
Local_TMP=Local_TMPNum %10;
Local_TMPNum=Local_TMPNum / 10;
}
while(Copy_u8Number!=0)
{
Local_remainder=Copy_u8Number %10;
Local_reverse=Local_reverse*10+Local_remainder;
Copy_u8Number=Copy_u8Number / 10;
}
Local_TMP=0;
while (Local_reverse!=0)
{
Local_TMP=Local_reverse%10;
LCD_voidSendChar(Local_TMP+'0');
Local_reverse=Local_reverse / 10;
}
while(0 != Local_Counter)
{
LCD_voidSendChar('0');
Local_Counter--;
}
}
}
void LCD_vidGoToXY(u8 Copy_u8Location,u8 Copy_u8LineNum)
{
switch (Copy_u8LineNum)
{
case 0 : LCD_voidSendCmnd(0x80+Copy_u8Location); break;
case 1 : LCD_voidSendCmnd(0xC0+Copy_u8Location); break;
}
}
void LCD_voidWriteSpicalCaracter(u8 Copy_u8PatternNumper,u8* Copy_u8Patterns)
{
u8 Local_u8CGRAMAddress=0,Local_u8Iterator;
Local_u8CGRAMAddress=Copy_u8PatternNumper*8;
LCD_voidSendCmnd(Local_u8CGRAMAddress+64);
for(Local_u8Iterator=0;Local_u8Iterator<8;Local_u8Iterator++)
{
LCD_voidSendChar(Copy_u8Patterns[Local_u8Iterator]);
}
}
void LCD_voidClear(void)
{
LCD_voidSendCmnd(LCD_CLEAR);
_delay_ms(2);
}
void LCD_voidHiddenCursor(void)
{
LCD_voidSendCmnd(LCD_HIDDEN_CURSOR);
_delay_ms(1);
}