LM4F120H5QR

sun1211

Trứng gà
tình hình em có viết 1 bài : hiển thỉ giờ phút giây, ngày tháng năm hiển thị lên LCD 16x2. dùng kit LM4F120H5QR

port B kit dùng làm port xuất data từ kit ra LCD
có 3 chân Rs, Rw, E là pin e3, e4, e5

co 3 button de chọn mode và tăng giảm Set, Up , Down la pin e0, e1, e2

code như sau:
//2death: nhắc nhở dùng tab CODE để làm gọn phần code.
Code:
//*********************************************************
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"
 
//*********************************************************
signed int Sec, Min, Hour, Month, Day, Year,CountSet;
// #define Set GPIO_PIN_E0
// #define Up GPIO_PIN_E1
// #define Down GPIO_PIN_E2
// #define RS GPIO_PIN_E3
// #define Rw GPIO_PIN_E4
// #define E GPIO_PIN_E5
// DEFINE LCD GPIP_PIN_B
// #byte LCD = 0x07
//*************************************************************
 
//******************************ham delay*********************************
void delay(unsigned int time)
{
SysCtlDelay(time);
}
//****************************************************************
void Set_Clock(void) // Kiem tra va hieu chinh gia tri cua gio,phut,giay
{
unsigned char y;
y=(year%4);
//Tang
if(Sec>59){Sec = 0;}
if(Min>59) { Min=0; }
if(Hour>23) { Hour=0; }
 
if((Month==2)&&(Day>29)&&(y==0)) { Day=1; }
else if((Month==2)&&(Day>28)&&(y!=0)) { Day=1; }
else if(((Month==4)||(Month==6)||(Month==9)||(Month==11))&&(Day>30)&&(y!=0)){ Day=1; }
else if(Day>31) { Day=1; }
if(Month>12) { Month=1; }
if(Year>99) { Year=0; }
 
//Giam
if(Sec<0){Sec = 59;}
if(Min<0) {Min=59; }
if(Hour<0) { Hour=23; }
 
if((Month==2)&&(Day<1)&&(y==0)) { Day=29; }
else if((Month==2)&&(Day<1)&&(y!=0)) { Day=28; }
else if(((Month==4)||(Month==6)||(Month==9)||(Month==11))&&(Day<1)&&(y!=0)){ Day=30; }
else if(Day<1) { Day=31; }
if(Month<1) { Month=12; }
if(Year<0) { Year=99; }
 
}
//*************************************************************************************
 
void Key_Pad(void) // Kiem tra phim nhan.
{
 
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_0))
{
CountSet++;
}
if(CountSet==1)
{
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1))
{
Sec++;
Set_Clock();
delay(50000);
}
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2))
{
Sec--;
Set_Clock();
delay(50000);
}
}
if(CountSet==2)
{
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1))
{
Min++;
Set_Clock();
delay(50000);
}
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2))
{
Min--;
Set_Clock();
delay(50000);
}
}
if(CountSet==3)
{
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1))
{
Hour++;
Set_Clock();
delay(50000);
}
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2))
{
Hour--;
Set_Clock();
delay(50000);
}
}
if(CountSet==4)
{
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1))
{
Day++;
Set_Clock();
delay(50000);
}
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2))
{
Day--;
Set_Clock();
delay(50000);
}
}
if(CountSet==5)
{
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1))
{
Month++;
Set_Clock();
delay(50000);
}
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2))
{
Month--;
Set_Clock();
delay(50000);
}
}
if(CountSet==6)
{
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1))
{
Year++;
Set_Clock();
delay(50000);
}
if(!GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2))
{
Year--;
Set_Clock();
delay(50000);
}
}
if(CountSet==7)
{
CountSet=1;
}
//Set_Clock();
//delay(1000);
}
//*****************************Display LCD*************************************
void LCD_Com(int Command)
{
// LCD = Command;
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2,GPIO_PIN_3,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_7, Data);
//RS = 0;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0);
// RW = 0;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0);
// E = 1;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, 1);
// E = 0;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, 0);
delay(500);
}
void LCD_Write(int Data)
{
// LCD = Data;
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2,GPIO_PIN_3,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_7, Data);
// RS = 1;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 1);
// RW = 0;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0);
// E = 1;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, 1);
// E = 0;
GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5, 0);
delay(500);
}
void LCD_Start(void)
{
LCD_Com(0x38);
LCD_Com(0x0c);
LCD_Com(0x06);
LCD_Com(0x01);
 
}
void LCD_Clear(void)
{
LCD_Com(0x01);
}
void LCD_Vitri(int Hang, int Cot)
{
int ViTri;
switch(hang)
{
case 1: ViTri = Cot + 0x80;
break;
case 2: ViTri = Cot + 0xc0;
break;
}
LCD_Com(ViTri);
}
//*******************************************************************************
void Timer()
{
unsigned long ulPeriod;
//delay 1s
ulPeriod = SysCtlClockGet() ;
TimerLoadSet(TIMER0_BASE, TIMER_A, ulPeriod -1);
Sec++;
if(Sec > 59)
{
Sec = 0;
Min ++;
if(Min >59)
{
Min = 0;
Hour++;
if(Hour > 23)
{
Hour = 0;
Day++;
if(Month ==1||Month ==3||Month ==5||Month ==7||Month ==8||Month ==10||Month ==12)
{
if(Day>31){Day=1;Month++;if(Month>12){Year++;Month=1;}}
}
else if(Month ==4||Month ==6||Month ==9||Month ==11)
{
if(Day>30){Day=1;Month++;if(Month>12){Year++;Month=1;}}
}
else
{
if((Year%4)==0)
{
if(Day>29){Day=1;Month++;if(Month>12){Year++;Month=1;}}
}
else
{
if(Day>28){Day=1;Month++;if(Month>12){Year++;Month=1;}}
}
}
}
}
}
}
 
//**********************************************************************************************
void main(void)
{
 
LCD_Start();
// delay_ms(100);
 
Sec = 0;
Min = 0;
Hour = 0;
Day = 0;
Month = 0;
Year = 00;
 
CountSet =0;
 
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
 
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
 
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);
 
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
 
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_PIN_7);
 
 
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);
 
IntEnable(INT_TIMER0A);
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
IntMasterEnable();
TimerEnable(TIMER0_BASE, TIMER_A);
 
delay(10000);
 
while(1)
{
Timer();
 
 
 
LCD_ViTri(1,3);
LCD_Write(Day/10+0x30);
LCD_ViTri(1,4);
LCD_Write(Day%10+0x30);
LCD_ViTri(1,6);
LCD_Write('/');
LCD_ViTri(1,8);
LCD_Write(Month/10+0x30);
LCD_ViTri(1,9);
LCD_Write(Month%10+0x30);
LCD_ViTri(1,11);
LCD_Write('/');
LCD_ViTri(1,13);
LCD_Write(Year/10+0x30);
LCD_ViTri(1,14);
LCD_Write(Year%10+0x30);
 
LCD_ViTri(2,3);
LCD_Write(Hour/10+0x30);
LCD_ViTri(2,4);
LCD_Write(Hour%10+0x30);
LCD_ViTri(2,6);
LCD_Write(':');
LCD_ViTri(2,8);
LCD_Write(Min/10+0x30);
LCD_ViTri(2,9);
LCD_Write(Min%10+0x30);
LCD_ViTri(2,11);
LCD_Write(':');
LCD_ViTri(2,13);
LCD_Write(Sec/10+0x30);
LCD_ViTri(2,14);
LCD_Write(Sec%10+0x30);
delay(1000);
LCD_ViTri(1,1);
LCD_Write(CountSet+0x30);
 
Key_Pad();
}
}
cùng code này(sửa lại cú pháp) đổ lên con pic thì chạy, nhưng lên kit thì không hiển thị được gì hết, em mới làm con ARm này chưa có kinh nhiệm, không biết thiếu gì không, mong các bạn chỉ giáo.
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Không nhớ rõ nhưng hình như cú pháp câu này
Code:
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2,GPIO_PIN_3,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_7, Data);
có vẻ không đúng :doubt:
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Thay dấu phẩy giữa mấy cái GPIO_PIN_0,GPIOPIN_1 thành GPIO_PIN_0|GPIOPIN_1 xem sao :)
Mà khi nạp nó không báo lỗi gì hả?
 
Top