1:大板单片机的使用
首先在老师的帮助下了解了keil软件的一些基本操作,同时学会了如何烧录程序,了解了在进行实验的时候注意跳线的状态。
2:汉字张欣我♥你的代码实现
#include
#include
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
//--定义要使用的IO口--//
#define COMMONPORTS P0
//--列选通控制--//
unsigned char code TAB[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//--点阵字码--//
unsigned char code CHARCODE[5][8]=
{
0xBD,0xA5,0xF7,0x10,0xFF,0x39,0x55,0x92, //张
0x7E,0xA0,0xBE,0x20,0x4E,0xF0,0x5E,0x60, //欣
0x10,0x55,0xBF,0x14,0x10,0xFE,0x99,0x52, //我
0x38,0x7C,0x3E,0x1F,0x1F,0x3E,0x7C,0x38, //心形
0x20,0x7F,0x84,0x6A,0xC1,0x5F,0x68,0x44, //你
};
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<121;j++);
}
/*******************************************************************************
* 函数名 : Hc595SendByte(unsigned char dat)
* 函数功能 :想74H595发送一个字节的数据
* 输入 :无
* 输出 :无
*******************************************************************************/
void Hc595SendByte(unsigned char dat)
{
unsignedchar a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void main()
{
unsigned char tab, j;
unsignedint i;
while(1)
{
for(i=0; i<50; i++ ) //两个字之间的扫描间隔时间
{
for(tab=0;tab<8;tab++)
{
Hc595SendByte(0x00); //消隐
COMMONPORTS = TAB[tab]; //输出字码
Hc595SendByte(CHARCODE[j][tab]);
delay(2);
}
}
j++;
if(j== 5)
{
j= 0;
}
}
三、效果展示
四、编程中遇到的问题及解决办法
1:
if(j== 4)
{
j= 0;
}
解决方法:有几个字符数组元素就应该做到相应的扩充 同时j==也相应变成对应的数组元素个数
2:在设计16进制的时候
点阵上四排分别对应8 4 2 1
点阵下四排分别对应8 4 2 1
这样方便计算。
3:编程不是独立完成的,字符的编码是自己设计的,c语言当初偷懒听师姐背代码就行,没有好好听课,所以一到写代码就头疼,读了好几遍。虽然不能独立写出来,但是还是有收获的。