這個程序想在仿真軟件里面實現
研究了好久
原來加入一個滑動電阻改變它的背光以及控制它的D0-D7口需要加一個10K的上拉電阻
單片機源程序如下:
- #include <reg51.h>
- sbit LCD_RS = P2^0;
- sbit LCD_RW = P2^1;
- sbit LCD_E = P2^2;
- #define LCD_DATA P0
- sbit KEY1 = P1^0;
- sbit KEY2 = P1^1;
- sbit KEY3 = P1^2;
- void DelayMs(unsigned int ms) {
- unsigned int i, j;
- for(i = ms; i > 0; i--)
- for(j = 110; j > 0; j--);
- }
- void LCD_WriteCmd(unsigned char cmd) {
- LCD_RS = 0;
- LCD_RW = 0;
- LCD_DATA = cmd;
- DelayMs(1);
- LCD_E = 1;
- DelayMs(1);
- LCD_E = 0;
- DelayMs(1);
- }
- void LCD_WriteDat(unsigned char dat) {
- LCD_RS = 1;
- LCD_RW = 0;
- LCD_DATA = dat;
- DelayMs(1);
- LCD_E = 1;
- DelayMs(1);
- LCD_E = 0;
- DelayMs(1);
- }
- void LCD_Init() {
- DelayMs(20);
- LCD_WriteCmd(0x38);
- DelayMs(5);
- LCD_WriteCmd(0x38);
- DelayMs(5);
- LCD_WriteCmd(0x38);
- LCD_WriteCmd(0x0C);
- LCD_WriteCmd(0x06);
- LCD_WriteCmd(0x01);
- DelayMs(2);
- }
- void LCD_ShowStr(unsigned char x, unsigned char y, unsigned char *str) {
- unsigned char addr;
-
- if(y == 0) addr = 0x80 + x;
- else addr = 0xC0 + x;
- LCD_WriteCmd(addr);
-
- while(*str != '\0') {
- LCD_WriteDat(*str);
- str++;
- }
- }
- unsigned char Key_Scan() {
- if(KEY1 == 0) {
- DelayMs(20);
- if(KEY1 == 0) {
- while(KEY1 == 0);
- return 1;
- }
- }
- else if(KEY2 == 0) {
- DelayMs(20);
- if(KEY2 == 0) {
- while(KEY2 == 0);
- return 2;
- }
- }
- else if(KEY3 == 0) {
- DelayMs(20);
- if(KEY3 == 0) {
- while(KEY3 == 0);
- return 3;
- }
- }
- return 0;
- }
- void main() {
- unsigned char key_val;
- LCD_Init();
- LCD_ShowStr(0,0,"請選擇速度:");
-
- while(1) {
- key_val = Key_Scan();
- if(key_val != 0) {
- LCD_WriteCmd(0x01);
- switch(key_val) {
- case 1:
- LCD_ShowStr(0,0,"Speed: Low");
- break;
- case 2:
- LCD_ShowStr(0,0,"Speed: Mid");
- break;
- case 3:
- LCD_ShowStr(0,0,"Speed: High");
- break;
- default:
- break;
- }
- }
- }
- }
復制代碼
|