资源描述:
《Proteus实例教程 教学课件 作者 朱清慧、陈绍东8.2程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、8.2实例程序#include#include#defineucharunsignedchar#defineclkP2_5//74HC595的移位脉冲SH_CP#definesclkP2_6//74HC595的并行数据输出脉冲ST_CP#defineenP2_4//74HC595的清零端#definedatP2_7//74HC595的数据输入端DSvoidhang(uchara)//一个字节点阵数据的串行送出函数{uchark;//P2=0;//en=1;for
2、(k=0;k<8;k++){dat=a&0x80;//把数据组a中的一个字节与上0x80,即只保留最高位并送到P2.7clk=1;clk=0;//产生一个移位脉冲a<<=1;//数据a中的数据左移一位}}delay1ms(unsignedcharm)//延时函数{unsignedcharn;while(m--){for(n=0;n<122;n++);}}voidmain(void)//主函数{uchari,j,q;ucharcodea[32]={0x01,0x00,0x01,0x04,0xFF,0xFE
3、,0x01,0x00,0x02,0x00,0x3F,0xFC,0x24,0x24,0x22,0x44,0x2F,0xF4,0x21,0x04,0x3F,0xFC,0x21,0x04,0x21,0x04,0x21,0x14,0x21,0x08,0x00,0x00};//“南”字的点阵数据,共32字节,16行,每行两字节ucharcodeb[32]={0x00,0x00,0x7D,0xFC,0x45,0x04,0x49,0x04,0x49,0x04,0x51,0x04,0x49,0xFC,0x45,0x04
4、,0x45,0x04,0x45,0x04,0x69,0x04,0x51,0x04,0x41,0xFC,0x41,0x04,0x40,0x00,0x40,0x00};//“阳”字的点阵数据,共32字节,16行,每行两字节ucharcodec[32]={0x00,0x00,0x03,0xFC,0xFA,0x44,0x22,0x44,0x23,0xFC,0x22,0x44,0xFA,0x44,0x23,0xFC,0x22,0x44,0x20,0x40,0x23,0xFC,0x38,0x40,0xC0,0x40
5、,0x00,0x40,0x0F,0xFE,0x00,0x00};//“理”字的点阵数据,共32字节,16行,每行两字节ucharcoded[32]={0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00};//“工”字的点阵数据,共32字节,
6、16行,每行两字节while(1)//循环体{P2=0;//P2口清零en=1;//置1,禁止清零for(j=0;j<62;j++)//“南”字循环显示62遍,造成显示延时效果{for(i=0;i<32;i=i+2)//依次取“南”字32个字节{hang(a[i]);//调数组a中一个字节点阵数据(对应某行右半部)hang(a[i+1]);//调数组a中相邻下一个字节点阵数据(对应某行左半部)q=(31-i)/2;//计算该行显示时行选通译码器的编码值P2=P2&0xf0;//P2口低四位清零,高四位不
7、变P2=P2
8、q;//P2口输出对应编码值sclk=1;sclk=0;//给74HC595一个并行数据输出脉冲,把一行显示数据同时送出delay1ms(1);//显示一行后调延时函数}}for(j=0;j<62;j++)//该段程序实现“阳”字显示{for(i=0;i<32;i=i+2){hang(b[i]);//调数组b中一个字节点阵数据(对应某行右半部)hang(b[i+1]);//调数组b中相邻下一个字节点阵数据(对应某行左半部)q=(31-i)/2;P2=P2&0xf0;P2=P2
9、q;sclk
10、=1;sclk=0;delay1ms(1);}}for(j=0;j<62;j++)//该段程序实现“理”字显示{for(i=0;i<32;i=i+2){hang(c[i]);//调数组c中一个字节点阵数据(对应某行右半部)hang(c[i+1]);//调数组c中相邻下一个字节点阵数据(对应某行左半部)q=(31-i)/2;P2=P2&0xf0;P2=P2
11、q;sclk=1;sclk=0;delay1ms(1);}}for(j=0;j<62;