Tạo font cho LCD và viết đồng hồ số
Trang 1 trong tổng số 1 trang
Tạo font cho LCD và viết đồng hồ số
//========================================
// 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
// 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
Similar topics
» Viết C cho 8951
» de Viết chương trình ghi ký tự ‘A’ ra COM2 lam the nao?
» thiet ke mach dem len nhi phan dong bo tu 0000-9999?
» Giáo trình "lý thuyết điều khiển tự động"
» Các bước thiết kế mạch điện tử tự động, ứng dụng trong cuộc sống
» de Viết chương trình ghi ký tự ‘A’ ra COM2 lam the nao?
» thiet ke mach dem len nhi phan dong bo tu 0000-9999?
» Giáo trình "lý thuyết điều khiển tự động"
» Các bước thiết kế mạch điện tử tự động, ứng dụng trong cuộc sống
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|
Wed Sep 24, 2014 8:46 am by vinagreensun
» Chia sẻ source code mạch đếm 0-99 sử dụng 8051 và LED hồng ngoại
Mon Mar 24, 2014 2:07 pm by xuantruong1911
» mình đang làm đồ án 1 cần làm mạch khó số điện tử dùng ic số và phải có thể thay đổi password
Fri Mar 21, 2014 8:01 pm by saobang
» Chế tạo máy dò kim loại help ?
Fri Nov 29, 2013 11:17 am by Thanhtra conan
» mấy bro vào giup em với
Wed Nov 27, 2013 9:01 pm by luongthanhvp
» giáo trình plc mitsubishi căn bản và nâng cao
Tue Apr 30, 2013 5:55 pm by Admin
» hoc led chay chu
Thu Apr 18, 2013 8:05 pm by vuphong
» QUÉT PHÍM MA TRẬN 4X4 HIỂN THỊ RA LED 7 ĐOẠN
Thu Apr 18, 2013 7:59 pm by thanhxuan
» cách vẽ mạch in bằng ocard 1 cách đơn giản?
Thu Apr 18, 2013 1:09 pm by Admin