51单片机点阵液晶汉字显示实验代码
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07, 0x7f, 0X6f}; //定义数码管显示模式表
sbit LSA=P2^2; //定义P2.2口为LSA的引脚
sbit LSB=P2^3; //定义P2.3口为LSB的引脚
sbit LSC=P2^4; //定义P2.4口为LSC的引脚
void delay(uint z) //延时函数
{ uint x ,y ; for( x = z ; x > 0 ; x-- ) for ( y = 110 ; y > 0 ; y-- ); }
void Display() //显示函数,用于控制位选和数据选
{ uchar i; P0 = 0xff; delay(1); for (i=1;i<9;i++) { P0 = ~(1<<i); if ( i == 1 ) LSA = 0 ; else if ( i == 2 ) LSB = 0 ; else if ( i == 3 ) LSC = 0 ; else {LSA=1;LSB=1;LSC=1;} delay(1); } }
void main() //主函数,用于显示一个“51”字样 { uchar m ,n ,q ,k ,a[4]; while ( 1 ) { a[3]='5'; a[2]='1'; for ( q = 3 ; q > -1 ;)//外循环,用于显示不同位上的内容(如前面一位是5后面一位是1)。 { k=(a[q]-48)*16+a[q-1]-48-16*(a[q-1]/16);//将ASCII值转换成十六进制数 P2=(~q)&0X07;//根据不同循环情况将地址传送到74HC138中 Display();//将十六进制数传送到译码器并最后在LED上显示 P0=~table[k];//以表的形式将对应ASCII值的十六进制数传送到LED上 q--;delay(10); }} }
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!