TÌM HIỂU VỀ 8051
GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 8051
1.1.1 Sơ lược về lịch sử
Bộ xử lý 4 bit: Vào năm 1971, vi xử lý đầu tiên trên thế giới được Intel ra mắt với tên gọi là 4004.
Intel 4004 là bộ vi xử lý 4-bit với 16 chân, hoạt động ở tốc độ 740KHz, thực hiện khoảng tám chu kỳ đồng hồ cho mỗi chu kỳ lệnh Chip này có khả năng thực hiện từ 46.250 đến 92.500 lệnh mỗi giây.
Bộ xử lý 8 bit: Ra đời năm 1972 có tên là Intel 8008 nó có tốc độ từ 200kHz đến
800kHz cao hơn phiên bản cũ.
Vào năm 1981, Intel đã ra mắt bộ vi điều khiển 8-bit mang tên 8051 Sự phổ biến của vi điều khiển này gia tăng khi Intel cho phép các nhà sản xuất khác sản xuất và phân phối các biến thể của 8051, miễn là họ giữ mã lập trình tương thích với phiên bản gốc.
Bộ xử lý 64 bit đã được giới thiệu từ năm 2004, với nhiều phiên bản nổi bật như P4 Prescott (2004), Premium D (2005), Premium Extreme Edition (2005) và kiến trúc Core I (từ 2006 đến nay) Đặc biệt, Core 2 Duo, Core 2 Quad và Core 2 Extreme, trong đó QX9650 là sản phẩm cao cấp nhất của năm 2007, cho phép người dùng ép xung hiệu quả.
Hình 1.3 Chip Intel Core i Series 9 th Gen
Since its launch in 2006, the Core I series has evolved through eight generations: Nehalem, Sandy Bridge, Ivy Bridge, Haswell, Broadwell, Skylake, Kaby Lake, and Coffee Lake The latest generation currently available is the 10th generation, known as Ice Lake.
Hiện nay, các dòng vi xử lý như Core i3, Core i5, Core i7 và Core i9 đang trở nên phổ biến Mỗi phiên bản mới không chỉ mang đến công nghệ tiên tiến hơn mà còn cải thiện tốc độ và khả năng tích hợp, giúp nâng cao hiệu suất hoạt động.
Các tính năng của vi điều khiển 8051:
- Bộ nhớ chương trình bên trong: 4 KB (ROM)
- Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
- Bộ nhớ chương trình bên ngoài: 64 KB (ROM)
- Bộ nhớ dữ liệu bên ngoài: 64 KB (RAM)
- 4 port xuất nhập (I/O port) 8-bit
- Tần số hoạt động từ: 0Hz đến 24 MHz
- Mạch giao tiếp nối tiếp
- Bộ xử lý bit (thao tác trên các bit riêng lẻ)
- 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit
- 32 thanh ghi đa dụng 8-bit
- Thanh ghi PC và DP 16-bit
Có hai bộ vi điều khiển thành viên khác của họ 8051 là 8052 và 8031.
8052: vi điều khiển 8052 chứa tất cả đặc tính của 8051 nhưng nó bổ sung thêm 128byte RAM, 4Kb ROM và 1 bộ định thời nữa.
8031: Không có sẵn ROM Để sử dụng, bạn phải tự thêm ROM cho 8031 Bên cạnh đó, nó chỉ có 2 port 8-bit thay vì 4 port như 8051. Đặc tính 8051 8052 8031
ROM trên chip 4K byte 8K byte OK
Bảng 1.1 So sánh các đặc tính của các thành viên họ 8051
1.1.2 Cấu trúc vi điều khiển 8051
1.1.2.1 Sơ đồ khối và chức năng của khối vi điều khiển 8051
Hình 1.4 Sơ đồ khối của vi điều khiển 8051
- CPU (Central Processing Unit): đơn vị xử lý trung tâm → tính toán và điều khiển quá trình hoạt động của hệ thống.
- OSC (Oscillator): Mạch dao động → tạo tín hiệu xung clock cung cấp cho các khối trong chip hoạt động.
Điều khiển ngắt là quá trình nhận tín hiệu ngắt từ các nguồn bên ngoài như INT0, INT1, từ bộ định thời (Timer 0, Timer 1) và từ cổng nối tiếp (Serial port) Các tín hiệu ngắt này sẽ được gửi đến CPU để xử lý một cách tuần tự.
Các thanh ghi khác đóng vai trò quan trọng trong việc lưu trữ dữ liệu của các cổng xuất/nhập và trạng thái hoạt động của các khối trong chip, đảm bảo hệ thống vận hành hiệu quả trong suốt quá trình hoạt động.
- RAM (Random Access Memory): Bộ nhớ dữ liệu trong chip → lưu trữ các dữ liệu.
- ROM (Read Only Memory): Bộ nhớ chương trình trong chip → lưu trữ chương trình hoạt động của chip.
- I/O ports (In/Out ports): Các port xuất/nhập → điều khiển việc xuất nhập dữ liệu dưới dạng song song giữa trong và ngoài chip thông qua các port P0, P1, P2, P3.
- Serial port: Port nối tiếp → điều khiển việc xuất nhập dữ liệu dưới dạng nối tiếp giữa trong và ngoài chip thông qua các chân TxD, RxD.
- Timer 0, Timer 1: Bộ định thời 0, 1 → dùng để định thời gian hoặc đếm sự kiện (đếm xung) thông qua các chân T0, T1.
- Bus control: điều khiển bus → điều khiển hoạt động của hệ thống bus và việc di chuyển thông tin trên hệ thống bus.
- Bus system: Hệ thống bus → liên kết các khối trong chip lại với nhau.
1.1.2.2 Sơ đồ chân và các chức năng của vi điều khiển 8051
- Port 0 (P0.0 – P0.7) có số chân từ 32 – 39
- Port 0 có hai chức năng:
• Port xuất nhập dữ liệu (P0.0 - P0.7) → không sử dụng bộ nhớ ngoài.
• Bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7) → có sử dụng bộ nhớ ngoài
Khi thiết lập lại, các chân Port 0 (P0.0 - P0.7) được mặc định cấu hình là port xuất dữ liệu Để chuyển đổi các chân này thành port nhập dữ liệu, cần lập trình lại bằng cách ghi mức logic cao (mức 1) vào tất cả các bit của port trước khi bắt đầu quá trình nhập dữ liệu.
- Khi lập trình cho ROM trong chip thì Port 0 đóng vai trò là ngõ vào của dữ liệu (D0 – D7).
- Port 1 (P1.0 – P1.7) có số chân từ 1 – 8
- Port 1 có một chức năng:
• Port xuất nhập dữ liệu (P1.0 – P1.7) → sử dụng hoặc không sử dụng bộ nhớ ngoài
Khi khởi động lại, các chân Port 1 (P1.0 – P1.7) được cài đặt mặc định để xuất dữ liệu Để chuyển đổi các chân này thành port nhập dữ liệu, cần lập trình lại bằng cách ghi mức logic cao (mức 1) vào tất cả các bit của port trước khi bắt đầu quá trình nhập dữ liệu.
- Khi lập trình cho ROM trong chip thì Port 1 đóng vai trò là ngõ vào của địa chỉ byte thấp (A0 – A7).
- Port 2 (P2.0 – P2.7) có số chân từ 21 – 28
- Port 2 có hai chức năng:
• Port xuất nhập dữ liệu (P2.0 – P2.7) → không sử dụng bộ nhớ ngoài
• Bus địa chỉ byte cao (A8 – A15) → có sử dụng bộ nhớ ngoài
Khi khởi động lại, các chân Port 2 (P2.0 – P2.7) được mặc định cấu hình là port xuất dữ liệu Để chuyển đổi các chân này thành port nhập dữ liệu, người dùng cần lập trình lại bằng cách ghi mức logic cao (mức 1) cho tất cả các bit của port trước khi bắt đầu nhập dữ liệu.
- Khi lập trình cho ROM trong chip thì Port 2 đóng vai trò là ngõ vào của địa chỉ byte cao (A8 – A11) và các tín hiệu điều khiển.
- Port 3 (P3.0 – P3.7) có số chân từ 10 – 17
- Port 3 có hai chức năng:
• Port xuất nhập dữ liệu (P3.0 – P3.7) → không sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt
• Các tín hiệu điều khiển → có sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt.
Ở chế độ mặc định, các chân Port 3 (P3.0 – P3.7) được cấu hình làm port xuất dữ liệu Để chuyển các chân Port 3 thành port nhập dữ liệu, cần lập trình lại bằng cách ghi mức logic cao (mức 1) vào tất cả các bit của port trước khi bắt đầu nhập dữ liệu.
- Khi lập trình cho ROM trong chip thì Port 3 đóng vai trò là ngõ vào của các tín hiệu điều khiển.
- Chức năng của các chân Port 3:
Bit Tên Địa chỉ bit Chức năng
P3.0 RxD B0H Chân nhận dữ liệu của port nối tiếp
P3.1 TxD B1H Chân phát dữ liệu của port nối tiếp
P3.4 T0 B4H Ngõ vào của bộ định thời/đếm 0
P3.5 T1 B5H Ngõ vào của bộ định thời/đếm 1
P3.6 WR B6H Điều khiển ghi vào RAM ngoài
P3.7 RD B7H Điều khiển đọc từ RAM ngoài
Bảng 1.2 Chức năng của các chân Port 3
- PSEN (Program Store Enable): cho phép bộ nhớ chương trình, chân số 29
• Là tín hiệu cho phép truy xuất (đọc) bộ nhớ chương trình (ROM) ngoài
• Là tín hiệu xuất, tích cực mức thấp
PSEN = 0 → trong thời gian CPU tìm - nạp lệnh từ ROM ngoài
PSEN = 1 → CPU sử dụng ROM trong (không sử dụng ROM ngoài)
Khi sử dụng bộ nhớ chương trình bên ngoài, chân PSEN thường được kết nối với chân OE của ROM ngoài, điều này cho phép CPU thực hiện việc đọc mã lệnh từ bộ nhớ ROM bên ngoài một cách hiệu quả.
- ALE (Address Latch Enable): cho phép chốt địa chỉ, chân số 30.
• Là tín hiệu cho phép chốt địa chỉ để thực hiện việc giải đa hợp cho bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7).
Khi tín hiệu ALE = 0, bus AD0 - AD7 hoạt động như bus D0 - D7, trong khi khi ALE = 1, bus AD0 - AD7 đảm nhận vai trò là bus A0 - A7.
- Khi lập trình cho ROM trong chip thì chân ALE đóng vai trò là ngõ vào của xung lập trình ( PGM ).
- Khi lệnh lấy dữ liệu từ RAM ngoài (MOVX) được thực hiện thì một xung ALE bị bỏ qua.
- EA (External Access): truy xuất ngoài, chân số 31
• Là tín hiệu cho phép truy xuất (sử dụng) bộ nhớ chương trình (ROM) ngoài.
• Là tín hiệu nhập, tích cực mức thấp
EA = 0 → Chip 8051 sử dụng chương trình của ROM ngoài
EA = 1 → Chip 8051 sử dụng chương trình của ROM trong.
- Khi lập trình cho ROM trong chip thì chân EA đóng vai trò là ngõ vào của điện áp lập trình (Vpp = 12V – 12,5V cho họ 89xx; 21V cho họ 80xx, 87xx).
- XTAL (Crystal): tinh thể thạch anh, chân số 18-19
• Dùng để nối với thạch anh hoặc mạch dao động tạo xung clock bên ngoài, cung cấp tín hiệu xung clock cho chip hoạt động
• XTAL1 → ngõ vào mạch tạo xung clock trong chip
• XTAL2 → ngõ ra mạch tạo xung clock trong chip.
- RST (Reset): thiết lập lại, chân số 9
• Là tín hiệu cho phép thiết lặp (đặt) lại trạng thái ban đầu cho hệ thống
• Là tín hiệu nhập, tích cực mức cao
RST = 0 → Chip 8051 hoạt động bình thường
RST = 1 → Chip 8051 được thiết lặp lại trạng thái ban đầu.
- Vcc, GND: nguồn cấp điện, chân số 40 và 20
• Cung cấp nguồn điện cho chip 8051 hoạt động
Chip vi điều khiển là thành phần trung tâm trong các thiết kế điều khiển, với bộ nhớ hạn chế, không có ổ đĩa và hệ điều hành Chương trình điều khiển được lưu trữ trong ROM, vì vậy chip 8051 có không gian bộ nhớ riêng cho cả chương trình và dữ liệu Cả hai loại bộ nhớ này đều nằm trong chip, nhưng có thể mở rộng bằng cách sử dụng chip nhớ bên ngoài, cho phép dung lượng tối đa lên đến 64K.
- Bộ vi xử lý → có không gian bộ nhớ chung cho dữ liệu và chương trình
- Bộ vi điều khiển → có không gian bộ nhớ riêng cho dữ liệu và chương trình.
→ chương trình và dữ liệu nằm riêng trên ROM và RAM trước khi đưa vào CPU để thực thi.
- Tổ chức bộ nhớ của chip 8051:
→→ chương trình và dữ liệu nằm chung trên RAM trước khi đưa vào CPU để thực thi
Hình 1.6 Không gian bộ nhớ của vi điều khiển 8051
The internal memory of a chip consists of ROM and RAM The RAM on the chip includes a general-purpose RAM area (30H-7FH), a bit-addressable RAM section (20H-2FH), a series of banks (00H-1FH), and special function registers (SFR) ranging from 80H to FFH.
TÌM HIỂU VỀ LCD 16X2
TỔNG QUAN VỀ LCD
Thế kỷ 21 chứng kiến sự bùng nổ của công nghệ, đặc biệt là công nghệ màn hình tinh thể lỏng (LCD) Phát hiện của nhà vật lý Áo Frinitzen Reinitzer về các tinh thể lỏng vào năm 1888 đã mở ra con đường cho sự phát triển của màn hình LCD Màn hình tinh thể lỏng đầu tiên ra đời vào những năm 70 của thế kỷ 20, chủ yếu được sử dụng trong máy tính, đồng hồ và thiết bị quan sát Ngày nay, công nghệ LCD ngày càng phát triển mạnh mẽ với chi phí sản xuất giảm, tiêu thụ năng lượng thấp và thiết kế gọn nhẹ, ứng dụng rộng rãi trong các thiết bị như tivi, màn hình máy tính và điện thoại.
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được ứng dụng rộng rãi trong các sản phẩm VĐK LCD nổi bật với nhiều ưu điểm như khả năng hiển thị đa dạng ký tự, bao gồm chữ, số và ký tự đồ họa Bên cạnh đó, nó dễ dàng tích hợp vào mạch ứng dụng qua nhiều giao thức giao tiếp khác nhau, tiêu tốn ít tài nguyên hệ thống và có giá thành hợp lý.
LCD (Liquid Crystal Display) hay màn hình tinh thể lỏng, là một công nghệ hiển thị phổ biến với nhiều loại khác nhau Trong các ứng dụng nhỏ, màn hình LCD16x2 thường được sử dụng, cho phép hiển thị 2 hàng ký tự, mỗi hàng có 16 ký tự.
Có thể chia các module LCD làm 2 loại chính:
+ Loại hiển thị ký tự (charater LCD) gồm có các các kích cỡ 16x1(16 kí tự x1 dòng) ;16x2(16 ký tự x2 dòng); 16x4 (16 ký tự x4 dòng); 20x1 (20 ký tự x1 dòng).
+ Loại hiển thị đồ họa (graphic LCD) đen trắng hoặc màu gồm các kích cỡ 1,47 inch (128x128 điểm ảnh); 1,8 inch (128x160 điểm ảnh); 2,4 inch (240x320 điểm ảnh).
Điện áp hoạt động là 5 V.
Chữ đen, nền xanh lá
Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với
Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây điện.
Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít điện năng hơn.
Có thể được điều khiển với 6 dây tín hiệu.
2.1.2 Sơ đồ, chức năng, liên kết các chân của LCD
Hình 2.2 Sơ đồ chân LCd 16x2
Mô tả các chân, loại 16 chân
- VDD (chân 2): cấp nguồn dương 5v +/ VSS (chân 1): cấp nguồn âm (GND)
Chân VEE (chân 3) điều khiển độ tương phản của LCD và cần được kết nối với một biến trở 10k để chia áp Trong quá trình hoạt động, người dùng có thể điều chỉnh biến trở để đạt được độ tương phản mong muốn, sau đó giữ mức này Các chân điều khiển RS, R/W, EN và các chân dữ liệu được kết nối trực tiếp với vi điều khiển Tùy thuộc vào chế độ hoạt động 4bit hay 8bit, các chân từ D0 đến D3 có thể được bỏ qua hoặc kết nối với vi điều khiển Đối với một số loại LCD, hai chân LED nền được đánh số 15 và 16, trong khi một số trường hợp khác lại được ghi là A (Anode) và K (Cathode), đại diện cho hai chân nguồn cho đèn LED nền.
- Chân chọn thanh ghi RS (chân 4_Register Select):
Có hai thanh ghi rất quan trọng trong LCD, chân này cho phép lựa chọn 1 trong
Thanh ghi IR và DR được sử dụng để tương tác với LCD, với một bit lựa chọn giữa chúng thông qua chân RS Khi RS=0, thanh ghi IR được chọn để gửi lệnh như xóa màn hình, trong khi RS=1 chọn thanh ghi DR để gửi dữ liệu hiển thị Thanh ghi IR chứa mã lệnh cho LCD, vì vậy để gửi mã lệnh, chân RS cần được thiết lập về 0 Ngược lại, để ghi mã ASCII của ký tự lên LCD, RS phải được đặt thành 1 để chọn thanh ghi DR.
RS được mô tả là thanh ghi điều khiển LCD, nơi người dùng cần "ra lệnh" thông qua tám đường bus DB0-DB7 Mỗi lệnh đều được đánh địa chỉ rõ ràng bởi nhà sản xuất LCD Người dùng chỉ cần cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR Khi nạp một chuỗi 8-bit vào thanh ghi IR, chip HD44780 sẽ tra cứu bảng mã lệnh tại địa chỉ được cung cấp và thực hiện lệnh tương ứng.
Lệnh “hiển thị màn hình” có địa chỉ 00001100 (DB7 DB0) và lệnh “hiển thị màn hình và con trỏ” có mã lệnh 00001110 Thanh ghi DR được sử dụng để chứa dữ liệu 8 bit, phục vụ cho việc ghi vào vùng nhớ.
RAM DDRAM và CGRAM được sử dụng để lưu trữ dữ liệu cho MPU trong chế độ ghi và đọc Khi MPU ghi thông tin vào DR, chip tự động lưu vào DDRAM hoặc CGRAM Đồng thời, khi địa chỉ được ghi vào IR, dữ liệu từ RAM nội của HD44780 sẽ được chuyển đến DR để gửi cho MPU Việc điều khiển chân RS và R/W cho phép chuyển đổi giữa hai thanh ghi này trong quá trình giao tiếp Hãy tham khảo bảng thiết lập cho hai chân RS và R/W để thực hiện giao tiếp hiệu quả với MPU.
Bằng cách điều khiển chân RS và R/W, chúng ta có thể chuyển đổi giữa hai thanh ghi trong quá trình giao tiếp với MPU Dưới đây là bảng tóm tắt các thiết lập cho hai chân RS và R/W nhằm phục vụ cho mục đích giao tiếp hiệu quả.
0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở
1 0 Ghi vào thanh ghi DR
1 1 Đọc dữ liệu từ DR
Bảng 2.1 Các thiết lập đối với hai chân RS và R/W
Khi làm việc với LCD, chân R/W quyết định giữa việc đọc và ghi dữ liệu Nếu R/W=0, dữ liệu sẽ được ghi từ bộ điều khiển ngoài vào LCD; nếu R/W=1, dữ liệu sẽ được đọc từ LCD Tuy nhiên, việc đọc chỉ có thể thực hiện khi kiểm tra trạng thái bận của LCD thông qua cờ Busy Flag (BF) Do LCD hoạt động chậm hơn vi điều khiển, cờ BF cho biết LCD có đang bận hay không; khi BF=1, cần chờ cho đến khi BF=0 mới có thể thực hiện thao tác tiếp theo Để đảm bảo LCD rảnh, cần có chương trình con wait_LCD, có thể được viết theo hai cách: cách 1 là đọc bit BF và chờ BF=0, yêu cầu kết nối chân R/W với bộ điều khiển ngoài; cách 2 là sử dụng hàm delay với thời gian cố định (tốt nhất trên 1ms), không cần đọc từ LCD, nên chân R/W có thể nối với GND Tuy nhiên, cách 2 có nhược điểm là thời gian delay cố định nếu quá dài sẽ làm chậm quá trình thao tác, còn nếu quá ngắn sẽ gây lỗi hiển thị.
- Chân cho phép E (chân 6_Enable)
Chân cho phép LCD hoạt động cần được kết nối với bộ điều khiển để thực hiện thao tác đọc và ghi dữ liệu từ LCD.
Để ghi dữ liệu vào LCD, trước tiên cần đảm bảo chân EN ở mức 0 Sau đó, dữ liệu được xuất đến các chân D0 đến D7 Tiếp theo, cần set chân EN lên 1 và sau đó quay lại mức 0 để tạo xung cạnh xuống Chân EN cho phép LCD chốt thông tin hiện tại trên các chân dữ liệu Khi dữ liệu đã được cung cấp, một xung mức cao xuống thấp phải được áp dụng để LCD chốt dữ liệu, với độ rộng xung tối thiểu là 450ns.
Chân D0+D7 là 8 chân dữ liệu 8 bit trên LCD, dùng để gửi thông tin và đọc nội dung các thanh ghi Để hiển thị chữ cái và số, chúng ta gửi mã ASCII từ A-Z, a-f và 0-9 khi RS=1, cùng với các lệnh như xóa màn hình hoặc di chuyển con trỏ Khi RS=0, ta kiểm tra cờ bận trên D7 để xác định LCD có sẵn sàng nhận thông tin hay không Nếu D7=1, LCD đang bận và không thể nhận dữ liệu mới; ngược lại, nếu D7=0, LCD đã sẵn sàng Việc kiểm tra cờ bận trước khi ghi dữ liệu lên LCD là rất quan trọng.
Cờ báo bận BF: (Busy Flag)
Khi chip thực hiện các hoạt động nội bộ, mạch bên trong cần thời gian để hoàn tất Trong quá trình này, LCD tạm ngưng giao tiếp với bên ngoài và kích hoạt cờ BF qua chân DB7 (với thiết lập RS=0, R/W=1) để thông báo cho MPU rằng nó đang "bận" Sau khi hoàn thành các tác vụ, LCD sẽ đặt cờ BF trở về mức 0.
Bộ đếm địa chỉ AC: (Address Counter)
Trong sơ đồ khối, thanh ghi IR không kết nối trực tiếp với vùng RAM (DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC Bộ đếm này kết nối với hai vùng RAM theo kiểu rẽ nhánh Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin sẽ được truyền trực tiếp đến hai vùng RAM, trong khi việc lựa chọn vùng RAM tương tác đã được quy định trong mã lệnh.
THỰC HIỆN MÔ HÌNH ĐỒ ÁN
CHƯƠNG TRÌNH CHÍNH
This article outlines the initialization and operation of an LCD display using specific microcontroller pin configurations It defines key variables and functions, including `lcd`, `rs`, `e`, `sw`, and `rst`, for controlling the display The code includes essential functions such as `delay`, `display`, `cmd`, `string`, and `init`, which facilitate the execution of commands and the display of characters on the LCD The `int_lcd` function is also highlighted for its role in managing integer display operations, ensuring effective communication between the microcontroller and the LCD.
} void int_lcd(unsigned int n)
{ sw=1; rst=1; init(); cmd(0x80); string(" Random Number "); cmd(0xc0); string(" Generator "); delay(2000); cmd(0x01); while(1)
{ cmd(0x80); string("Press the button"); while(sw!=0)
} cmd(0x80); string("RAND NUM: "); cmd(0x8a); int_lcd(i); while(rst!=0);