永发信息网

单片机c语言,我的单片机是:stc12c5a60s2 液晶是12864 带字库的 我想实现一个功能如下:

答案:2  悬赏:60  手机版
解决时间 2021-11-26 22:35
单片机c语言,我的单片机是:stc12c5a60s2 液晶是12864 带字库的 我想实现一个功能如下:
最佳答案
//适用于st7920驱动的带字库12864液晶
#include
#include
#include "stdio.h"
void send_com(unsigned char cmd);
void send_data(unsigned char dat);
void print(unsigned char x,unsigned char y,char* str);
#define DATA P0 //P2接数据口
#define uint unsigned int
#define uchar unsigned char
sfr WATCH_DOG=0xc1;
sbit RS=P3^7;
sbit RW=P3^6;
sbit P21=P2^1;
sbit P20=P2^0;
sbit E=P2^2;
uchar gun[16],num,flag;

//

void delay(uint i)
{
char a;
while(i--)
{
for(a=0;a<10;a++);
}
}
void delay1(uint i)
{
while(i--);
}

//测忙碌子程序
//RS=0,RW=1,E=H,D0-D7=状态字

void chek_busy(void)
{ unsigned char temp1;//状态信息(判断是否忙)
P2=0x13;
P20=0;
P21=1;
DATA=0xFF;
RS = 0;
delay1(10);
RW = 1;
delay1(10);
do{
E = 1;
P21=0;
delay1(10);
temp1 = DATA;
E = 0;
delay1(10);
} while(temp1&0x80);//??????
RS = 0;
delay1(10);
RW = 0;
P20=1;
delay1(10);
P2=0x13;
}

read_12864()
{
uchar shuju;
P20=0;
P21=1;
DATA=0xff;
RS=1;
delay1(10);
RW=1;
delay1(10);
E=1;
P21=0;
delay1(10);
shuju=DATA;
E=0;
delay1(10);
P2=0x13;
return(shuju);
}

//写命令子程序

void send_com(unsigned char cmd)
{
chek_busy();
P2=0x13;
delay1(10);
P20=0;
RS = 0;
delay1(10);
RW = 0;
delay1(10);
P21=1;
E = 1;
delay1(10);
DATA = cmd;
E = 0;
P20=1;
delay1(10);
P2=0x13;
}

//写数据子程序

void send_data(unsigned char dat)
{
chek_busy();
P2=0x13;
P20=0;
RS = 1;
delay1(10);
RW = 0;
delay1(10);
P21=1;
E = 1;
delay1(10);
DATA = dat;
E = 0;
P20=1;
delay1(10);
P2=0x13;
}

// 设置字符串显示位置 xpos(0~7),ypos(1~4)

void set_xy(unsigned char xpos,unsigned char ypos)
{
switch(ypos)
{
case 1:
send_com(0x80|xpos);break;
case 2:
send_com(0x90|xpos);break;
case 3:
send_com(0x88|xpos);break;
case 4:
send_com(0x98|xpos);break;
default:break;
}
}

// 在指定位置显示字符串

void print(unsigned char x,unsigned char y,char* str)
{
unsigned char lcd_temp;
set_xy(x,y);
lcd_temp=*str;
while(lcd_temp != 0x00)
{
send_data(lcd_temp);
lcd_temp=*(++str);
}
}

//LCD字库初始化函数

void lcd_str(void)
{
delay(4000);
send_com(0x30);
delay(1000);
send_com(0x0C);
delay(1000);
send_com(0x01);
delay(1000);
send_com(0x06);
}

//LCD图片(扩展)初始化函数

void lcd_pic(void)
{
send_com(0x36);
delay(1000);
send_com(0x36);
delay(1000);
send_com(0x3E);
delay(1000);
send_com(0x01);
}

void serisr() interrupt 4
{
if(RI)
{
RI=0;
gun[num]=SBUF;
num++;
TR0=0;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
}
if(TI)
{
TI=0;
}
}

void t0isr() interrupt 1
{
flag=1;
TR0=0;
}



void main()
{
uint i;
lcd_str();
TMOD=0x01;
ET0=1;
EA=1;
num=0;
flag=0;
while(1)
{
if(flag==1) //10ms没有接收到数据则处理已接收数据
{
num=0;
flag=0;
if((gun[3]=='1')&&(gun[5]=='2')){
print(0,1,"环境");
print(4,1,gun);
}
for(i=0;i<16;i++)gun[i]=0;
}
}
}追问串行连接:决定显示的内容:4.6位数字 大哥能六下qq嘛 谢谢啊
11 班长 12 副班 13 组长 14 副组 15 学生
21 书记 22 副书 23 队长 24 副队 25 队员
31 校长 33 主任 34 老师 35 党员
显示格式为:
成员证号: 队长
14526342536987 //队员号的第四位和第六位是23
请以上队员确认
厦门集美大学!追答我说兄弟,参照程序稍加补充就OK了,你自己完善一下,也作为做一个课题的收获吧,这里已经给你提供了一个思路。追问大哥 主要是有的看不懂 呀 六下qq吧 大哥 比如
sbit P21=P2^1;
sbit P20=P2^0;
#define DATA P0 //P2接数据口 我接的p0口 没有反映 可能是上面两个没接

什么意思 怎么接 呀追答带字库的12864还需要接控制线RS、RW、E,你看到上面的定义了吗?追问大哥 完全按照你的 定义接的 就是数据线接的p0口 没有接你注释说的p2 口 但是没有 反映 给单片机 送数据 没有反映

大哥能加qq么 这边 我追问完这次就不能 追问了 帮帮忙吧 大哥追答有关接口部分修改了一下,你试试,这个程序我原来采用的是STC12系列CPU1T工作模式速度较快,现在稍微调整了一下,你替换原来相同程序看看

//测忙碌子程序
//RS=0,RW=1,E=H,D0-D7=状态字

void chek_busy(void)
{ unsigned char temp1;//状态信息(判断是否忙)
DATA=0xFF;
RS = 0;
delay1(1);
RW = 1;
delay1(1);
do{
E = 1;
delay1(1);
temp1 = DATA;
E = 0;
delay1(1);
} while(temp1&0x80);
RS = 0;
delay1(1);
RW = 0;
delay1(1);
}

read_12864()
{
uchar shuju;
DATA=0xff;
RS=1;
delay1(1);
RW=1;
delay1(1);
E=1;
delay1(1);
shuju=DATA;
E=0;
delay1(1);
return(shuju);
}

//写命令子程序

void send_com(unsigned char cmd)
{
chek_busy();
RS = 0;
delay1(1);
RW = 0;
delay1(1);
E = 1;
delay1(1);
DATA = cmd;
E = 0;
delay1(1);
}

//写数据子程序

void send_data(unsigned char dat)
{
chek_busy();
RS = 1;
delay1(1);
RW = 0;
delay1(1);
E = 1;
delay1(1);
DATA = dat;
E = 0;
delay1(1);
}
全部回答
建立一个缓冲,将接收到的字符串存起来,然后取出4 6位做比较即可,处理完后清空缓冲并设置好标志位
分析gps模块的数据就会采用这种方式,那么数据量很大的,所以这个还是比较容易的,按照上面我说的方法比较容易实现,
如果每个字符串都是 字头 就更好办了,比如都是SDX开头的追问你脚得楼上的写得对吗? 我写程序进单片机没有作用追答他程序是在他的板子上实现的,你的板子的接口跟他的不一定一样,比如P0.0接的是哪里,P0.1接的又是哪里,这个定义是需要修改的

sbit SDA = P0^0;
这个就是定义端口,你跟他端口都不一样,程序肯定也执行的不对的

显示你必须自己实现,如果在这里让大家帮你实现,那就需要你吧电路图发出来,液晶资料发出来,很多工作的

如果只是问问接收到串口的数据如何解析处理,就按我说的建立缓存然后处理即可,先从简单入手,都是一步一步成长起来的,直接让大家给你代码你看不懂也没有什么意思
如果只是交作业就直接出钱找人帮你设计即可。追问大哥 他的板子和我是一样的 还有你说的什么p0.0 p0.1
sbit SDA = P0^0;

这些 程序里面貌似都没有呀 你是不是看错了呀追答p0.0 p0.1 是比方啦

加油吧,方法告诉你了,实现就要靠你了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
茜茜浴室怎么去啊,有知道地址的么
女朋友的爷爷去世了,我想给她发短信
已知函数f(x)对任意x∈R都有f(x+4)-f(x
这个图能看岀来多少个字
aj3黑水泥为什么没人穿
非隐非显法,说是真实际。 悟此隐显法,非愚亦
在高速,因前方事故,前车向右并道,并急刹,
各位大神,海银金控属于海银系吗?
男木鼠金命与女土蛇火命婚姻配吗
重庆北站到重庆西站环形轻轨开通没有?
FREEFOOT
为什么有的人死后的身体还会带笑容?
途讯k058蓝牙与安卓手机匹配不上,是何原因。
森森1米鱼缸上过滤器如何改造
AMD专用条是什么内存条?
推荐资讯
顺和汽修(汕尾陆丰市)地址在什么地方,我要处
旧活塞环还能在次使用吗
如果m=3n那么m与n一定不互质吗
如何做到手机悬浮自拍,谁也猜不到的结局
往饭店送甲醇做燃料违法吗
HERO涂鸦秀的门票在韩游网上订便宜还是在携程
谁的痴,谁的傻,谁为谁相思染白霜华?未到来年
jsp在<%%>中判断满足条件包含哪个页面?
“寒冬虽冷 暖意忧在”这句这么写对吗
哪个牌子的牛奶好喝?诺尔嘉怎么样?
甘肃兰州亚欧有没有儿童玩的地方
c1驾龄六年增驾b2驾驶证驾龄会不会改变
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?