标题:
1602自编.C(51): error C129: missing ';' before 'main'求大神拯救
[打印本页]
作者:
三贤人
时间:
2020-2-16 00:09
标题:
1602自编.C(51): error C129: missing ';' before 'main'求大神拯救
程序源码如下 报错位置在主函数main附近 看啦2小时不知错在哪里 跪求大神指点迷境
#include<reg52.h>
sbit LCD1602_RS=P2^4;
sbit LCD1602_RW=P2^5;
sbit LCD1602_EN=P2^6;
sbit LCD1602_DB=P0;
unsigned int i;
unsigned char code shuzu1[]="1234567890123456";
unsigned char code shuzu2[]="9876543210987654";
void Read_Busy() //忙检测函数,判断bit7是0,允许执行;1禁止
{
unsigned char sta; //
LCD1602_DB = 0xff;
LCD1602_RS = 0;
LCD1602_RW = 1;
do
{
LCD1602_EN = 1;
sta = LCD1602_DB;
LCD1602_EN = 0; //使能,用完就拉低,释放总线
}while(sta & 0x80);
}
void Lcd1602_Write_Cmd(unsigned char cmd) //写命令
{
Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
LCD1602_RS = 0;//RS数据命令选择RS=1数据 RS=0命令
LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
LCD1602_DB = cmd;//命令放到P0(假设)上
LCD1602_EN = 1;//*****************使能信号 =1开始工作
LCD1602_EN = 0; //*****************使能信号 =1开始工作
}
void Lcd1602_Write_Data(unsigned char dat) //写数据
{
Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
LCD1602_RS = 1;//RS数据命令选择RS=1数据 RS=0命令
LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
LCD1602_DB = dat;//数据放到P0(假设)上
LCD1602_EN = 1;//使能开
LCD1602_EN = 0;//使能关
}
void InitLcd1602() //1602初始化 共5组初始化寄存器
{
Lcd1602_Write_Cmd(0x38); //打开,5*8,8位数据 00111000
Lcd1602_Write_Cmd(0x0c); //00001100后三位表示 开显示 不显光标 光标不闪烁
Lcd1602_Write_Cmd(0x06); //00000110 //写一个字符后地址指针加一
Lcd1602_Write_Cmd(0x01); //清屏
}
viod main()
{
InitLcd1602();
for(i = 0; i < 16; i++);
{
Lcd1602_Write_Data(shuzu1[i]);
}
void Lcd1602_Write_Cmd(0x80+0x40);
for(i = 0; i < 16; i++);
{
Lcd1602_Write_Data(shuzu2[i]);
}
while(1);
}
作者:
三贤人
时间:
2020-2-16 01:27
不好意思 大半夜献丑了 字母拼错了
作者:
csmyldl
时间:
2020-2-16 01:55
main前面的单词改为void 倒数第7行的void去掉
作者:
gd2051
时间:
2020-2-16 02:15
程序到这个地方有问题!!!
viod main() 改成=》 void main()
主函数里面
void Lcd1602_Write_Cmd(0x80+0x40); 去掉 void =》Lcd1602_Write_Cmd(0x80+0x40);
祝你成功!!!!!
作者:
钟志伟
时间:
2020-2-16 02:46
我觉得主函数那里发数据有误,楼主可以参考一下我用过的驱动程序!
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_data P0
sbit LCD1602_RS=P2^6;
sbit LCD1602_RW=P2^5;
sbit LCD1602_EN= P2^7;
void LCD1602_Init();
void LCD1602_Write_cmd(uchar cmd);
void LCD1602_Write_data(uchar dat);
void LCD1602_display();
uchar code table0[]="STC";
uchar code table1[]="ARM";
void delay(uint a)
{
uint i,j;
for (i=a;i>0;i--)
for (j=110;j>0;j--);
}
void LCD1602_Write_cmd(uchar cmd)//写指令函数
{
LCD1602_RS=0;//写指令
LCD1602_RW=0;//写操作
LCD1602_data=cmd;
delay(5);
LCD1602_EN=1;
LCD1602_EN=0;
}
void LCD1602_Write_data(uchar dat)//写数据函数
{
LCD1602_RS=1;//写数据
LCD1602_RW=0;//写操作
LCD1602_data=dat;
delay(5);
LCD1602_EN=1;
LCD1602_EN=0;
}
void LCD1602_Init()
{
LCD1602_Write_cmd(0x38);//8位数据,双列,5X7字形
LCD1602_Write_cmd(0x0c);//开启显示屏,关光标,光标不闪烁
LCD1602_Write_cmd(0x06);//显示地址递增,即写一个数据后,显示位置右移一位
LCD1602_Write_cmd(0x01);//清屏
}
void LCD1602_display(void)//显示函数
{
uchar a,b;
LCD1602_Init();
LCD1602_Write_cmd(0x80);
for(a=0;a<3;a++)
{
LCD1602_Write_data(table0[a]);
delay(200);
}
LCD1602_Write_cmd(0x80+0x40);
for(b=0;b<3;b++)
{
LCD1602_Write_data(table1[b]);
delay(200);
}
}
void main()
{
LCD1602_Init();
LCD1602_display();
while(1);
}
复制代码
作者:
wulin
时间:
2020-2-16 05:44
楼主错得不是一两处,抄的不认真,你对比一下就明白。
无标题.jpg
(91.36 KB, 下载次数: 32)
下载附件
2020-2-16 05:37 上传
#include<reg52.h>
sbit LCD1602_RS=P2^4;
sbit LCD1602_RW=P2^5;
sbit LCD1602_EN=P2^6;
//sbit LCD1602_DB=P0;
<font color="#ff0000">#define LCD1602_DB P0</font>
unsigned int i;
unsigned char code shuzu1[]="1234567890123456";
unsigned char code shuzu2[]="9876543210987654";
void Read_Busy() //忙检测函数,判断bit7是0,允许执行;1禁止
{
unsigned char sta; //
LCD1602_DB = 0xff;
LCD1602_RS = 0;
LCD1602_RW = 1;
do
{
LCD1602_EN = 1;
sta = LCD1602_DB;
LCD1602_EN = 0; //使能,用完就拉低,释放总线
}while(sta & 0x80);
}
void Lcd1602_Write_Cmd(unsigned char cmd) //写命令
{
Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
LCD1602_RS = 0;//RS数据命令选择RS=1数据 RS=0命令
LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
LCD1602_DB = cmd;//命令放到P0(假设)上
LCD1602_EN = 1;//*****************使能信号 =1开始工作
LCD1602_EN = 0; //*****************使能信号 =1开始工作
}
void Lcd1602_Write_Data(unsigned char dat) //写数据
{
Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
LCD1602_RS = 1;//RS数据命令选择RS=1数据 RS=0命令
LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
LCD1602_DB = dat;//数据放到P0(假设)上
LCD1602_EN = 1;//使能开
LCD1602_EN = 0;//使能关
}
void InitLcd1602() //1602初始化 共5组初始化寄存器
{
Lcd1602_Write_Cmd(0x38); //打开,5*8,8位数据 00111000
Lcd1602_Write_Cmd(0x0c); //00001100后三位表示 开显示 不显光标 光标不闪烁
Lcd1602_Write_Cmd(0x06); //00000110 //写一个字符后地址指针加一
Lcd1602_Write_Cmd(0x01); //清屏
}
//viod main()
<font color="#ff0000">void main()</font>
{
InitLcd1602();
<font color="#ff0000"> Lcd1602_Write_Cmd(0x80);</font>
// for(i = 0; i < 16; i++);
<font color="#ff0000"> for(i = 0; i < 16; i++)</font>
{
Lcd1602_Write_Data(shuzu1[i]);
}
// void Lcd1602_Write_Cmd(0x80+0x40);
<font color="#ff0000"> Lcd1602_Write_Cmd(0x80+0x40);</font>
// for(i = 0; i < 16; i++);
<font color="#ff0000"> for(i = 0; i < 16; i++)</font>
{
Lcd1602_Write_Data(shuzu2[i]);
}
while(1);
}
复制代码
作者:
angmall
时间:
2020-2-16 07:39
这里错了
viod main()
改成这样 void main()
作者:
ankangyu
时间:
2020-2-16 07:40
把for循环 小括号 后面的 ; 去掉试试,两个都要去掉
作者:
xusheng656
时间:
2020-2-16 08:29
viod main()
{
InitLcd1602();
for(i = 0; i < 16; void写反了
作者:
banalsheep
时间:
2020-2-16 09:57
不像自编的。。。
作者:
紫红君的盛夏
时间:
2020-2-16 13:37
void main
作者:
lyl44
时间:
2020-2-16 18:11
void拼错了
作者:
。。jj
时间:
2020-2-16 18:42
本帖最后由 。。jj 于 2020-2-16 19:14 编辑
楼主的程序除了主函数的void main错误之外,应该把倒数第7行的void删掉,在程序中使用函数是只需要写函数名就可以了,不需要加void,在写1602的写命令和写数据的程序时建议加一个延时程序,不要直接写,楼主这样写可能会出错,建议加个延时。
void dealy(unsigned int c)
{
unsigned int a,b;
for(;c>0;c--)
{
for(b=199;b>0;b--);
for(a=1;a>0;a--);
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1