编写 stc89c52 12864 代码
时间: 2023-07-02 09:13:16 浏览: 60
同样地,我可以给您提供一些基本的思路和步骤,希望对您有所帮助。
12864液晶显示屏和stc89c52 MCU的连接方式,一般是采用8位并行方式连接。具体连接方式可以查看液晶显示屏的数据手册和MCU的硬件手册。下面是一个简单的例子程序,可以供您参考:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS = P0^0;
sbit LCD_RW = P0^1;
sbit LCD_E = P0^2;
sbit LCD_PS = P0^3;
sbit LCD_CS1 = P0^4;
sbit LCD_CS2 = P0^5;
void LCD_Init(){
LCD_PS = 1;
LCD_CS1 = 1;
LCD_CS2 = 1;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_E = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_E = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
LCD_Write_Cmd(0x3f); //开启显示
LCD_Write_Cmd(0xc0); //设置显示位置
LCD_Write_Cmd(0xb8); //设置页地址
LCD_Write_Cmd(0x40); //设置列地址
}
void LCD_Write_Cmd(uchar cmd){
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
_nop_();
_nop_();
P2 = cmd;
_nop_();
_nop_();
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_E = 0;
}
void LCD_Write_Data(uchar dat){
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 0;
_nop_();
_nop_();
P2 = dat;
_nop_();
_nop_();
LCD_E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_E = 0;
}
void LCD_Clear(){
uchar i,j;
for(i=0;i<8;i++){
LCD_Write_Cmd(0xb8+i);
LCD_Write_Cmd(0x40);
for(j=0;j<64;j++){
LCD_Write_Data(0x00);
}
}
}
void LCD_Display_Char(uchar x, uchar y, uchar ch){
uchar page = y/8;
uchar column = x;
if(x < 64){
LCD_CS1 = 1;
LCD_CS2 = 0;
LCD_Write_Cmd(0xb8+page);
LCD_Write_Cmd(0x40+column);
LCD_Write_Data(ch);
}
else{
LCD_CS1 = 0;
LCD_CS2 = 1;
LCD_Write_Cmd(0xb8+page);
LCD_Write_Cmd(0x40+(column-64));
LCD_Write_Data(ch);
}
}
void LCD_Display_String(uchar x, uchar y, uchar *str){
uchar i=0;
while(str[i] != '\0'){
LCD_Display_Char(x+i*8, y, str[i]);
i++;
}
}
void main(){
LCD_Init();
LCD_Clear();
LCD_Display_String(0, 0, "Hello, World!");
while(1);
}
```
这个程序使用了 P2 作为数据总线,P0.0~P0.5 分别作为控制线。LCD_Init() 函数用于初始化液晶显示屏,LCD_Write_Cmd() 函数用于向液晶显示屏发送指令,LCD_Write_Data() 函数用于向液晶显示屏发送数据。在主函数中,首先调用 LCD_Init() 函数初始化液晶显示屏,然后使用 LCD_Clear() 函数清屏,并且使用 LCD_Display_String() 函数在第一行显示字符串 "Hello, World!"。
需要注意的是,这个程序只是一个简单的示例,实际应用中还需要根据具体情况进行调整和优化。同时,如果您对 stc89c52 MCU 和12864液晶显示屏不熟悉,建议先学习相关知识再进行编程。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)