1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| //------------------------------------—— //名称:用75LS595与74LS154在16x16点阵屏上显示信息 //说明:本例综合使用了串入并出芯片75LS595,4-16译码器75LS154及 //反相放大器74LS06,在16x16点阵屏上实现了汉字滚动显示效果。 #include<reg51.h> //#include <REGX52.H> #include <intrins.h>
#define uchar unsigned char #define uint unsigned int sbit Serial_Data_Pin = P0^0;//75LS595串行数据输入 sbit Shift_CLK_Pin = P3^7;//75LS595移位脉冲 sbit RCK_Pin = P0^1;//75LS595输出锁存器控制 sbit Switch_74LS154 = P3^6;//74LS154译码器开关
uchar data Bit_Stream_8[32];//发送给75LS595的位流,每片接收8位 uchar code Word_Set_OF_16x16[][32]=//待显示文字的点阵 { {0xFF,0XFF,0x8F,0XF0,0x07,0XE0,0x77,0xEF,0x77,0xEF,0x07,0xE0,0x8F,0xF0,0xFF,0XFF, 0XFF,0XFF,0X0F,0xF0,0x07,0XE0,0xF7,0xEF,0XF7,0xEF,0X07,0xE0,0x0F,0XF0,0XEF,0XFF},//80
//{0XFF,0XFF,0x07,0XF6,0X07,0xE6,0x77,0XEF,0x77,0XEF,0x77,0XE0,0XF7,0XF0,0XFF,0XFF, //0xFF,0XFF,0XEF,0XFF,0XEF,0XFF,0X07,0XE0,0x07,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0xFF},//51 {0xFF,0xFF,0x03,0xCE,0x03,0xCE,0x73,0xCE,0x73,0xCE,0x73,0xCE,0x73,0xCE,0x73,0xC0, 0x73,0xC0,0xFF,0xFF,0xFF,0xFF,0xEF,0xDF,0x03,0xC0,0x03,0xC0,0xFF,0xDF,0xFF,0xFF},//51
{0xFF,0xEF,0xFF,0xEF,0x07,0xEC,0xB6,0xED,0xB5,0xED,0xB3,0xED,0xB7,0xED,0x07,0x00, 0xB7,0xED,0xB3,0xED,0xB5,0xED,0xB6,0xED,0x07,0xEC,0xFF,0xEF,0xFF,0xEF,0xFF,0xFF},/\*"单",0\*/
{0xFF,0xFF,0xFF,0x7F,0xFF,0x9F,0x01,0xE0,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD, 0xDF,0xFD,0xC0,0xFD,0xDF,0x01,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF},/\*"片",1\*/
{0xFF,0xFF,0xEF,0xF3,0x6F,0xFC,0x01,0x80,0x01,0x80,0x6F,0xBC,0xEF,0x9D,0xFF,0xC7, 0x03,0xF0,0xFB,0xFF,0xFB,0xFF,0x03,0xC0,0x03,0x80,0xFF,0xBF,0xFF,0x9F,0xFF,0xFF},/\*"机",2\*/
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xF0,0x07,0xE0,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF, 0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xC3,0xC3,0xC3,0xE3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/\*"C",0\*/
{0xFF,0xFF,0xBF,0xFF,0xB9,0xFF,0x33,0x80,0xFF,0xE7,0x7F,0xF7,0x6D,0xFF,0x6D,0x03, 0x0D,0xBB,0x41,0xBB,0x6D,0xBB,0x6D,0xBB,0x0D,0xBB,0x0D,0x03,0x7D,0xFF,0xFF,0xFF},/\*"语",1\*/
{0xFF,0xFF,0xF7,0xFF,0xF7,0xFF,0xD7,0x82,0xD7,0xDA,0xD7,0xDA,0xD7,0xDA,0xD1,0xDA, 0xD7,0xDA,0xD7,0xDA,0xD7,0xDA,0xD7,0xDA,0xD7,0x82,0xF7,0xFF,0xF7,0xFF,0xFF,0xFF},/\*"言",2\*/
{0xBF,0xFB,0x8F,0xFB,0xCE,0xFB,0x68,0xFB,0x69,0xFB,0x6F,0xBB,0x6E,0x3B,0x68,0x01, 0x69,0x81,0x6F,0xF8,0x67,0xFA,0x63,0xFB,0xE8,0xFB,0xAC,0xFB,0x8F,0xFB,0xCF,0xFB},//学"
{0xFF,0xFF,0xFD,0xF7,0xFD,0xE7,0xFD,0xE7,0xED,0xF3,0xCD,0xFB,0x1D,0xFB,0x3D,0xF9, 0xFD,0xFD,0xFD,0xBC,0xFD,0x3E,0xFD,0x3E,0x01,0x80,0x01,0xC0,0xFF,0xFF,0xFF,0xFF},//习"
};
//延时 void Delay(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } }
//向75LS595的串行输入引脚写入一字节 void Serial\_Input\_Pin(uchar Abyte) { uchar i;// for(i=0;i<8;i++) { Abyte <<=1; Serial_Data_Pin = CY; Shift_CLK_Pin = 1;//上升沿移位i \_nop\_(); \_nop\_(); Shift_CLK_Pin = 0; } }
//定时器0中断,在主程序中的延时期间以1ms的间隔动态显示每列数据 //所显示的数据由2片75LS595并行输出 void TO\_Led\_Display\_control() interrupt 1 { uchar i; TH0 = -1000/256; //1ms 定时 TL0 = -1000%256; i=(P2+1)&0x0f; //当前列号加1,屏蔽高4位i=0~15 Serial\_Input\_Pin(Bit_Stream_8[i\*2 +1]); Serial\_Input\_Pin(Bit_Stream_8[i\*2]); Switch_74LS154 =1;//关闭译码器 RCK_Pin =1; //上升沿将数据送到输出锁存器 RCK_Pin =0; //锁存显示数据(2x8=16位) Switch_74LS154 = 0;//打开译码器 P2=i;//列号译码(4-16) } void main() { uchar i,k; TMOD = 0x01;//定时器T0工作方式1 TH0 = (65536-1000)/256; //1ms 定时 TL0= (65536-1000)%256; IE = 0x82;//允许定时器T0中断 P2 = 0xFF;//行号端口初值 while(1) { for(k=0;k<10;k++)//显示12项内容 { for(i= 0;i<32;i++)//将当前待显示内容放入Bit\_Stream.8 { Bit_Stream_8[i]= Word_Set_OF_16x16[k][i]; TR0 = 1; Delay(50);//在此期间由定时器中断显示信息 TR0 = 0; P2 = 0XFF; } } } }
|