- /*****************************************************************************
- *版权信息:
- *文 件 名:
- *当前版本:V1.0
- *MCU 型号:STC12C5608AD
- *开发环境:Keil uVision4
- *晶震频率:11.0592MHZ
- *完成日期:2013-07-29
- *程序功能:1.上电8段4位共阴数码管显示1、2、3、4.
- 2.按下K11与DIG1,K12与DIG2 ,K13与DIG3之间的按键,数码管第一位分别显示5、6、7。
- *免责声明:
- ********************************************************************************/
- #include<reg52.h> //MCU头文件
- #include<intrins.h> //包含nop指令头文件
- #define uint unsigned int //数据类型宏定义
- #define uchar unsigned char //数据类型宏定义
- #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义
- /********************定义控制端口**********************/
- sbit SCL=P3^3; //时钟线
- sbit SDA=P3^2; //数据线
- uchar keya; //定义读出按键返回值
- /*************1ms延时*晶振11.0592M********************/
- void delay(uint n)
- {
- uint i;
- while(n--)
- for(i=0;i<550;i++);
- }
- /**************共阴数码管显示0-F**********************/
- uchar display[]={0xFF,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阴极字段码
- /************ START信号*******************************/
- void FZH110_START()
- {
- SCL=1;
- SDA=1;
- nop;
- SDA=0;
- nop;
- SCL=0;
- }
- /******************** STOP信号************************/
- void FZH110_STOP()
- {
- SDA=0;
- nop;
- SCL=1;
- nop;
- SDA=1;
- nop;
- SCL=0;
- SDA=0;
- }
- /****************写1个字节给FZH110********************/
- void write_8bit( uchar dat)
- {
- uchar i;
- SCL=0;
- for(i=0;i<8;i++)
- {
- if(dat&0x80)
- {
- SDA=1;
- nop;
- nop;
- SCL=1;
- nop;
- nop;
- nop;
- nop;
- nop;
- SCL=0;
- }
- else
- {
- SDA=0;
- nop;
- nop;
- SCL=1;
- nop;
- nop;
- nop;
- nop;
- nop;
- SCL=0;
- }
- dat<<=1;
- }
- SDA=1; //ACK信号
- nop;
- nop;
- nop;
- nop;
- SCL=1;
- nop;
- nop;
- nop;
- nop;
- nop;
- SCL=0;
- nop;
- nop;
- }
- /**********************读8bit**************************/
- uchar read_8bit()
- {
- uchar dat,i;
- SDA=1;
- dat=0;
- for(i=0;i<8;i++)
- {
- SCL=1; //时钟上沿
- nop;
- nop;
- nop;
- dat<<=1;
- if(SDA)
- dat++;
- SCL=0;
- nop;
- nop;
- nop;
- nop;
- }
- SDA=0; //ACK信号
- nop;
- nop;
- nop;
- SCL=1;
- nop;
- nop;
- nop;
- nop;
- SCL=0;
- nop;
-
- return dat ;
- }
- /*******************读按键命令************************/
- uchar FZH110_read()
- {
- uchar key;
- FZH110_START();
- write_8bit(0x4F);//读按键指令
- key=read_8bit();
- FZH110_STOP();
- return key;
- }
- /*****************发送命令信号***********************/
- void FZH110_send(uchar date1,uchar date2)
- {
- FZH110_START();
- write_8bit(date1);
- write_8bit(date2);
- FZH110_STOP();
- }
- /*****************显示函数***********************/
- void disp_close()
- {
- FZH110_send(0x48,0x01); // 开启显示模式:8段显示,1级亮度
- FZH110_send(0X68,display[1]); //GID1
- FZH110_send(0X6A,display[0]); //GID2
- FZH110_send(0X6C,display[0]); //GID3
- FZH110_send(0X6E,display[0]); //GID4
- }
- /**************主函数**************************/
- void main(void)
- {
- //上电显示1、2、3、4
- delay(10);
-
- while(1)
- {
- disp();
- }
- }
复制代码 最近做了个数码管驱动的程序,但发现厂家给的程序竟然不行!改了很多地方没有效果,状态为:四位数码管只能显示同一个数字,显示了不同的就会花屏,而且亮度怎么改都没变化,请求各位大佬帮忙找找错误的地方!
|