keil uvision4中文乱码问题

2013年10月26日 1 条评论

最近,重新安装原版的keil uvision4,发现keil工程中的中文字符一复制到博客上就发生乱码,
解决方法
修改下面选项

分类: 代码库 标签:

1602液晶自定义字符

2013年10月26日 没有评论
//预编译
#include
#include

//宏定义
#define uint unsigned int
#define uchar unsigned char

//显示字符设定
uchar code table[] = "   I love MCU   ";             //第一行
uchar code table1[] = {0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};

//自定义函数
void write_com(uchar com);
void delayms(uint x);
void init();
void write_data(uchar date);
void gesture();


//端口定义
sbit lcdrs = P3^4;           //定义
sbit lcdrw = P3^6;
sbit lcden = P3^5;

//主函数
int main()
{
	uint i;
	init();
	gesture();
	write_com(0x80);    
	for(i = 0;i < 16;i++)
	{	
		write_data(table[i]);
		delayms(5);
	}
	write_com(0x80 + 0x40);
	for(i = 0;i < 16;i++)
	{	
		write_data(0);
		delayms(5);
	}
	
	while(1);
	return 0;
}


//延时函数
void delayms(uint x)
{
	uint i,j;
	for(i = x;i > 0;i--)
		for(j = 110;j > 0;j--);
}


//初始化函数
void init()
{
	write_com(0x38);          //显示模式设定
	write_com(0x0c);          //
	write_com(0x06);          //************************
	write_com(0x01);          //光标初始化
}

//写指令模式
void write_com(uchar com)
{
	lcdrs = 0;
	lcdrw = 0;
	P1 = com;
	delayms(5);
	lcden = 0;
	delayms(5);
	lcden = 1;
	delayms(5);
	lcden = 0;
}

//写数据模式
void write_data(uchar date)
{
	lcdrs = 1;
	lcdrw = 0;
	P1 = date;
	delayms(5);
	lcden = 0;
	delayms(5);
	lcden = 1;
	delayms(5);
	lcden = 0;
}

//自定义符号
void gesture()
{
	uint i;
	write_com(0x40);
	for(i = 0;i < 8;i++)
		{
			write_data(table1[i]);
			delayms(5);
		}
}
分类: C51, 代码库 标签:

2013年10月25日 没有评论


/*杨辉三角
*Blog:ylingblog.sinaapp.com
*作者:yling
*更新时间:2013-10-25
*问题:算法很复杂,只支持9阶及以内杨辉三角
***/
//预编译
#include
#include

//变量
char str[20][40];
int x,y;
void init();

//自定义函数
void space(int x);       //
void output();          //输出函数
void add1();            //添加1
void addother();        //添加其它数值(除1之外)
init();                 //初始化函数

int main()
{
	scanf("%d",&x); //输入阶数
	y = 2*x-x%2;    //处理在奇偶不同的情况
	init();         //初始化
	space(x);       //
	add1();
	addother();
	output();	
	while(1);
	return 0;
}

//打印空格函数
void space(int x)
{
	int i,j;
	for(i = 0;i < x;i++)
	{
		
		for(j = 0;j < x-i-1;j++)
			str[i][j] ='0';	
	}
	for(i = 0;i < x;i++)
	{
		for(j = y;j > x + i -1;j--)
			str[i][j] ='0';
		
	}
}

//输出函数
void output()
{
	int i,j;
	for(i = 0;i < x;i++)
	{
		for(j = 0;j < y;j++)
			if(str[i][j] == 48)
				printf("    ");
			else
			{
			printf("%4d",str[i][j]-48);			
			}
	printf("\n");
	}
	
}

//添加1
void add1()
{
	int i,j;
	j = x;
	for(i = 0;i < x;i++)
		str[i][x - i - 1] ='1';
	for(i = 0;i < x;i++)
		str[i + 1][x + i] ='1';
}

//添加其它数
void addother()
{
	int i,j;
	for(i = 0;i < x;i++)
	{
		for(j = 0;j < y;j++)
			if(str[i][j] != 48&&str[i][j + 2] != 48)
				str[i + 1][j +1] = str[i][j] +str[i][j + 2] -48;

	}
}
void init()
{
	int i,j;
	for(i = 0;i < 20;i++)
		for(j = 0;j < 40;j++)
			str[i][j]='0';
}
分类: C语言代码, 代码库 标签:

1602液晶驱动

2013年10月25日 没有评论
//预编译
#include
#include

//宏定义
#define uint unsigned int
#define uchar unsigned char

//输出内容设定
uchar code table[] = "   I love MCU   ";             //第一行
uchar code table1[] = "2222     ";                //第二行

//自定义函数
void write_com(uchar com);
void delayms(uint x);
void init();
void write_data(uchar date);



//端口定义
sbit lcdrs = P3^4;           //片选
sbit lcdrw = P3^6;
sbit lcden = P3^5;

//主函数
int main()
{
	uint i;
	init();
	write_com(0x80);    
	for(i = 0;i < 16;i++)
	{	
		write_data(table[i]);
		delayms(5);
	}
	write_com(0x80 + 0x40);
	for(i = 0;i < 16;i++)
	{	
		write_data(table1[i]);
		delayms(5);
	}
	
	while(1);
	return 0;
}


//延时函数
void delayms(uint x)
{
	uint i,j;
	for(i = x;i > 0;i--)
		for(j = 110;j > 0;j--);
}


//初始化函数
void init()
{
	write_com(0x38);          //显示设定
	write_com(0x0c);          //
	write_com(0x06);          //************************
	write_com(0x01);          //清屏,指针复位
}

//写指令模式
void write_com(uchar com)
{
	lcdrs = 0;
	lcdrw = 0;
	P1 = com;
	delayms(5);
	lcden = 0;
	delayms(5);
	lcden = 1;
	delayms(5);
	lcden = 0;
}

//写数据模式
void write_data(uchar date)
{
	lcdrs = 1;
	lcdrw = 0;
	P1 = date;
	delayms(5);
	lcden = 0;
	delayms(5);
	lcden = 1;
	delayms(5);
	lcden = 0;
}
分类: C语言代码, 代码库 标签:

串口通信

2013年10月20日 没有评论


//串口调试
#include
//宏定义                  
#define uchar unsigned char
#define uint unsigned int
uchar flag,a,i;
uchar code table[] = "I get";
void init()
{
	TMOD = 0x20;		  //0x20 = 00100000	设定定时器1为工作方式2, 8位初值自动重装定时器
	TH1 = 0xfd;	          //0xfd = 11111101 设定定时器初值
	TL1 = 0xfd;			  //设定溢出值
	TR1 = 1;			  //开定时器1
	REN = 1;			  //允许串行接收位
	SM0 = 0;			  //十位移步收发(8位数据),波特率可变由(定时器1的溢出率控制)
	SM1 = 1;
	EA = 1;				  //开全局中断
	ES = 1;				  //打开串行口通信
}

int main()
{
	init();
	while(1)
	{
		if(flag == 1)	                //判断是否收到数据
		{
			ES = 0;                     //关串行口通信
			for(i = 0;i < 6;i++)
			{
				SBUF = table[i];   
				while(!TI);	            //发送成功1后,硬件会将TI = 1
				TI = 0;				    //TI手动复位
			}
			SBUF = a;
			while(!TI);
			TI = 0;
			ES = 1;			  //打开串行口通信
			flag = 0;
		}
	}
	return 0;
}
void ser()interrupt 4
{
	RI = 0;	        //收到数据后RI = 1,,清零
	a = SBUF;		//读取
	flag = 1;		//用于主程序的判断
}

分类: 代码库 标签:

串口通信

2013年10月20日 没有评论

//串口调试
#include
//宏定义
#define uchar unsigned char
#define uint unsigned int
uchar flag,a,i;
uchar code table[] = “I get”;
void init()
{
TMOD = 0×20; //0×20 = 00100000 设定定时器1为工作方式2, 8位初值自动重装定时器
TH1 = 0xfd; //0xfd = 11111101 设定定时器初值
TL1 = 0xfd; //设定溢出值
TR1 = 1; //开定时器1
REN = 1; //允许串行接收位
SM0 = 0; //十位移步收发(8位数据),波特率可变由(定时器1的溢出率控制)
SM1 = 1;
EA = 1; //开全局中断
ES = 1; //打开串行口通信
}

int main()
{
init();
while(1)
{
if(flag == 1) //判断是否收到数据
{
ES = 0; //关串行口通信
for(i = 0;i < 6;i++)
{
SBUF = table[i];
while(!TI); //发送成功1后,硬件会将TI = 1
TI = 0; //TI手动复位
}
SBUF = a;
while(!TI);
TI = 0;
ES = 1; //打开串行口通信
flag = 0;
}
}
return 0;
}
void ser()interrupt 4
{
RI = 0; //收到数据后RI = 1,,清零
a = SBUF; //读取
flag = 1; //用于主程序的判断
}

分类: 代码库 标签:

矩阵键盘(数码管无法显示两位)

2013年10月20日 没有评论

/*数码管显示驱动
*作者:yling
*blog:ylingblog.sinaapp.com
*QQ:410064008
*本驱动使用四位的阴极数码管,
*P0控制显示整数
*P1^0-P1^4控制具体的亮的数码管

***********************************************/
//矩阵键盘
#include
//宏定义
#define uint  unsigned int
#define uchar unsigned char

uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
};                               //0,1,2,3,4,5,6,7,8,9,
uchar code light[]={
0x8,0x4,0x2,0x1};                //分别对应1,2,3,4位

void matrixkey();
void display(uint x);
void delayms(uint x);

//主函数
int main()
{
	TMOD = 0x01;                  //定义定时器的工作方式
	TH0 = (65536 - 45872)/256;	  //定义中断50ms
	TL0 = (65536 - 45872)%256;
	ET0 = 1;                      //开定时器
	TR0 = 1;                      //启动定时器0
	EA = 1;	                      //开总中断
 	while(1);					  //发生延时进入下一步
	return 0;
}

//矩阵键盘扫描函数
void matrixkey()
{
	uchar temp;
	uint key;
	//扫描第一列
	P3 = 0xfe;					 //0xfe = 11111110
	temp = P3;
	temp = temp&0xf0;
	if(temp !=0xf0)
	{
		delayms(10);              //延时防抖
		temp = P3;
		switch(temp)
		{
			case 0xee:key = 1;break;		  //扫描第一行
			case 0xde:key = 5;break;		  //扫描第二行
			case 0xbe:key = 9;break;		  //扫描第三行
			case 0x7e:key = 13;break;		  //扫描第四行
		}
		while(temp != 0xf0)		              //等待按键松开
		{
			temp = P3;
			temp = temp&0xf0;
		}
		display(key);
	} 
	//第二列
	P3 = 0xfd;
	temp = P3;
	temp = temp&0xf0;
	if(temp!=0xf0)
	{
		delayms(10);
		temp = P3;
		switch(temp)
			{
			case 0xed:key = 2;break;
			case 0xdd:key = 6;break;
			case 0xbd:key = 10;break;
			case 0x7d:key = 14;break;
			}
		while(temp != 0xf0)
		{
			temp = P3;
			temp = temp&0xf0;
		}	
	display(key);
	}
	//第三列
	P3 = 0xfb;
	temp = P3;
	temp = temp&0xf0;
	if(temp!=0xf0)
	{
		delayms(10);
		temp = P3;
		switch(temp)
			{
			case 0xeb:key = 3;break;
			case 0xdb:key = 7;break;
			case 0xbb:key = 11;break;
			case 0x7b:key = 15;break;
			}
		while(temp != 0xf0)
		{
			temp = P3;
			temp = temp&0xf0;
		}	
	display(key);
	}
	//第二列
	P3 = 0xf7;
	temp = P3;
	temp = temp&0xf0;
	if(temp!=0xf0)
	{
		delayms(10);
		temp = P3;
		switch(temp)
			{
			case 0xe7:key = 4;break;
			case 0xd7:key = 8;break;
			case 0xb7:key = 12;break;
			case 0x77:key = 16;break;
			}
		while(temp != 0xf0)
		{
			temp = P3;
			temp = temp&0xf0;
		}	
	display(key);
	}
	display(key);						 
}						 						 

//延时函数
void delayms(uint x)					//粗略的延时x毫秒
{
	uint i,j;
	for(i = x;i > 0;i--)
		for(j = 110; j > 0;j--);
}

//定义数码管显示函数,形参为x
void display(uint x)              
{
	uint qian,bai,shi,ge;
	uint i;
	qian = x/1000;               //计算千位
	bai = x%1000/100;            //计算百位
	shi = x%100/10;              //计算十位
	ge = x%10;
	for(i = 0;i < 4;i++)		 //显示部分
	{
		if(i == 0)
		{
			P0 = 0x00;			 //消影
			P1 = light[0];
			P0 = table[qian];
		}
		if(i == 1)
		{
			P0 = 0x00;			 //消影
			P1 = light[1];
			P0 = table[bai];
		}
		if(i == 2)
		{
			P0 =0x00;			 //消影
			P1 = light[2];
			P0 = table[shi];
		}
		if(i == 3)
		{
			P0 = 0x00;			 //消影
			P1 = light[3];
			P0 = table[ge];
		}
	}
}

//定时器中断
void t() interrupt 1
{
	matrixkey();
	TH0 = (65536 - 65533)/256;	  //定义中断50ms
	TL0 = (65536 - 65533)%256;

}

分类: 代码库 标签:

定时器中断

2013年10月20日 没有评论

#include
#define uchar unsigned char
#define uint unsigned int
int i = 1;
int num = 0;	
void main()
{
	TMOD = 0x01;                  //定义定时器的工作方式
	TH0 = (65536 - 45872)/256;	  //定义中断50ms
	TL0 = (65536 - 45872)%256;
	ET0 = 1;                      //开定时器
	TR0 = 1;                      //启动定时器0
	EA = 1;	                      //开总中断
 	while(1);					  //发生延时进入下一步
}
void t() interrupt 1
{
	TH0 = (65536 - 45872)/256;	  //定义中断50ms
	TL0 = (65536 - 45872)%256;
	//添加代码
}


分类: 代码库 标签:

延时函数

2013年10月19日 没有评论
#define uint unsigned int

//延时函数
void delayms(uint x)					//粗略的延时x毫秒
{
	uint i,j;
	for(i = x;i > 0;i--)
		for(j = 110; j > 0;j--);
}
分类: C51 标签:

矩阵键盘驱动

2013年10月19日 没有评论

矩阵键盘电路图

 

 

/*数码管显示驱动
*作者:yling
*blog:ylingblog.sinaapp.com
*QQ:410064008
*本驱动使用四位的阴极数码管,
*P0控制显示整数
*P1^0-P1^4控制具体的亮的数码管

***********************************************/
//矩阵键盘
#include
//宏定义
#define uint  unsigned int
#define uchar unsigned char

uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
};                               //0,1,2,3,4,5,6,7,8,9,
uchar code light[]={
0x8,0x4,0x2,0x1};                //分别对应1,2,3,4位

void matrixkey();
void display(uint x);
void delayms(uint x);

//主函数
int main()
{
	while(1)
	{
		matrixkey();
	}
	return 0;
}

//矩阵键盘扫描函数
void matrixkey()
{
	uchar temp;
	uint key;
	//扫描第一列
	P3 = 0xfe;					 //0xfe = 11111110
	temp = P3;
	temp = temp&0xf0;
	if(temp !=0xf0)
	{
		delayms(10);              //延时防抖
		temp = P3;
		switch(temp)
		{
			case 0xee:key = 1;break;		  //扫描第一行
			case 0xde:key = 5;break;		  //扫描第二行
			case 0xbe:key = 9;break;		  //扫描第三行
			case 0x7e:key = 13;break;		  //扫描第四行
		}
		while(temp != 0xf0)		              //等待按键松开
		{
			temp = P3;
			temp = temp&0xf0;
		}
		display(key);
	} 
	//第二列
	P3 = 0xfd;
	temp = P3;
	temp = temp&0xf0;
	if(temp!=0xf0)
	{
		delayms(10);
		temp = P3;
		switch(temp)
			{
			case 0xed:key = 2;break;
			case 0xdd:key = 6;break;
			case 0xbd:key = 10;break;
			case 0x7d:key = 14;break;
			}
		while(temp != 0xf0)
		{
			temp = P3;
			temp = temp&0xf0;
		}	
	display(key);
	}
	//第三列
	P3 = 0xfb;
	temp = P3;
	temp = temp&0xf0;
	if(temp!=0xf0)
	{
		delayms(10);
		temp = P3;
		switch(temp)
			{
			case 0xeb:key = 3;break;
			case 0xdb:key = 7;break;
			case 0xbb:key = 11;break;
			case 0x7b:key = 15;break;
			}
		while(temp != 0xf0)
		{
			temp = P3;
			temp = temp&0xf0;
		}	
	display(key);
	}
	//第二列
	P3 = 0xf7;
	temp = P3;
	temp = temp&0xf0;
	if(temp!=0xf0)
	{
		delayms(10);
		temp = P3;
		switch(temp)
			{
			case 0xe7:key = 4;break;
			case 0xd7:key = 8;break;
			case 0xb7:key = 12;break;
			case 0x77:key = 16;break;
			}
		while(temp != 0xf0)
		{
			temp = P3;
			temp = temp&0xf0;
		}	
	display(key);
	}						 
}						 						 

//延时函数
void delayms(uint x)					//粗略的延时x毫秒
{
	uint i,j;
	for(i = x;i > 0;i--)
		for(j = 110; j > 0;j--);
}

//定义数码管显示函数,形参为x
void display(uint x)              
{
	uint qian,bai,shi,ge;
	uint i;
	qian = x/1000;               //计算千位
	bai = x%1000/100;            //计算百位
	shi = x%100/10;              //计算十位
	ge = x%10;
	for(i = 0;i < 4;i++)		 //显示部分
	{
		if(i == 0)
		{
			P0 = 0x00;			 //消影
			P1 = light[0];
			P0 = table[qian];
		}
		if(i == 1)
		{
			P0 = 0x00;			 //消影
			P1 = light[1];
			P0 = table[bai];
		}
		if(i == 2)
		{
			P0 =0x00;			 //消影
			P1 = light[2];
			P0 = table[shi];
		}
		if(i == 3)
		{
			P0 = 0x00;			 //消影
			P1 = light[3];
			P0 = table[ge];
		}
	}
}
分类: C51 标签: