February 2017
MonTueWedThuFriSatSun
  12345
6789101112
13141516171819
20212223242526
2728     

Calendar Calendar


Tạo font cho LCD và viết đồng hồ số

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Tạo font cho LCD và viết đồng hồ số

Bài gửi  thay Khai on Tue Jan 15, 2013 9:30 pm

//========================================
// Muốn tạo font cho LCD, hãy hiểu bài này
#include <REGX52.H>
#define LCD_D7 P1_7
#define LCD_D6 P1_6
#define LCD_D5 P1_5
#define LCD_D4 P1_4
#define LCD_RS P1_3
#define LCD_RW P1_2
#define LCD_E P1_1
#include <tvlcd.c>
char gio = 6,phut=11,giay=13,dem1=0;
void ngattimer0() interrupt 1
{
dem1++;
TH0= (-1000/256);
TL0 = (-1000%256);
}
void main()
{
LCD_init();
LCD_gotoxy(1,1);
LCD_string("DIGITAL");
LCD_gotoxy(2,2);
LCD_string("CLOCK");
LCD_bigdata(11,2,11);
TMOD = 1;
TH0= (-1000/256);
TL0 = (-1000%256);
IE = 0x82;
TR0=1;
while (1)
{
if (dem1 == 100)
{
dem1 =0;
giay++;
if (giay ==60)
{
giay =0;
phut++;
if (phut==60)
{
phut =0;
gio++;
if ( gio ==13) gio =0;
}
}
LCD_bigdata(10,1,gio/10);
LCD_bigdata(14,1,gio%10);
LCD_bigdata(13,2,giay/10);
LCD_bigdata(17,2,giay%10);
LCD_bigdata(3,2,phut/10);
LCD_bigdata(7,2,phut%10);
}
}
}
//====================================
//Kèm file này rối biên dịch thì nó mới chịu
//và đặt tên cho trùng với file đã include ở trên: tvlcd.c
void delay(int time){while(time--);}
void LCD_write4bit(bit mode, unsigned char LCD)
{
LCD_RS = mode;
LCD_D7 = (LCD&0x80)? 1:0;
LCD_D6 = (LCD&0x40)? 1:0;
LCD_D5 = (LCD&0x20)? 1:0;
LCD_D4 = (LCD&0x10)? 1:0;
LCD_RW = 0;
LCD_E =1;
delay(1);
LCD_E = 0;
delay(50);
}
void LCD_char(bit mode,unsigned char LCD)
{
LCD_write4bit(mode,LCD);
LCD_write4bit(mode,LCD<<4);

}

void LCD_data(long LCD)
{
char luu[40],dem=0,i,j=3;bit co =0;
if (LCD <0){co=1; LCD = -LCD;}
do{
luu[dem]= LCD%10 +48;
LCD/=10;
dem++;
if ((dem%j ==0)&(LCD!=0)){luu[dem] = 44; dem++;j+=4;}
}while (LCD !=0);
if (co== 1){luu[dem]=45; dem++;}
for (i =dem-1;i>=0; i--) LCD_char(1,luu[i]);
}

void LCD_string(unsigned char *str)
{
while(*str != '\0')
{
LCD_char(1,*str);
str++;
}
}
void LCD_gotoxy(unsigned char x, unsigned char y)
{
const char hang[] = {0x80,0xc0,0x94,0xd4};
LCD_char(0,hang[y-1]+x-1);
}
void LCD_clear()
{
LCD_char(0,0x01); // xoa man hinh
LCD_char(0,0x80); // dau dong 1
}

void LCD_init()
{
const unsigned char code cgram[] = {
31,31,31,31,31,31,30,28,31,31,31,31,31,31,15,7,\
7,15,31,31,31,31,31,31,28,30,31,31,31,31,31,31,\
31,31,31,0,0,0,0,0,0,0,0,0,0,31,31,31,\
31,31,31,0,0,0,31,31,31,31,31,31,31,31,31,31};
char i;
LCD_write4bit(0,0x30);
delay(1000);
LCD_write4bit(0,0x30);
delay(100);
LCD_write4bit(0,0x20); // che do 4 bit
LCD_char(0,0x2c); // hien thi 2 hang , 5x10
LCD_char(0,0x0c); // bat man hinh
LCD_char(0,0x06); // con tro dich phai
LCD_char(0,0x40);
for (i =0;i<64;i++)
{
LCD_char(1,cgram[i]);
}
LCD_clear();
}
// ham su dung font lon ( neu chuong chinh chinh khong sai toi co the xoa di cho nhe )
void LCD_bigdata(unsigned char x, unsigned char y,unsigned char LCD)
{
const unsigned char code number[10][6] ={
2,4,3,1,5,0,
4,3,32,5,7,5,
6,6,3,1,5,5,
6,6,3,5,5,0,
1,5,7,32,32,7,
1,6,6,5,5,0,
2,6,6,1,5,0,
4,4,3,32,32,7,
2,6,3,1,5,0,
2,6,3,32,5,0};
char i;
if (y!=1) y =3;
LCD_gotoxy(x,y);
if ((LCD>=0)&(LCD<10))
{
for (i = 0;i<6;i++)
{
LCD_char(1,number[LCD][i]);
if (i==2)LCD_gotoxy(x,y+1);
}
}
else
{
LCD_char(1,5);
if (LCD ==11){
LCD_gotoxy(x,y+1);
LCD_char(1,4);}
}
}
/*HD: Cài Keil-c cho 8051\Tạo project tên lcd \add file lcd.c\biên dịch sang file lcd.hex\ Vẽ phần cứng như hình vẽ \ Nạp file lcd.hex vào chip\ nhấn nút run...like*/
//Hãy làm cho mình cái đồng hồ treo trong nhà ngày tết
//Muốn đúng giờ thì dùng realtime clock DS1307-chuẫn I2C //hoặc DS12887-CHuẫn song song

//http://www.mediafire.com/?7yxp7ubb7idr8g8
//Phần cứng đây nhé
//Sau khi hiểu được file này thì mới làm bài tập tạo font cho LCD //được... bài "...nhâm nhi ly cafe..."
////////////////////////////////////////////////////////////////
Bài sau hướng dẫn mấy bạn làm đồng hồ thể thao.
Phần cứng:
P1.1 nối E
P1.2 nối RW
P1.3 nối RS
P1.4 ---P1.7 nối D4--D7
Lấy protues ra nối chạy thử sẽ thích cho mà xem

thay Khai

Tổng số bài gửi : 23
Join date : 14/11/2012

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết