📄 main.c
字号:
/*********************************************************
程序名称:LED3216点阵交替变化显示汉字
简要说明:本程序只利用左半屏显示
P0口接上行线,P2口接下行线,P3口接扫描线
P3.0接左屏译码器使能端(CS1)
P3.1接右屏译码器使能端(CS2)
编 写:JiangX.net
*********************************************************/
#include<AT89X52.h>
#include<ziku.h>
#define uchar unsigned char //宏定义
#define hang1 P0 //上半屏行线
#define hang2 P2 //下半屏行线
#define lie P1 //扫描列线
#define CS1 P3_0 //接左屏154译码器使能端,低电平使能
#define CS2 P3_1 //接右屏154译码器使能端,低电平使能
#define num sizeof(hanzi)/16 //自动计算字数
uchar a=0,b=0; //全局变量用于汉字切换
/*****参数调整项*****/
#define speed 100 //变化速度调节
#define light 120 //显示亮度调节,数值不可过大,以不感到屏幕闪烁为准
/*****延时子程序*****/
void delay(void) //专门设置的延时程序用来改变扫描速度以方便调节亮度
{
uchar i;
for(i=0;i<light;i++);
}
/*****初始化子程序*****/
void init(void) //定时器初始化,设置定时器0工作方式1,定时时间5ms
{
TMOD=0x1;
TH0=0xec;
TL0=0x78;
}
/*****定时器中断服务程序*****/
void time0(void)interrupt 1
{
TH0=0xec;
TL0=0x78;;
a++;
if (a==speed){a=0;b++;}
if(b>num/2-1) b=0; //所有汉字显示完毕,回到第一个汉字
}
/*****显示子程序*****/
void display(void)
{
uchar i; //关右屏
CS2=1; //开左屏
CS1=0;
for(i=0;i<16;i++)
{
lie=i; //列扫描信号输出
hang1=hanzi[32*b+i];
hang2=hanzi[32*b+i+16]; //行信号输出
delay();
hang1=0;
hang2=0;
}
}
/*****主程序*****/
void main(void)
{
init();
TR0=1;
ET0=1;
EA=1; //开中断
while(1)
{
display();
}
}
/*****END*****/
/*****欢迎到作者博客交流:http://www.jiangx.net*****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -