📄 led595.c
字号:
/**************************************/
/*我的第一个LED显示程序,请高手多指点 */
/*程序功能:用两个点阵LED顺序显示0-9 */
/*作者:邓国明 */
/*地址:厦门大学机电工程系03级 */
/*Email:gmdengxm@163.com */
/**************************************/
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
/*******************数字点阵**************/
uchar code shuzi[10][16] =
{
{0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00}, //"1",0
{0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00}, //"2",1
{0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00}, //"3",2
{0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00}, //"4",3
{0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00}, //"5",4
{0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00}, //"6",5
{0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00,0x08,0x00,0x00,0x00}, //"7",6
{0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00}, //"8",7
{0x00,0x00,0xE0,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00}, //"9",8
{0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00} //"0",9
};
/*********************汉字点阵*******************/
/********************位口定义*******************/
sbit P17 = P1^7;
/********************变量定义********************/
uint delayi,delayj,rxdi,i,j,k,n,m; //delayi,delayj,n 延时函数变量。rxdi为串行口输出变量
//i,j,k,m输出控制变量
/********************函数声明*******************/
void delay(uint n); //不精确延时函数,延时n ms
void rxdout(uchar *d); //串行口输出函数
/*******************主函数**********************/
void main()
{
SCON = 0x00; //串行口方式0,RXD输出数据,TXD输出脉冲
while(1)
{
for( i = 0; i < 10; i++) //数字显示
{
for(k = 0; k < 10; k++)
{
for((m = 0, j = 0); j < 16; j += 2)
{
P17 = 0; //P17口为595锁存
rxdout(&shuzi[i][j]);
rxdout(&shuzi[i][j+1]);
P17 = 1; //595上升沿锁存数据
P1 = m; //行驱动
++m;
delay(1); //延时200微秒
}
}
delay(200); //延时准备显示下一个数字
delay(200);
delay(200);
}
}
}
/*******************子函数定义*********************/
void delay(uint n) //不精确延时,12MHz延时大约(200+3)*n微秒
{
for( ; n > 0; n--)
{
for(delayi = 0; delayi < 100; delayi++)
{
;
}
}
}
void rxdout(uchar *d) //串行口输出
{
SBUF = *d;
while(TI == 0);
TI = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -