📄 main.c
字号:
/******************** 2011电子科技协会 ********************
;名称 :点阵
;作者 : 郑品洪
;日期 : 07/25/2011
;描述 : 循环显示I LOVE(心形) U
;说明 :由于这里将心形采用动态形式显示, 使得显示数组较多, 前三个一样的数组是为了延长“I” 的显示时间,这样显示时间才协调
后三个数组同理,中间的九个数组是使得心形有动态效果的,这里看起来很复杂,实则读者在这里只要掌握
595的使用就可以很容易理解了,595的使用涉及到操作时序,需要看懂时序图,这是很重要的
;***********************************************************/
#include <stm8s105s4.h>
#define uchar unsigned char
#define uint unsigned int
_Bool E @PG_ODR:0; //注意这里开始引入位定义, 相当于51里的sbit E=PG0;这是stm8的位定义形式
_Bool RCLK @PD_ODR:4;
_Bool SRCLK @PD_ODR:5;
_Bool SER @PD_ODR:6;
uchar a,b;
uchar table[14][8]={{0xff,0x83,0xef,0xef,0xef,0xef,0x83,0xff},
{0xff,0x83,0xef,0xef,0xef,0xef,0x83,0xff},
{0xff,0x83,0xef,0xef,0xef,0xef,0x83,0xff},
{0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff},
{0xff,0x93,0xef,0xff,0xff,0xff,0xff,0xff},
{0xff,0x93,0x6d,0xff,0xff,0xff,0xff,0xff},
{0xff,0x93,0x6d,0x7d,0xff,0xff,0xff,0xff},
{0xff,0x93,0x6d,0x7d,0xbb,0xff,0xff,0xff},
{0xff,0x93,0x6d,0x7d,0xbb,0xd7,0xff,0xff},
{0xff,0x93,0x6d,0x7d,0xbb,0xd7,0xef,0xff},
{0xff,0x93,0x6d,0x7d,0xbb,0xd7,0xef,0xff},
{0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff},
{0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff},
{0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff}};
//存放了显示的代码
void delay(uint s)
{
uchar i;
for(s;s>0;s--)
for(i=0;i<200;i++);
}
void init(void) //初始化函数,PC是用来控制138以驱动点阵的行
{
PG_DDR=0x01;
PG_CR1=0x01;
PG_CR2=0x00;
PD_DDR=0x70;
PD_CR1=0x70;
PD_CR2=0x00;
PC_DDR=0x0f;
PC_CR1=0x0f;
PC_CR2=0x00;
}
void display(void) //显示子函数
{
uchar m,n,p,q;
E=1; //先关闭595(赋值时会影响显示效果)
m=table[a][b]; //将要显示的table[a][b]赋值给m
for(q=0;q<8;q++)
{
p=0;
if((m&0x80)==0x80)
p=1; //这三句的意思是如果m的最高位是1,则p=1,否则为0,就是把m最高位赋值给p
SER=p; //把p输入595输入口
SRCLK=0;
RCLK=1;
if(1);
SRCLK=1;
RCLK=0; //以上语句涉及 595的操作时序, 请参考595芯片资料
m=(m<<1);
}
E=0; //赋值完后打开595
}
void main()
{
uint i,j;
init();
while(1)
{
for(a=0;a<14;a++) //有14个数组要传送
{
for(i=0;i<10;i++) //每个数组扫描10次,这样才 能看清楚
{
for(b=0;b<8;b++) //每个数组有8个数
{
display();
PC_ODR=b*2; //让138和595同步
delay(2); //延时一会,以使显示清楚, 延时不能太长,太长会看到闪烁,也不能太短,太短显示不清楚
}
}
}
delay(1000); //为了使得看起来是I LOVE U是一个周期,这里循环一次后,延时1秒
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -